Initial upload of upnp classes. WARNING non working

This commit is contained in:
Ziver Koc 2010-08-13 22:40:27 +00:00
parent 30c7bd7dd9
commit bd7f3542f8
5 changed files with 716 additions and 0 deletions

View file

@ -0,0 +1,89 @@
package zutil.network.upnp;
import java.util.Map;
import java.util.UUID;
import zutil.network.http.HttpPrintStream;
/**
* This class is a UPnP AV Media Server that handles all the
* other UPnP services
*
* @author Ziver
*/
public class UPnPMediaServer extends UPnPRootDevice{
public static final String RELATIVE_URL = "upnp/rootdev";
private String url;
private String uuid;
public UPnPMediaServer(String location){
url = location;
}
public void respond(HttpPrintStream out, Map<String, String> clientInfo,
Map<String, Object> session, Map<String, String> cookie,
Map<String, String> request) {
out.enableBuffering(true);
out.setHeader("Content-Type", "text/xml");
out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
out.println("<root xmlns=\"urn:schemas-upnp-org:service:ContentDirectory:1\">");
out.println(" <specVersion>");
out.println(" <major>1</major>");
out.println(" <minor>0</minor>");
out.println(" </specVersion>");
out.println(" <URLBase>"+url+"</URLBase>");//"+ssdp.getLocation()+"
out.println(" <device>");
out.println(" <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>");
out.println(" <friendlyName>ZupNP AV Media Server</friendlyName>");
out.println(" <manufacturer>Ziver Koc</manufacturer>");
out.println(" <manufacturerURL>http://ziver.koc.se</manufacturerURL>");
out.println("");
out.println(" <modelName>ZupNP Server</modelName>");
out.println(" <modelDescription>UPnP AV Media Server</modelDescription>");
out.println(" <modelNumber>0.1</modelNumber>");
out.println(" <UDN>"+getUUID()+"</UDN>");
out.println(" <serviceList>");
out.println(" <service>");
out.println(" <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>");
out.println(" <serviceId>urn:upnp-org:serviceId:CMGR_1-0</serviceId>");
out.println(" <SCPDURL>CMGR_Control/GetServDesc</SCPDURL>");
out.println(" <controlURL>CMGR_Control</controlURL>");
out.println(" <eventSubURL>CMGR_Event</eventSubURL>");
out.println(" </service>");
out.println(" <service>");
out.println(" <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>");
out.println(" <serviceId>urn:upnp-org:serviceId:CDS_1-0</serviceId>");
out.println(" <SCPDURL>SCP/ContentDir</SCPDURL>");
out.println(" <controlURL>Action/ContentDir</controlURL>");
out.println(" <eventSubURL>Event/ContentDir</eventSubURL>");
out.println(" </service>");
out.println(" </serviceList>");
out.println(" </device>");
out.println("</root>");
out.flush();
}
public long getExpirationTime() {
return 60*30; // 30min
}
public String getLocation() {
return url+"RootDesc";
}
public String getSearchTarget() {
return "upnp:rootdevice";
}
public String getUSN() {
return getUUID()+"::upnp:rootdevice";
}
public String getUUID() {
if(uuid==null){
uuid = "uuid:"+UUID.nameUUIDFromBytes( this.getClass().toString().getBytes() ); //(url+Math.random()).getBytes()
}
return uuid;
}
}

View file

@ -0,0 +1,13 @@
package zutil.network.upnp;
import zutil.network.http.HttpPage;
import zutil.network.ssdp.SSDPServiceInfo;
/**
* This class is a UPnP Server class that will be extended
* by all root devices handles all the other UPnP services
*
* @author Ziver
*/
public abstract class UPnPRootDevice implements HttpPage, SSDPServiceInfo{
}

View file

@ -0,0 +1,10 @@
package zutil.network.upnp;
/**
* Information about a UPNP Service
*
* @author Ziver
*/
public interface UPnPService {
}

View file

@ -0,0 +1,14 @@
package zutil.network.upnp.services;
import zutil.network.ws.WSReturnValueList;
public class BrowseRetObj extends WSReturnValueList{
@WSValueName("Result")
public String Result;
@WSValueName("NumberReturned")
public int NumberReturned;
@WSValueName("TotalMatches")
public int TotalMatches;
@WSValueName("UpdateID")
public int UpdateID;
}

