forked from I2P_Developers/i2p.i2p
146 lines
3.5 KiB
Java
146 lines
3.5 KiB
Java
/******************************************************************
|
|
*
|
|
* CyberUPnP for Java
|
|
*
|
|
* Copyright (C) Satoshi Konno 2002
|
|
*
|
|
* File: ControlRequest.java
|
|
*
|
|
* Revision;
|
|
*
|
|
* 01/29/03
|
|
* - first revision.
|
|
* 05/09/05
|
|
* - Changed getActionName() to return when the delimiter is not found.
|
|
*
|
|
******************************************************************/
|
|
|
|
package org.cybergarage.upnp.control;
|
|
|
|
import org.cybergarage.http.*;
|
|
import org.cybergarage.xml.*;
|
|
import org.cybergarage.soap.*;
|
|
|
|
import org.cybergarage.upnp.*;
|
|
|
|
public class ActionRequest extends ControlRequest
|
|
{
|
|
////////////////////////////////////////////////
|
|
// Constructor
|
|
////////////////////////////////////////////////
|
|
|
|
public ActionRequest()
|
|
{
|
|
}
|
|
|
|
public ActionRequest(HTTPRequest httpReq)
|
|
{
|
|
set(httpReq);
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
// Action
|
|
////////////////////////////////////////////////
|
|
|
|
public Node getActionNode()
|
|
{
|
|
Node bodyNode = getBodyNode();
|
|
if (bodyNode == null)
|
|
return null;
|
|
if (bodyNode.hasNodes() == false)
|
|
return null;
|
|
return bodyNode.getNode(0);
|
|
}
|
|
|
|
public String getActionName()
|
|
{
|
|
Node node = getActionNode();
|
|
if (node == null)
|
|
return "";
|
|
String name = node.getName();
|
|
if (name == null)
|
|
return "";
|
|
int idx = name.indexOf(SOAP.DELIM)+1;
|
|
if (idx < 0)
|
|
return "";
|
|
return name.substring(idx, name.length());
|
|
}
|
|
|
|
public ArgumentList getArgumentList()
|
|
{
|
|
Node actNode = getActionNode();
|
|
int nArgNodes = actNode.getNNodes();
|
|
ArgumentList argList = new ArgumentList();
|
|
for (int n=0; n<nArgNodes; n++) {
|
|
Argument arg = new Argument();
|
|
Node argNode = actNode.getNode(n);
|
|
arg.setName(argNode.getName());
|
|
arg.setValue(argNode.getValue());
|
|
argList.add(arg);
|
|
}
|
|
return argList;
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
// setRequest
|
|
////////////////////////////////////////////////
|
|
|
|
public void setRequest(Action action, ArgumentList argList)
|
|
{
|
|
Service service = action.getService();
|
|
|
|
setRequestHost(service);
|
|
|
|
setEnvelopeNode(SOAP.createEnvelopeBodyNode());
|
|
Node envNode = getEnvelopeNode();
|
|
Node bodyNode = getBodyNode();
|
|
Node argNode = createContentNode(service, action, argList);
|
|
bodyNode.addNode(argNode);
|
|
setContent(envNode);
|
|
|
|
String serviceType = service.getServiceType();
|
|
String actionName = action.getName();
|
|
String soapAction = "\"" +
|
|
serviceType +
|
|
"#" + actionName +
|
|
"\"";
|
|
setSOAPAction(soapAction);
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
// Contents
|
|
////////////////////////////////////////////////
|
|
|
|
private Node createContentNode(Service service, Action action, ArgumentList argList)
|
|
{
|
|
String actionName = action.getName();
|
|
String serviceType = service.getServiceType();
|
|
|
|
Node actionNode = new Node();
|
|
actionNode.setName(Control.NS, actionName);
|
|
actionNode.setNameSpace(Control.NS, serviceType);
|
|
|
|
int argListCnt = argList.size();
|
|
for (int n=0; n<argListCnt; n++) {
|
|
Argument arg = argList.getArgument(n);
|
|
Node argNode = new Node();
|
|
argNode.setName(arg.getName());
|
|
argNode.setValue(arg.getValue());
|
|
actionNode.addNode(argNode);
|
|
}
|
|
|
|
return actionNode;
|
|
}
|
|
|
|
////////////////////////////////////////////////
|
|
// post
|
|
////////////////////////////////////////////////
|
|
|
|
public ActionResponse post()
|
|
{
|
|
SOAPResponse soapRes = postMessage(getRequestHost(), getRequestPort());
|
|
return new ActionResponse(soapRes);
|
|
}
|
|
}
|
|
|