View file

@ -0,0 +1,590 @@
package zutil.network.upnp.services;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.dom4j.DocumentException;
import zutil.FileUtil;
import zutil.network.http.HttpPage;
import zutil.network.http.HttpPrintStream;
import zutil.network.upnp.UPnPService;
import zutil.network.ws.WSInterface;
import zutil.network.ws.WSReturnValueList;
/**
* Information about a UPNP Service
*
* @author Ziver
*/
public class UPnPContentDirectory implements UPnPService, HttpPage, WSInterface {
public static final int VERSION = 1;
private static List<File> file_list;
public UPnPContentDirectory(){}
public UPnPContentDirectory(File dir){
file_list = FileUtil.search(dir, new LinkedList<File>(), true, Integer.MAX_VALUE);
}
/**
* This action returns the searching capabilities
* that are supported by the device.
*
*/
@WSReturnName("SortCaps")
public String GetSearchCapabilities(){
// "dc:title,res@size"
return "";
}
/**
* Returns the CSV list of meta-data tags that can
* be used in sortCriteria
*
*/
@WSReturnName("SortCaps")
public String GetSortCapabilities(){
return "dc:title";
}
/**
* This action returns the current value of state variable
* SystemUpdateID. It can be used by clients that want to
* 'poll' for any changes in the Content Directory
* (as opposed to subscribing to events).
*
*/
@WSReturnName("Id")
public int GetSystemUpdateID(){
return 0;
}
/**
* This action allows the caller to incrementally browse
* the native hierarchy of the Content Directory objects
* exposed by the Content Directory Service, including
* information listing the classes of objects available
* in any particular object container.
* @throws DocumentException
*
*/
//@WSNameSpace("urn:schemas-upnp-org:service:ContentDirectory:1")
public BrowseRetObj Browse(
@WSParamName("ObjectID") String ObjectID,
@WSParamName("BrowseFlag") String BrowseFlag,
@WSParamName("Filter") String Filter,
@WSParamName("StartingIndex") int StartingIndex,
@WSParamName("RequestedCount") int RequestedCount,
@WSParamName("SortCriteria") String SortCriteria) throws DocumentException{
BrowseRetObj ret = new BrowseRetObj();
if( BrowseFlag.equals("BrowseMetadata") ){
}
else if( BrowseFlag.equals("BrowseDirectChildren") ){
StringBuffer xml = new StringBuffer();
xml.append( "<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " +
"xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\" " +
"xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\">" );
List<File> tmp = FileUtil.search( file_list.get(Integer.parseInt(ObjectID)), new LinkedList<File>(), false );
for(File file : tmp){
xml.append(" <container id=\""+file_list.indexOf(file)+"\" ");
if(tmp.get(0) != file) xml.append("parentID=\""+file_list.indexOf(file.getParent())+"\" ");
if(file.isDirectory()) xml.append("childCount=\""+file.list().length+"\" ");
xml.append("restricted=\"1\" searchable=\"0\" >");
xml.append(" <dc:title>"+file.getName()+"</dc:title> ");
if( file.isDirectory() )
xml.append(" <upnp:class>object.container.storageFolder</upnp:class> ");
else
xml.append(" <upnp:class>object.container</upnp:class> ");
xml.append(" <upnp:storageUsed>"+(int)(file.length()/1000)+"</upnp:storageUsed> ");
xml.append(" </container> ");
ret.NumberReturned++;
ret.TotalMatches++;
}
xml.append( "</DIDL-Lite>" );
ret.Result = xml.toString();
//Document document = DocumentHelper.parseText( xml.toString() );
//ret.Result = document.getRootElement();
}
return ret;
}
public class BrowseRetObj extends WSReturnValueList{
@WSValueName("Result")
public String Result;
@WSValueName("NumberReturned")
public int NumberReturned;
@WSValueName("TotalMatches")
public int TotalMatches;
@WSValueName("UpdateID")
public int UpdateID;
}
@WSDisabled
public void respond(HttpPrintStream out, Map<String, String> clientInfo,
Map<String, Object> session, Map<String, String> cookie,
Map<String, String> request) {
out.enableBuffering(true);
out.setHeader("Content-Type", "text/xml");
out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
out.println("<scpd xmlns=\"urn:schemas-upnp-org:service-1-0\">");
out.println(" <serviceStateTable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>TransferIDs</name>");
out.println(" <sendEventsAttribute>yes</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_ObjectID</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_Result</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_SearchCriteria</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_BrowseFlag</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" <allowedValueList>");
out.println(" <allowedValue>BrowseMetadata</allowedValue>");
out.println(" <allowedValue>BrowseDirectChildren</allowedValue>");
out.println(" </allowedValueList>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_Filter</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_SortCriteria</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_Index</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>ui4</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_Count</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>ui4</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>A_ARG_TYPE_UpdateID</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>ui4</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_TransferID</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>ui4</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_TransferStatus</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" <allowedValueList>");
out.println(" <allowedValue>COMPLETED</allowedValue>");
out.println(" <allowedValue>ERROR</allowedValue>");
out.println(" <allowedValue>IN_PROGRESS</allowedValue>");
out.println(" <allowedValue>STOPPED</allowedValue>");
out.println(" </allowedValueList>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_TransferLength</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_TransferTotal</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_TagValueList</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>A_ARG_TYPE_URI</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>uri</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>SearchCapabilities</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>SortCapabilities</name>");
out.println(" <sendEventsAttribute>no</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <name>SystemUpdateID</name>");
out.println(" <sendEventsAttribute>yes</sendEventsAttribute>");
out.println(" <dataType>ui4</dataType>");
out.println(" </stateVariable>");
out.println(" <stateVariable>");
out.println(" <Optional/>");
out.println(" <name>ContainerUpdateIDs</name>");
out.println(" <sendEventsAttribute>yes</sendEventsAttribute>");
out.println(" <dataType>string</dataType>");
out.println(" </stateVariable>");
out.println(" </serviceStateTable>");
out.println(" <actionList>");
out.println(" <action>");
out.println(" <name>GetSearchCapabilities</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>SearchCaps</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>SearchCapabilities</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");
out.println(" <action>");
out.println(" <name>GetSortCapabilities</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>SortCaps</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>SortCapabilities</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");
out.println(" <action>");
out.println(" <name>GetSystemUpdateID</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>Id</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>SystemUpdateID</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");
out.println(" <action>");
out.println(" <name>Browse</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ObjectID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>BrowseFlag</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_BrowseFlag</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Filter</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Filter</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>StartingIndex</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Index</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>RequestedCount</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>SortCriteria</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_SortCriteria</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Result</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>NumberReturned</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TotalMatches</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>UpdateID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_UpdateID</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>Search</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ContainerID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>SearchCriteria</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_SearchCriteria </relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Filter</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Filter</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>StartingIndex</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Index</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>RequestedCount</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>SortCriteria</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_SortCriteria</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Result</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>NumberReturned</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TotalMatches</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Count</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>UpdateID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_UpdateID</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>CreateObject</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ContainerID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Elements</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>ObjectID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>Result</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_Result</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>DestroyObject</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ObjectID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>UpdateObject</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ObjectID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>CurrentTagValue</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TagValueList </relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>NewTagValue</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TagValueList </relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>ImportResource</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>SourceURI</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>DestinationURI</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TransferID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferID </relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>ExportResource</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>SourceURI</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>DestinationURI</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TransferID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferID </relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>StopTransferResource</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>TransferID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferID </relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>GetTransferProgress</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>TransferID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferID </relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TransferStatus</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferStatus </relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TransferLength</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferLength </relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>TransferTotal</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_TransferTotal</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>DeleteResource</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ResourceURI</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
/*out.println(" <action>");
out.println(" <Optional/>");
out.println(" <name>CreateReference</name>");
out.println(" <argumentList>");
out.println(" <argument>");
out.println(" <name>ContainerID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>ObjectID</name>");
out.println(" <direction>in</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" <argument>");
out.println(" <name>NewID</name>");
out.println(" <direction>out</direction>");
out.println(" <relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>");
out.println(" </argument>");
out.println(" </argumentList>");
out.println(" </action>");*/
out.println(" </actionList>");
out.println("</scpd>");
}
}