[dss-commits] r8790 - in dss/trunk: core data/webroot webservices

dss-commits at forum.digitalstrom.org dss-commits at forum.digitalstrom.org
Tue Sep 22 17:15:00 CEST 2009


Author: pstaehlin
Date: 2009-09-22 17:14:59 +0200 (Tue, 22 Sep 2009)
New Revision: 8790

Modified:
   dss/trunk/core/eventinterpreterplugins.cpp
   dss/trunk/core/eventinterpreterplugins.h
   dss/trunk/core/session.cpp
   dss/trunk/data/webroot/dss.wsdl
   dss/trunk/webservices/dss.wsdl
   dss/trunk/webservices/dss.xsd
   dss/trunk/webservices/model_soap.cpp
   dss/trunk/webservices/model_soap.h
   dss/trunk/webservices/soapC.cpp
   dss/trunk/webservices/soapH.h
   dss/trunk/webservices/soapServer.cpp
   dss/trunk/webservices/soapStub.h
   dss/trunk/webservices/soapdssObject.h
   dss/trunk/webservices/webservices.cpp
   dss/trunk/webservices/webservices.h
Log:
SOAP clients can now listen to events.

Closes #90


Modified: dss/trunk/core/eventinterpreterplugins.cpp
===================================================================
--- dss/trunk/core/eventinterpreterplugins.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/core/eventinterpreterplugins.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -287,4 +287,52 @@
     }
   } // handleEvent
 
+
+  //================================================== EventRelayTarget
+
+  EventRelayTarget::~EventRelayTarget() {
+    while(!m_SubscriptionIDs.empty()) {
+      unsubscribeFrom(m_SubscriptionIDs.front());
+    }
+  } // dtor
+
+  void EventRelayTarget::subscribeTo(boost::shared_ptr<EventSubscription> _pSubscription) {
+    m_Relay.registerSubscription(this, _pSubscription->getID());
+    m_SubscriptionIDs.push_back(_pSubscription->getID());
+  } // subscribeTo
+
+  void EventRelayTarget::unsubscribeFrom(const std::string& _subscriptionID) {
+    m_Relay.removeSubscription(_subscriptionID);
+    std::vector<std::string>::iterator it =
+      std::find(m_SubscriptionIDs.begin(), m_SubscriptionIDs.end(), _subscriptionID);
+    if(it != m_SubscriptionIDs.end()) {
+      m_SubscriptionIDs.erase(it);
+    }
+  } // unsubscribeFrom
+
+
+  //================================================== EventInterpreterInternalRelay
+
+  EventInterpreterInternalRelay::EventInterpreterInternalRelay(EventInterpreter* _pInterpreter)
+  : EventInterpreterPlugin(getPluginName(), _pInterpreter)
+  { } // ctor
+
+  EventInterpreterInternalRelay::~EventInterpreterInternalRelay() {
+  } // dtor
+
+  void EventInterpreterInternalRelay::handleEvent(Event& _event, const EventSubscription& _subscription) {
+    EventRelayTarget* target = m_IDTargetMap[_subscription.getID()];
+    if(target != NULL) {
+      target->handleEvent(_event, _subscription);
+    }
+  } // handleEvent
+
+  void EventInterpreterInternalRelay::registerSubscription(EventRelayTarget* _pTarget, const std::string& _subscriptionID) {
+    m_IDTargetMap[_subscriptionID] = _pTarget;
+  } // registerSubscription
+
+  void EventInterpreterInternalRelay::removeSubscription(const std::string& _subscriptionID) {
+    m_IDTargetMap[_subscriptionID] = NULL;
+  } // removeSubscription
+
 } // namespace dss

Modified: dss/trunk/core/eventinterpreterplugins.h
===================================================================
--- dss/trunk/core/eventinterpreterplugins.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/core/eventinterpreterplugins.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -62,6 +62,42 @@
     virtual void handleEvent(Event& _event, const EventSubscription& _subscription);
   }; // EventInterpreterPluginDS485
 
+
+  //-------------------------------------------------- Event Relay
+
+  class EventInterpreterInternalRelay;
+
+  class EventRelayTarget {
+  public:
+    EventRelayTarget(EventInterpreterInternalRelay& _relay)
+    : m_Relay(_relay)
+    { } // ctor
+    virtual ~EventRelayTarget();
+
+    virtual void handleEvent(Event& _event, const EventSubscription& _subscription) = 0;
+    virtual void subscribeTo(boost::shared_ptr<EventSubscription> _pSubscription);
+    virtual void unsubscribeFrom(const std::string& _subscriptionID);
+  private:
+    EventInterpreterInternalRelay& m_Relay;
+    std::vector<std::string> m_SubscriptionIDs;
+  }; // EventRelayTarget
+
+  class EventInterpreterInternalRelay : public EventInterpreterPlugin {
+  public:
+    EventInterpreterInternalRelay(EventInterpreter* _pInterpreter);
+    virtual ~EventInterpreterInternalRelay();
+
+    virtual void handleEvent(Event& _event, const EventSubscription& _subscription);
+
+    static const char* getPluginName() { return "internal_relay"; }
+  protected:
+    friend class EventRelayTarget;
+    void registerSubscription(EventRelayTarget* _pTarget, const std::string& _subscriptionID);
+    void removeSubscription(const std::string& _subscriptionID);
+  private:
+    HASH_NAMESPACE::hash_map<const std::string, EventRelayTarget*> m_IDTargetMap;
+  }; // EventInterpreterInternalRelay
+
 } // namespace dss
 
 #endif /* EVENTINTERPRETERPLUGINS_H_ */

Modified: dss/trunk/core/session.cpp
===================================================================
--- dss/trunk/core/session.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/core/session.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -64,12 +64,14 @@
     m_LastSetNr = _other.m_LastSetNr;
     m_Token = _other.m_Token;
     m_LastTouched = _other.m_LastTouched;
-
+    m_SetsByID = _other.m_SetsByID;
+/*
     for(SetsByID::const_iterator iEntry = m_SetsByID.begin(), e = m_SetsByID.end();
         iEntry != e; ++iEntry)
     {
       m_SetsByID[iEntry->first] = iEntry->second;
     }
+    */
     return *this;
   }
 

Modified: dss/trunk/data/webroot/dss.wsdl
===================================================================
--- dss/trunk/data/webroot/dss.wsdl	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/data/webroot/dss.wsdl	2009-09-22 15:14:59 UTC (rev 8790)
@@ -25,23 +25,13 @@
   elementFormDefault="unqualified"
   attributeFormDefault="unqualified">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
+  <complexType name="Event">
+   <sequence>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+     <element name="parameter" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+   </sequence>
+  </complexType>
   <!-- operation request element -->
-  <element name="Test">
-   <complexType>
-    <sequence>
-     <element name="bla" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation response element -->
-  <element name="TestResponse">
-   <complexType>
-    <sequence>
-     <element name="ints" type="xsd:int" minOccurs="1" maxOccurs="unbounded"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation request element -->
   <element name="Authenticate">
    <complexType>
     <sequence>
@@ -1474,6 +1464,40 @@
    </complexType>
   </element>
   <!-- operation request element -->
+  <element name="EventWaitFor">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="timeout" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventWaitForResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="dss:Event" minOccurs="1" maxOccurs="unbounded"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
+  <element name="EventSubscribeTo">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventSubscribeToResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
   <element name="PropertyGetType">
    <complexType>
     <sequence>
@@ -1619,14 +1643,6 @@
 
 </types>
 
-<message name="TestRequest">
- <part name="parameters" element="dss:Test"/>
-</message>
-
-<message name="TestResponse">
- <part name="parameters" element="dss:TestResponse"/>
-</message>
-
 <message name="AuthenticateRequest">
  <part name="parameters" element="dss:Authenticate"/>
 </message>
@@ -2275,6 +2291,22 @@
  <part name="parameters" element="dss:EventRaiseResponse"/>
 </message>
 
+<message name="EventWaitForRequest">
+ <part name="parameters" element="dss:EventWaitFor"/>
+</message>
+
+<message name="EventWaitForResponse">
+ <part name="parameters" element="dss:EventWaitForResponse"/>
+</message>
+
+<message name="EventSubscribeToRequest">
+ <part name="parameters" element="dss:EventSubscribeTo"/>
+</message>
+
+<message name="EventSubscribeToResponse">
+ <part name="parameters" element="dss:EventSubscribeToResponse"/>
+</message>
+
 <message name="PropertyGetTypeRequest">
  <part name="parameters" element="dss:PropertyGetType"/>
 </message>
@@ -2340,11 +2372,6 @@
 </message>
 
 <portType name="MyType">
- <operation name="Test">
-  <documentation>Service definition of function dss__Test</documentation>
-  <input message="tns:TestRequest"/>
-  <output message="tns:TestResponse"/>
- </operation>
  <operation name="Authenticate">
   <documentation>Service definition of function dss__Authenticate</documentation>
   <input message="tns:AuthenticateRequest"/>
@@ -2750,6 +2777,16 @@
   <input message="tns:EventRaiseRequest"/>
   <output message="tns:EventRaiseResponse"/>
  </operation>
+ <operation name="EventWaitFor">
+  <documentation>Service definition of function dss__EventWaitFor</documentation>
+  <input message="tns:EventWaitForRequest"/>
+  <output message="tns:EventWaitForResponse"/>
+ </operation>
+ <operation name="EventSubscribeTo">
+  <documentation>Service definition of function dss__EventSubscribeTo</documentation>
+  <input message="tns:EventSubscribeToRequest"/>
+  <output message="tns:EventSubscribeToResponse"/>
+ </operation>
  <operation name="PropertyGetType">
   <documentation>Service definition of function dss__PropertyGetType</documentation>
   <input message="tns:PropertyGetTypeRequest"/>
@@ -2794,15 +2831,6 @@
 
 <binding name="dss" type="tns:MyType">
  <SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="Test">
-  <SOAP:operation soapAction=""/>
-  <input>
-     <SOAP:body parts="parameters" use="literal"/>
-  </input>
-  <output>
-     <SOAP:body parts="parameters" use="literal"/>
-  </output>
- </operation>
  <operation name="Authenticate">
   <SOAP:operation soapAction=""/>
   <input>
@@ -3532,6 +3560,24 @@
      <SOAP:body parts="parameters" use="literal"/>
   </output>
  </operation>
+ <operation name="EventWaitFor">
+  <SOAP:operation soapAction=""/>
+  <input>
+     <SOAP:body parts="parameters" use="literal"/>
+  </input>
+  <output>
+     <SOAP:body parts="parameters" use="literal"/>
+  </output>
+ </operation>
+ <operation name="EventSubscribeTo">
+  <SOAP:operation soapAction=""/>
+  <input>
+     <SOAP:body parts="parameters" use="literal"/>
+  </input>
+  <output>
+     <SOAP:body parts="parameters" use="literal"/>
+  </output>
+ </operation>
  <operation name="PropertyGetType">
   <SOAP:operation soapAction=""/>
   <input>

Modified: dss/trunk/webservices/dss.wsdl
===================================================================
--- dss/trunk/webservices/dss.wsdl	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/dss.wsdl	2009-09-22 15:14:59 UTC (rev 8790)
@@ -25,6 +25,12 @@
   elementFormDefault="unqualified"
   attributeFormDefault="unqualified">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
+  <complexType name="Event">
+   <sequence>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+     <element name="parameter" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+   </sequence>
+  </complexType>
   <!-- operation request element -->
   <element name="Authenticate">
    <complexType>
@@ -1458,6 +1464,40 @@
    </complexType>
   </element>
   <!-- operation request element -->
+  <element name="EventWaitFor">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="timeout" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventWaitForResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="dss:Event" minOccurs="1" maxOccurs="unbounded"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
+  <element name="EventSubscribeTo">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventSubscribeToResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
   <element name="PropertyGetType">
    <complexType>
     <sequence>
@@ -2251,6 +2291,22 @@
  <part name="parameters" element="dss:EventRaiseResponse"/>
 </message>
 
+<message name="EventWaitForRequest">
+ <part name="parameters" element="dss:EventWaitFor"/>
+</message>
+
+<message name="EventWaitForResponse">
+ <part name="parameters" element="dss:EventWaitForResponse"/>
+</message>
+
+<message name="EventSubscribeToRequest">
+ <part name="parameters" element="dss:EventSubscribeTo"/>
+</message>
+
+<message name="EventSubscribeToResponse">
+ <part name="parameters" element="dss:EventSubscribeToResponse"/>
+</message>
+
 <message name="PropertyGetTypeRequest">
  <part name="parameters" element="dss:PropertyGetType"/>
 </message>
@@ -2721,6 +2777,16 @@
   <input message="tns:EventRaiseRequest"/>
   <output message="tns:EventRaiseResponse"/>
  </operation>
+ <operation name="EventWaitFor">
+  <documentation>Service definition of function dss__EventWaitFor</documentation>
+  <input message="tns:EventWaitForRequest"/>
+  <output message="tns:EventWaitForResponse"/>
+ </operation>
+ <operation name="EventSubscribeTo">
+  <documentation>Service definition of function dss__EventSubscribeTo</documentation>
+  <input message="tns:EventSubscribeToRequest"/>
+  <output message="tns:EventSubscribeToResponse"/>
+ </operation>
  <operation name="PropertyGetType">
   <documentation>Service definition of function dss__PropertyGetType</documentation>
   <input message="tns:PropertyGetTypeRequest"/>
@@ -3494,6 +3560,24 @@
      <SOAP:body parts="parameters" use="literal"/>
   </output>
  </operation>
+ <operation name="EventWaitFor">
+  <SOAP:operation soapAction=""/>
+  <input>
+     <SOAP:body parts="parameters" use="literal"/>
+  </input>
+  <output>
+     <SOAP:body parts="parameters" use="literal"/>
+  </output>
+ </operation>
+ <operation name="EventSubscribeTo">
+  <SOAP:operation soapAction=""/>
+  <input>
+     <SOAP:body parts="parameters" use="literal"/>
+  </input>
+  <output>
+     <SOAP:body parts="parameters" use="literal"/>
+  </output>
+ </operation>
  <operation name="PropertyGetType">
   <SOAP:operation soapAction=""/>
   <input>

Modified: dss/trunk/webservices/dss.xsd
===================================================================
--- dss/trunk/webservices/dss.xsd	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/dss.xsd	2009-09-22 15:14:59 UTC (rev 8790)
@@ -9,6 +9,12 @@
   elementFormDefault="unqualified"
   attributeFormDefault="unqualified">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
+  <complexType name="Event">
+   <sequence>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+     <element name="parameter" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+   </sequence>
+  </complexType>
   <!-- operation request element -->
   <element name="Authenticate">
    <complexType>
@@ -1182,43 +1188,6 @@
    </complexType>
   </element>
   <!-- operation request element -->
-  <element name="DeviceSetLocation">
-   <complexType>
-    <sequence>
-     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-     <element name="deviceID" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-     <element name="location" type="dss:DeviceLocation" minOccurs="1" maxOccurs="1"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation response element -->
-  <element name="DeviceSetLocationResponse">
-   <complexType>
-    <sequence>
-     <element name="result" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation request element -->
-  <element name="DeviceGetLocation">
-   <complexType>
-    <sequence>
-     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
-     <element name="deviceID" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation response element -->
-  <element name="DeviceLocation">
-   <complexType>
-    <sequence>
-     <element name="x" type="xsd:double" minOccurs="1" maxOccurs="1"/>
-     <element name="y" type="xsd:double" minOccurs="1" maxOccurs="1"/>
-     <element name="z" type="xsd:double" minOccurs="1" maxOccurs="1"/>
-    </sequence>
-   </complexType>
-  </element>
-  <!-- operation request element -->
   <element name="ModulatorGetPowerConsumption">
    <complexType>
     <sequence>
@@ -1479,6 +1448,40 @@
    </complexType>
   </element>
   <!-- operation request element -->
+  <element name="EventWaitFor">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="timeout" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventWaitForResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="dss:Event" minOccurs="1" maxOccurs="unbounded"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
+  <element name="EventSubscribeTo">
+   <complexType>
+    <sequence>
+     <element name="token" type="xsd:int" minOccurs="1" maxOccurs="1"/>
+     <element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation response element -->
+  <element name="EventSubscribeToResponse">
+   <complexType>
+    <sequence>
+     <element name="result" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+    </sequence>
+   </complexType>
+  </element>
+  <!-- operation request element -->
   <element name="PropertyGetType">
    <complexType>
     <sequence>

Modified: dss/trunk/webservices/model_soap.cpp
===================================================================
--- dss/trunk/webservices/model_soap.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/model_soap.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -32,6 +32,14 @@
   return result;
 } // isAuthorized
 
+int AuthorizeAndGetSession(struct soap *soap, const int _token, dss::WebServiceSession& result) {
+  if(!IsAuthorized(soap, _token)) {
+    return NotAuthorized(soap);
+  }
+  result = dss::DSS::getInstance()->getWebServices().getSession(soap, _token);
+  return SOAP_OK;
+} // AuthorizeAndGetSession
+
 int AuthorizeAndGetSet(struct soap *soap, const int _token, const int _setID, dss::Set& result) {
   if(!IsAuthorized(soap, _token)) {
     return NotAuthorized(soap);
@@ -1122,6 +1130,7 @@
   return soap_sender_fault(soap, "Not yet implemented", NULL);
 }
 
+
 //==================================================== Events
 
 int dss__EventRaise(struct soap *soap, int _token, char* _eventName, char* _context, char* _parameter, char* _location, bool& result) {
@@ -1161,6 +1170,45 @@
   return SOAP_OK;
 } // dss__EventRaise
 
+int dss__EventWaitFor(struct soap *soap, int _token, int _timeout, std::vector<dss__Event>& result) {
+  dss::WebServiceSession session;
+  int getResult = AuthorizeAndGetSession(soap, _token, session);
+  if(getResult != SOAP_OK) {
+    return getResult;
+  }
+
+  session.waitForEvent(_timeout);
+
+  while(session.hasEvent()) {
+    dss::Event origEvent = session.popEvent();
+    dss__Event evt;
+    evt.name = origEvent.getName();
+    const dss::HashMapConstStringString& props =  origEvent.getProperties().getContainer();
+    for(dss::HashMapConstStringString::const_iterator iParam = props.begin(), e = props.end();
+        iParam != e; ++iParam)
+    {
+      std::string paramString = iParam->first + "=" + iParam->second;
+      evt.parameter.push_back(paramString);
+    }
+    result.push_back(evt);
+  }
+
+  return SOAP_OK;
+} // dss__EventWaitFor
+
+int dss__EventSubscribeTo(struct soap *soap, int _token, std::string _name, std::string& result) {
+  dss::WebServiceSession session;
+  int getResult = AuthorizeAndGetSession(soap, _token, session);
+  if(getResult != SOAP_OK) {
+    return getResult;
+  }
+
+  result = session.subscribeTo(_name);
+
+  return SOAP_OK;
+} // dss__EventSubscribeTo
+
+
 //==================================================== Properties
 
 int dss__PropertyGetType(struct soap *soap, int _token, std::string _propertyName, std::string& result) {

Modified: dss/trunk/webservices/model_soap.h
===================================================================
--- dss/trunk/webservices/model_soap.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/model_soap.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -244,7 +244,15 @@
 
 //==================================================== Events
 
+class dss__Event {
+public:
+  std::string name;
+  std::vector<std::string> parameter;
+};
+
 int dss__EventRaise(int _token, char* _eventName, char* _context, char* _parameter, char* _location, bool& result);
+int dss__EventWaitFor(int _token, int _timeout, std::vector<dss__Event>& result);
+int dss__EventSubscribeTo(int _token, std::string _name, std::string& result);
 
 
 // =================================================== Properties

Modified: dss/trunk/webservices/soapC.cpp
===================================================================
--- dss/trunk/webservices/soapC.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/soapC.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -7,7 +7,7 @@
 
 #include "soapH.h"
 
-SOAP_SOURCE_STAMP("@(#) soapC.cpp ver 2.7.10 2009-06-08 14:45:47 GMT")
+SOAP_SOURCE_STAMP("@(#) soapC.cpp ver 2.7.10 2009-09-22 13:48:12 GMT")
 
 
 #ifndef WITH_NOGLOBAL
@@ -177,6 +177,8 @@
 		return soap_in_unsignedLONG64(soap, NULL, NULL, "xsd:unsignedLong");
 	case SOAP_TYPE_bool:
 		return soap_in_bool(soap, NULL, NULL, "xsd:boolean");
+	case SOAP_TYPE_dss__Event:
+		return soap_in_dss__Event(soap, NULL, NULL, "dss:Event");
 	case SOAP_TYPE_std__string:
 		return soap_in_std__string(soap, NULL, NULL, "xsd:string");
 	case SOAP_TYPE_dss__PropertyGetChildren:
@@ -211,6 +213,14 @@
 		return soap_in_dss__PropertyGetType(soap, NULL, NULL, "dss:PropertyGetType");
 	case SOAP_TYPE_dss__PropertyGetTypeResponse:
 		return soap_in_dss__PropertyGetTypeResponse(soap, NULL, NULL, "dss:PropertyGetTypeResponse");
+	case SOAP_TYPE_dss__EventSubscribeTo:
+		return soap_in_dss__EventSubscribeTo(soap, NULL, NULL, "dss:EventSubscribeTo");
+	case SOAP_TYPE_dss__EventSubscribeToResponse:
+		return soap_in_dss__EventSubscribeToResponse(soap, NULL, NULL, "dss:EventSubscribeToResponse");
+	case SOAP_TYPE_dss__EventWaitFor:
+		return soap_in_dss__EventWaitFor(soap, NULL, NULL, "dss:EventWaitFor");
+	case SOAP_TYPE_dss__EventWaitForResponse:
+		return soap_in_dss__EventWaitForResponse(soap, NULL, NULL, "dss:EventWaitForResponse");
 	case SOAP_TYPE_dss__EventRaise:
 		return soap_in_dss__EventRaise(soap, NULL, NULL, "dss:EventRaise");
 	case SOAP_TYPE_dss__EventRaiseResponse:
@@ -271,14 +281,6 @@
 		return soap_in_dss__ModulatorGetPowerConsumption(soap, NULL, NULL, "dss:ModulatorGetPowerConsumption");
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
 		return soap_in_dss__ModulatorGetPowerConsumptionResponse(soap, NULL, NULL, "dss:ModulatorGetPowerConsumptionResponse");
-	case SOAP_TYPE_dss__DeviceGetLocation:
-		return soap_in_dss__DeviceGetLocation(soap, NULL, NULL, "dss:DeviceGetLocation");
-	case SOAP_TYPE_dss__DeviceSetLocation:
-		return soap_in_dss__DeviceSetLocation(soap, NULL, NULL, "dss:DeviceSetLocation");
-	case SOAP_TYPE_dss__DeviceSetLocationResponse:
-		return soap_in_dss__DeviceSetLocationResponse(soap, NULL, NULL, "dss:DeviceSetLocationResponse");
-	case SOAP_TYPE_DeviceLocation:
-		return soap_in_DeviceLocation(soap, NULL, NULL, "DeviceLocation");
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return soap_in_dss__DeviceGetZoneID(soap, NULL, NULL, "dss:DeviceGetZoneID");
 	case SOAP_TYPE_dss__DeviceGetZoneIDResponse:
@@ -554,6 +556,10 @@
 	{	const char *t = soap->type;
 		if (!*t)
 			t = soap->tag;
+		if (!soap_match_tag(soap, t, "dss:Event"))
+		{	*type = SOAP_TYPE_dss__Event;
+			return soap_in_dss__Event(soap, NULL, NULL, NULL);
+		}
 		if (!soap_match_tag(soap, t, "xsd:string"))
 		{	*type = SOAP_TYPE_std__string;
 			return soap_in_std__string(soap, NULL, NULL, NULL);
@@ -666,6 +672,22 @@
 		{	*type = SOAP_TYPE_dss__PropertyGetTypeResponse;
 			return soap_in_dss__PropertyGetTypeResponse(soap, NULL, NULL, NULL);
 		}
+		if (!soap_match_tag(soap, t, "dss:EventSubscribeTo"))
+		{	*type = SOAP_TYPE_dss__EventSubscribeTo;
+			return soap_in_dss__EventSubscribeTo(soap, NULL, NULL, NULL);
+		}
+		if (!soap_match_tag(soap, t, "dss:EventSubscribeToResponse"))
+		{	*type = SOAP_TYPE_dss__EventSubscribeToResponse;
+			return soap_in_dss__EventSubscribeToResponse(soap, NULL, NULL, NULL);
+		}
+		if (!soap_match_tag(soap, t, "dss:EventWaitFor"))
+		{	*type = SOAP_TYPE_dss__EventWaitFor;
+			return soap_in_dss__EventWaitFor(soap, NULL, NULL, NULL);
+		}
+		if (!soap_match_tag(soap, t, "dss:EventWaitForResponse"))
+		{	*type = SOAP_TYPE_dss__EventWaitForResponse;
+			return soap_in_dss__EventWaitForResponse(soap, NULL, NULL, NULL);
+		}
 		if (!soap_match_tag(soap, t, "dss:EventRaise"))
 		{	*type = SOAP_TYPE_dss__EventRaise;
 			return soap_in_dss__EventRaise(soap, NULL, NULL, NULL);
@@ -786,22 +808,6 @@
 		{	*type = SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse;
 			return soap_in_dss__ModulatorGetPowerConsumptionResponse(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:DeviceGetLocation"))
-		{	*type = SOAP_TYPE_dss__DeviceGetLocation;
-			return soap_in_dss__DeviceGetLocation(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "dss:DeviceSetLocation"))
-		{	*type = SOAP_TYPE_dss__DeviceSetLocation;
-			return soap_in_dss__DeviceSetLocation(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "dss:DeviceSetLocationResponse"))
-		{	*type = SOAP_TYPE_dss__DeviceSetLocationResponse;
-			return soap_in_dss__DeviceSetLocationResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "DeviceLocation"))
-		{	*type = SOAP_TYPE_DeviceLocation;
-			return soap_in_DeviceLocation(soap, NULL, NULL, NULL);
-		}
 		if (!soap_match_tag(soap, t, "dss:DeviceGetZoneID"))
 		{	*type = SOAP_TYPE_dss__DeviceGetZoneID;
 			return soap_in_dss__DeviceGetZoneID(soap, NULL, NULL, NULL);
@@ -1430,6 +1436,8 @@
 		return soap_out_unsignedLONG64(soap, tag, id, (const ULONG64 *)ptr, "xsd:unsignedLong");
 	case SOAP_TYPE_bool:
 		return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean");
+	case SOAP_TYPE_dss__Event:
+		return ((dss__Event *)ptr)->soap_out(soap, tag, id, "dss:Event");
 	case SOAP_TYPE_std__string:
 		return soap_out_std__string(soap, tag, id, (const std::string *)ptr, "xsd:string");
 	case SOAP_TYPE_dss__PropertyGetChildren:
@@ -1464,6 +1472,14 @@
 		return soap_out_dss__PropertyGetType(soap, tag, id, (const struct dss__PropertyGetType *)ptr, "dss:PropertyGetType");
 	case SOAP_TYPE_dss__PropertyGetTypeResponse:
 		return soap_out_dss__PropertyGetTypeResponse(soap, tag, id, (const struct dss__PropertyGetTypeResponse *)ptr, "dss:PropertyGetTypeResponse");
+	case SOAP_TYPE_dss__EventSubscribeTo:
+		return soap_out_dss__EventSubscribeTo(soap, tag, id, (const struct dss__EventSubscribeTo *)ptr, "dss:EventSubscribeTo");
+	case SOAP_TYPE_dss__EventSubscribeToResponse:
+		return soap_out_dss__EventSubscribeToResponse(soap, tag, id, (const struct dss__EventSubscribeToResponse *)ptr, "dss:EventSubscribeToResponse");
+	case SOAP_TYPE_dss__EventWaitFor:
+		return soap_out_dss__EventWaitFor(soap, tag, id, (const struct dss__EventWaitFor *)ptr, "dss:EventWaitFor");
+	case SOAP_TYPE_dss__EventWaitForResponse:
+		return soap_out_dss__EventWaitForResponse(soap, tag, id, (const struct dss__EventWaitForResponse *)ptr, "dss:EventWaitForResponse");
 	case SOAP_TYPE_dss__EventRaise:
 		return soap_out_dss__EventRaise(soap, tag, id, (const struct dss__EventRaise *)ptr, "dss:EventRaise");
 	case SOAP_TYPE_dss__EventRaiseResponse:
@@ -1524,14 +1540,6 @@
 		return soap_out_dss__ModulatorGetPowerConsumption(soap, tag, id, (const struct dss__ModulatorGetPowerConsumption *)ptr, "dss:ModulatorGetPowerConsumption");
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
 		return soap_out_dss__ModulatorGetPowerConsumptionResponse(soap, tag, id, (const struct dss__ModulatorGetPowerConsumptionResponse *)ptr, "dss:ModulatorGetPowerConsumptionResponse");
-	case SOAP_TYPE_dss__DeviceGetLocation:
-		return soap_out_dss__DeviceGetLocation(soap, tag, id, (const struct dss__DeviceGetLocation *)ptr, "dss:DeviceGetLocation");
-	case SOAP_TYPE_dss__DeviceSetLocation:
-		return soap_out_dss__DeviceSetLocation(soap, tag, id, (const struct dss__DeviceSetLocation *)ptr, "dss:DeviceSetLocation");
-	case SOAP_TYPE_dss__DeviceSetLocationResponse:
-		return soap_out_dss__DeviceSetLocationResponse(soap, tag, id, (const struct dss__DeviceSetLocationResponse *)ptr, "dss:DeviceSetLocationResponse");
-	case SOAP_TYPE_DeviceLocation:
-		return soap_out_DeviceLocation(soap, tag, id, (const struct DeviceLocation *)ptr, "DeviceLocation");
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return soap_out_dss__DeviceGetZoneID(soap, tag, id, (const struct dss__DeviceGetZoneID *)ptr, "dss:DeviceGetZoneID");
 	case SOAP_TYPE_dss__DeviceGetZoneIDResponse:
@@ -1821,6 +1829,9 @@
 	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
 	switch (type)
 	{
+	case SOAP_TYPE_dss__Event:
+		((dss__Event *)ptr)->soap_serialize(soap);
+		break;
 	case SOAP_TYPE_std__string:
 		soap_serialize_std__string(soap, (const std::string *)ptr);
 		break;
@@ -1872,6 +1883,18 @@
 	case SOAP_TYPE_dss__PropertyGetTypeResponse:
 		soap_serialize_dss__PropertyGetTypeResponse(soap, (const struct dss__PropertyGetTypeResponse *)ptr);
 		break;
+	case SOAP_TYPE_dss__EventSubscribeTo:
+		soap_serialize_dss__EventSubscribeTo(soap, (const struct dss__EventSubscribeTo *)ptr);
+		break;
+	case SOAP_TYPE_dss__EventSubscribeToResponse:
+		soap_serialize_dss__EventSubscribeToResponse(soap, (const struct dss__EventSubscribeToResponse *)ptr);
+		break;
+	case SOAP_TYPE_dss__EventWaitFor:
+		soap_serialize_dss__EventWaitFor(soap, (const struct dss__EventWaitFor *)ptr);
+		break;
+	case SOAP_TYPE_dss__EventWaitForResponse:
+		soap_serialize_dss__EventWaitForResponse(soap, (const struct dss__EventWaitForResponse *)ptr);
+		break;
 	case SOAP_TYPE_dss__EventRaise:
 		soap_serialize_dss__EventRaise(soap, (const struct dss__EventRaise *)ptr);
 		break;
@@ -1962,18 +1985,6 @@
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
 		soap_serialize_dss__ModulatorGetPowerConsumptionResponse(soap, (const struct dss__ModulatorGetPowerConsumptionResponse *)ptr);
 		break;
-	case SOAP_TYPE_dss__DeviceGetLocation:
-		soap_serialize_dss__DeviceGetLocation(soap, (const struct dss__DeviceGetLocation *)ptr);
-		break;
-	case SOAP_TYPE_dss__DeviceSetLocation:
-		soap_serialize_dss__DeviceSetLocation(soap, (const struct dss__DeviceSetLocation *)ptr);
-		break;
-	case SOAP_TYPE_dss__DeviceSetLocationResponse:
-		soap_serialize_dss__DeviceSetLocationResponse(soap, (const struct dss__DeviceSetLocationResponse *)ptr);
-		break;
-	case SOAP_TYPE_DeviceLocation:
-		soap_serialize_DeviceLocation(soap, (const struct DeviceLocation *)ptr);
-		break;
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		soap_serialize_dss__DeviceGetZoneID(soap, (const struct dss__DeviceGetZoneID *)ptr);
 		break;
@@ -2657,14 +2668,6 @@
 		return (void*)soap_instantiate_dss__DeviceGetZoneIDResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return (void*)soap_instantiate_dss__DeviceGetZoneID(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_DeviceLocation:
-		return (void*)soap_instantiate_DeviceLocation(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__DeviceSetLocationResponse:
-		return (void*)soap_instantiate_dss__DeviceSetLocationResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__DeviceSetLocation:
-		return (void*)soap_instantiate_dss__DeviceSetLocation(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__DeviceGetLocation:
-		return (void*)soap_instantiate_dss__DeviceGetLocation(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
 		return (void*)soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
@@ -2721,10 +2724,20 @@
 		return (void*)soap_instantiate_dss__SwitchGetGroupIDResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__SwitchGetGroupID:
 		return (void*)soap_instantiate_dss__SwitchGetGroupID(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__Event:
+		return (void*)soap_instantiate_dss__Event(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__EventRaiseResponse:
 		return (void*)soap_instantiate_dss__EventRaiseResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__EventRaise:
 		return (void*)soap_instantiate_dss__EventRaise(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__EventWaitForResponse:
+		return (void*)soap_instantiate_dss__EventWaitForResponse(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__EventWaitFor:
+		return (void*)soap_instantiate_dss__EventWaitFor(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__EventSubscribeToResponse:
+		return (void*)soap_instantiate_dss__EventSubscribeToResponse(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__EventSubscribeTo:
+		return (void*)soap_instantiate_dss__EventSubscribeTo(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__PropertyGetTypeResponse:
 		return (void*)soap_instantiate_dss__PropertyGetTypeResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__PropertyGetType:
@@ -2777,6 +2790,8 @@
 	case SOAP_TYPE_SOAP_ENV__Fault:
 		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
 #endif
+	case SOAP_TYPE_std__vectorTemplateOfdss__Event:
+		return (void*)soap_instantiate_std__vectorTemplateOfdss__Event(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_std__vectorTemplateOfint:
 		return (void*)soap_instantiate_std__vectorTemplateOfint(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_std__vectorTemplateOfstd__string:
@@ -3586,30 +3601,6 @@
 		else
 			delete[] (struct dss__DeviceGetZoneID*)p->ptr;
 		break;
-	case SOAP_TYPE_DeviceLocation:
-		if (p->size < 0)
-			delete (struct DeviceLocation*)p->ptr;
-		else
-			delete[] (struct DeviceLocation*)p->ptr;
-		break;
-	case SOAP_TYPE_dss__DeviceSetLocationResponse:
-		if (p->size < 0)
-			delete (struct dss__DeviceSetLocationResponse*)p->ptr;
-		else
-			delete[] (struct dss__DeviceSetLocationResponse*)p->ptr;
-		break;
-	case SOAP_TYPE_dss__DeviceSetLocation:
-		if (p->size < 0)
-			delete (struct dss__DeviceSetLocation*)p->ptr;
-		else
-			delete[] (struct dss__DeviceSetLocation*)p->ptr;
-		break;
-	case SOAP_TYPE_dss__DeviceGetLocation:
-		if (p->size < 0)
-			delete (struct dss__DeviceGetLocation*)p->ptr;
-		else
-			delete[] (struct dss__DeviceGetLocation*)p->ptr;
-		break;
 	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
 		if (p->size < 0)
 			delete (struct dss__ModulatorGetPowerConsumptionResponse*)p->ptr;
@@ -3778,6 +3769,12 @@
 		else
 			delete[] (struct dss__SwitchGetGroupID*)p->ptr;
 		break;
+	case SOAP_TYPE_dss__Event:
+		if (p->size < 0)
+			delete (dss__Event*)p->ptr;
+		else
+			delete[] (dss__Event*)p->ptr;
+		break;
 	case SOAP_TYPE_dss__EventRaiseResponse:
 		if (p->size < 0)
 			delete (struct dss__EventRaiseResponse*)p->ptr;
@@ -3790,6 +3787,30 @@
 		else
 			delete[] (struct dss__EventRaise*)p->ptr;
 		break;
+	case SOAP_TYPE_dss__EventWaitForResponse:
+		if (p->size < 0)
+			delete (struct dss__EventWaitForResponse*)p->ptr;
+		else
+			delete[] (struct dss__EventWaitForResponse*)p->ptr;
+		break;
+	case SOAP_TYPE_dss__EventWaitFor:
+		if (p->size < 0)
+			delete (struct dss__EventWaitFor*)p->ptr;
+		else
+			delete[] (struct dss__EventWaitFor*)p->ptr;
+		break;
+	case SOAP_TYPE_dss__EventSubscribeToResponse:
+		if (p->size < 0)
+			delete (struct dss__EventSubscribeToResponse*)p->ptr;
+		else
+			delete[] (struct dss__EventSubscribeToResponse*)p->ptr;
+		break;
+	case SOAP_TYPE_dss__EventSubscribeTo:
+		if (p->size < 0)
+			delete (struct dss__EventSubscribeTo*)p->ptr;
+		else
+			delete[] (struct dss__EventSubscribeTo*)p->ptr;
+		break;
 	case SOAP_TYPE_dss__PropertyGetTypeResponse:
 		if (p->size < 0)
 			delete (struct dss__PropertyGetTypeResponse*)p->ptr;
@@ -3916,6 +3937,12 @@
 		else
 			delete[] (struct SOAP_ENV__Fault*)p->ptr;
 		break;
+	case SOAP_TYPE_std__vectorTemplateOfdss__Event:
+		if (p->size < 0)
+			delete (std::vector<dss__Event >*)p->ptr;
+		else
+			delete[] (std::vector<dss__Event >*)p->ptr;
+		break;
 	case SOAP_TYPE_std__vectorTemplateOfint:
 		if (p->size < 0)
 			delete (std::vector<int >*)p->ptr;
@@ -3944,6 +3971,10 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_container_insert(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {	switch (tt)
 	{
+	case SOAP_TYPE_std__vectorTemplateOfdss__Event:
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Container insert type=%d in %d location=%p object=%p len=%lu\n", st, tt, p, q, (unsigned long)len));
+		(*(std::vector<dss__Event >*)p)[len] = *(dss__Event *)q;
+		break;
 	case SOAP_TYPE_std__vectorTemplateOfint:
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Container insert type=%d in %d location=%p object=%p len=%lu\n", st, tt, p, q, (unsigned long)len));
 		(*(std::vector<int >*)p)[len] = *(int *)q;
@@ -4378,6 +4409,148 @@
 	return a;
 }
 
+void dss__Event::soap_default(struct soap *soap)
+{
+	(void)soap; /* appease -Wall -Werror */
+	soap_default_std__string(soap, &this->dss__Event::name);
+	soap_default_std__vectorTemplateOfstd__string(soap, &this->dss__Event::parameter);
+}
+
+void dss__Event::soap_serialize(struct soap *soap) const
+{
+	(void)soap; /* appease -Wall -Werror */
+	soap_serialize_std__string(soap, &this->dss__Event::name);
+	soap_serialize_std__vectorTemplateOfstd__string(soap, &this->dss__Event::parameter);
+}
+
+int dss__Event::soap_put(struct soap *soap, const char *tag, const  char *type) const
+{
+	register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_dss__Event);
+	if (this->soap_out(soap, tag, id, type))
+		return soap->error;
+	return soap_putindependent(soap);
+}
+
+int dss__Event::soap_out(struct soap *soap, const char *tag, int id, const char *type) const
+{
+	return soap_out_dss__Event(soap, tag, id, this, type);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__Event(struct soap *soap, const char *tag, int id, const dss__Event *a, const char *type)
+{
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__Event), type))
+		return soap->error;
+	if (soap_out_std__string(soap, "name", -1, &(a->dss__Event::name), ""))
+		return soap->error;
+	if (soap_out_std__vectorTemplateOfstd__string(soap, "parameter", -1, &(a->dss__Event::parameter), ""))
+		return soap->error;
+	return soap_element_end_out(soap, tag);
+}
+
+void *dss__Event::soap_get(struct soap *soap, const char *tag, const char *type)
+{
+	return soap_get_dss__Event(soap, this, tag, type);
+}
+
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_get_dss__Event(struct soap *soap, dss__Event *p, const char *tag, const char *type)
+{
+	if ((p = soap_in_dss__Event(soap, tag, p, type)))
+		if (soap_getindependent(soap))
+			return NULL;
+	return p;
+}
+
+void *dss__Event::soap_in(struct soap *soap, const char *tag, const char *type)
+{	return soap_in_dss__Event(soap, tag, this, type);
+}
+
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_in_dss__Event(struct soap *soap, const char *tag, dss__Event *a, const char *type)
+{
+	if (soap_element_begin_in(soap, tag, 0, NULL))
+		return NULL;
+	a = (dss__Event *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__Event, sizeof(dss__Event), soap->type, soap->arrayType);
+	if (!a)
+		return NULL;
+	if (soap->alloced)
+	{	a->soap_default(soap);
+		if (soap->clist->type != SOAP_TYPE_dss__Event)
+		{	soap_revert(soap);
+			*soap->id = '\0';
+			return (dss__Event *)a->soap_in(soap, tag, type);
+		}
+	}
+	short soap_flag_name1 = 1;
+	if (soap->body && !*soap->href)
+	{
+		for (;;)
+		{	soap->error = SOAP_TAG_MISMATCH;
+			if (soap_flag_name1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
+				if (soap_in_std__string(soap, "name", &(a->dss__Event::name), "xsd:string"))
+				{	soap_flag_name1--;
+					continue;
+				}
+			if (soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_std__vectorTemplateOfstd__string(soap, "parameter", &(a->dss__Event::parameter), "xsd:string"))
+					continue;
+			if (soap->error == SOAP_TAG_MISMATCH)
+				soap->error = soap_ignore_element(soap);
+			if (soap->error == SOAP_NO_TAG)
+				break;
+			if (soap->error)
+				return NULL;
+		}
+		if (soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	else
+	{	a = (dss__Event *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__Event, 0, sizeof(dss__Event), 0, soap_copy_dss__Event);
+		if (soap->body && soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_name1 > 0))
+	{	soap->error = SOAP_OCCURS;
+		return NULL;
+	}
+	return a;
+}
+
+SOAP_FMAC5 dss__Event * SOAP_FMAC6 soap_new_dss__Event(struct soap *soap, int n)
+{	return soap_instantiate_dss__Event(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__Event(struct soap *soap, dss__Event *p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_instantiate_dss__Event(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__Event(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__Event, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new dss__Event;
+		if (size)
+			*size = sizeof(dss__Event);
+	}
+	else
+	{	cp->ptr = (void*)new dss__Event[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(dss__Event);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (dss__Event*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Event(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying dss__Event %p -> %p\n", q, p));
+	*(dss__Event*)p = *(dss__Event*)q;
+}
+
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__string(struct soap *soap, std::string *p)
 {	(void)soap; /* appease -Wall -Werror */
 	p->erase();
@@ -4423,13 +4596,11 @@
 	if (soap->body && !*soap->href)
 	{	char *t;
 		s = (std::string*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__string, sizeof(std::string), soap->type, soap->arrayType);
-		if (s) 
-		{
+		if (s)
 			if ((t = soap_string_in(soap, 1, -1, -1)))
 				s->assign(t);
 			else
 				return NULL;
-		}
 	}
 	else
 		s = (std::string*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__string, sizeof(std::string), soap->type, soap->arrayType), 0, SOAP_TYPE_std__string, 0, sizeof(std::string), 0, soap_copy_std__string);
@@ -7051,6 +7222,470 @@
 	*(struct dss__PropertyGetTypeResponse*)p = *(struct dss__PropertyGetTypeResponse*)q;
 }
 
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventSubscribeTo(struct soap *soap, struct dss__EventSubscribeTo *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_default_int(soap, &a->_token);
+	soap_default_std__string(soap, &a->_name);
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventSubscribeTo(struct soap *soap, const struct dss__EventSubscribeTo *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_serialize_std__string(soap, &a->_name);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventSubscribeTo(struct soap *soap, const struct dss__EventSubscribeTo *a, const char *tag, const char *type)
+{
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__EventSubscribeTo);
+	if (soap_out_dss__EventSubscribeTo(soap, tag, id, a, type))
+		return soap->error;
+	return soap_putindependent(soap);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventSubscribeTo(struct soap *soap, const char *tag, int id, const struct dss__EventSubscribeTo *a, const char *type)
+{
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__EventSubscribeTo), type))
+		return soap->error;
+	if (soap_out_int(soap, "token", -1, &a->_token, ""))
+		return soap->error;
+	if (soap_out_std__string(soap, "name", -1, &a->_name, ""))
+		return soap->error;
+	return soap_element_end_out(soap, tag);
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_get_dss__EventSubscribeTo(struct soap *soap, struct dss__EventSubscribeTo *p, const char *tag, const char *type)
+{
+	if ((p = soap_in_dss__EventSubscribeTo(soap, tag, p, type)))
+		if (soap_getindependent(soap))
+			return NULL;
+	return p;
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_in_dss__EventSubscribeTo(struct soap *soap, const char *tag, struct dss__EventSubscribeTo *a, const char *type)
+{
+	short soap_flag__token = 1, soap_flag__name = 1;
+	if (soap_element_begin_in(soap, tag, 0, type))
+		return NULL;
+	a = (struct dss__EventSubscribeTo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__EventSubscribeTo, sizeof(struct dss__EventSubscribeTo), soap->type, soap->arrayType);
+	if (!a)
+		return NULL;
+	soap_default_dss__EventSubscribeTo(soap, a);
+	if (soap->body && !*soap->href)
+	{
+		for (;;)
+		{	soap->error = SOAP_TAG_MISMATCH;
+			if (soap_flag__token && soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_int(soap, NULL, &a->_token, "xsd:int"))
+				{	soap_flag__token--;
+					continue;
+				}
+			if (soap_flag__name && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
+				if (soap_in_std__string(soap, NULL, &a->_name, "xsd:string"))
+				{	soap_flag__name--;
+					continue;
+				}
+			if (soap->error == SOAP_TAG_MISMATCH)
+				soap->error = soap_ignore_element(soap);
+			if (soap->error == SOAP_NO_TAG)
+				break;
+			if (soap->error)
+				return NULL;
+		}
+		if (soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	else
+	{	a = (struct dss__EventSubscribeTo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__EventSubscribeTo, 0, sizeof(struct dss__EventSubscribeTo), 0, soap_copy_dss__EventSubscribeTo);
+		if (soap->body && soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0 || soap_flag__name > 0))
+	{	soap->error = SOAP_OCCURS;
+		return NULL;
+	}
+	return a;
+}
+
+SOAP_FMAC5 struct dss__EventSubscribeTo * SOAP_FMAC6 soap_new_dss__EventSubscribeTo(struct soap *soap, int n)
+{	return soap_instantiate_dss__EventSubscribeTo(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventSubscribeTo(struct soap *soap, struct dss__EventSubscribeTo *p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_instantiate_dss__EventSubscribeTo(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__EventSubscribeTo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__EventSubscribeTo, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new struct dss__EventSubscribeTo;
+		if (size)
+			*size = sizeof(struct dss__EventSubscribeTo);
+	}
+	else
+	{	cp->ptr = (void*)new struct dss__EventSubscribeTo[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(struct dss__EventSubscribeTo);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (struct dss__EventSubscribeTo*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventSubscribeTo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__EventSubscribeTo %p -> %p\n", q, p));
+	*(struct dss__EventSubscribeTo*)p = *(struct dss__EventSubscribeTo*)q;
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventSubscribeToResponse(struct soap *soap, struct dss__EventSubscribeToResponse *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_default_std__string(soap, &a->result);
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventSubscribeToResponse(struct soap *soap, const struct dss__EventSubscribeToResponse *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_serialize_std__string(soap, &a->result);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventSubscribeToResponse(struct soap *soap, const struct dss__EventSubscribeToResponse *a, const char *tag, const char *type)
+{
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__EventSubscribeToResponse);
+	if (soap_out_dss__EventSubscribeToResponse(soap, tag, id, a, type))
+		return soap->error;
+	return soap_putindependent(soap);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventSubscribeToResponse(struct soap *soap, const char *tag, int id, const struct dss__EventSubscribeToResponse *a, const char *type)
+{
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__EventSubscribeToResponse), type))
+		return soap->error;
+	if (soap_out_std__string(soap, "result", -1, &a->result, ""))
+		return soap->error;
+	return soap_element_end_out(soap, tag);
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_get_dss__EventSubscribeToResponse(struct soap *soap, struct dss__EventSubscribeToResponse *p, const char *tag, const char *type)
+{
+	if ((p = soap_in_dss__EventSubscribeToResponse(soap, tag, p, type)))
+		if (soap_getindependent(soap))
+			return NULL;
+	return p;
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_in_dss__EventSubscribeToResponse(struct soap *soap, const char *tag, struct dss__EventSubscribeToResponse *a, const char *type)
+{
+	short soap_flag_result = 1;
+	if (soap_element_begin_in(soap, tag, 0, type))
+		return NULL;
+	a = (struct dss__EventSubscribeToResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__EventSubscribeToResponse, sizeof(struct dss__EventSubscribeToResponse), soap->type, soap->arrayType);
+	if (!a)
+		return NULL;
+	soap_default_dss__EventSubscribeToResponse(soap, a);
+	if (soap->body && !*soap->href)
+	{
+		for (;;)
+		{	soap->error = SOAP_TAG_MISMATCH;
+			if (soap_flag_result && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
+				if (soap_in_std__string(soap, "result", &a->result, "xsd:string"))
+				{	soap_flag_result--;
+					continue;
+				}
+			if (soap->error == SOAP_TAG_MISMATCH)
+				soap->error = soap_ignore_element(soap);
+			if (soap->error == SOAP_NO_TAG)
+				break;
+			if (soap->error)
+				return NULL;
+		}
+		if (soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	else
+	{	a = (struct dss__EventSubscribeToResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__EventSubscribeToResponse, 0, sizeof(struct dss__EventSubscribeToResponse), 0, soap_copy_dss__EventSubscribeToResponse);
+		if (soap->body && soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_result > 0))
+	{	soap->error = SOAP_OCCURS;
+		return NULL;
+	}
+	return a;
+}
+
+SOAP_FMAC5 struct dss__EventSubscribeToResponse * SOAP_FMAC6 soap_new_dss__EventSubscribeToResponse(struct soap *soap, int n)
+{	return soap_instantiate_dss__EventSubscribeToResponse(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventSubscribeToResponse(struct soap *soap, struct dss__EventSubscribeToResponse *p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_instantiate_dss__EventSubscribeToResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__EventSubscribeToResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__EventSubscribeToResponse, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new struct dss__EventSubscribeToResponse;
+		if (size)
+			*size = sizeof(struct dss__EventSubscribeToResponse);
+	}
+	else
+	{	cp->ptr = (void*)new struct dss__EventSubscribeToResponse[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(struct dss__EventSubscribeToResponse);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (struct dss__EventSubscribeToResponse*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventSubscribeToResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__EventSubscribeToResponse %p -> %p\n", q, p));
+	*(struct dss__EventSubscribeToResponse*)p = *(struct dss__EventSubscribeToResponse*)q;
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventWaitFor(struct soap *soap, struct dss__EventWaitFor *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_default_int(soap, &a->_token);
+	soap_default_int(soap, &a->_timeout);
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventWaitFor(struct soap *soap, const struct dss__EventWaitFor *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventWaitFor(struct soap *soap, const struct dss__EventWaitFor *a, const char *tag, const char *type)
+{
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__EventWaitFor);
+	if (soap_out_dss__EventWaitFor(soap, tag, id, a, type))
+		return soap->error;
+	return soap_putindependent(soap);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventWaitFor(struct soap *soap, const char *tag, int id, const struct dss__EventWaitFor *a, const char *type)
+{
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__EventWaitFor), type))
+		return soap->error;
+	if (soap_out_int(soap, "token", -1, &a->_token, ""))
+		return soap->error;
+	if (soap_out_int(soap, "timeout", -1, &a->_timeout, ""))
+		return soap->error;
+	return soap_element_end_out(soap, tag);
+}
+
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_get_dss__EventWaitFor(struct soap *soap, struct dss__EventWaitFor *p, const char *tag, const char *type)
+{
+	if ((p = soap_in_dss__EventWaitFor(soap, tag, p, type)))
+		if (soap_getindependent(soap))
+			return NULL;
+	return p;
+}
+
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_in_dss__EventWaitFor(struct soap *soap, const char *tag, struct dss__EventWaitFor *a, const char *type)
+{
+	short soap_flag__token = 1, soap_flag__timeout = 1;
+	if (soap_element_begin_in(soap, tag, 0, type))
+		return NULL;
+	a = (struct dss__EventWaitFor *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__EventWaitFor, sizeof(struct dss__EventWaitFor), 0, NULL, NULL, NULL);
+	if (!a)
+		return NULL;
+	soap_default_dss__EventWaitFor(soap, a);
+	if (soap->body && !*soap->href)
+	{
+		for (;;)
+		{	soap->error = SOAP_TAG_MISMATCH;
+			if (soap_flag__token && soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_int(soap, NULL, &a->_token, "xsd:int"))
+				{	soap_flag__token--;
+					continue;
+				}
+			if (soap_flag__timeout && soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_int(soap, NULL, &a->_timeout, "xsd:int"))
+				{	soap_flag__timeout--;
+					continue;
+				}
+			if (soap->error == SOAP_TAG_MISMATCH)
+				soap->error = soap_ignore_element(soap);
+			if (soap->error == SOAP_NO_TAG)
+				break;
+			if (soap->error)
+				return NULL;
+		}
+		if (soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	else
+	{	a = (struct dss__EventWaitFor *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__EventWaitFor, 0, sizeof(struct dss__EventWaitFor), 0, NULL);
+		if (soap->body && soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0 || soap_flag__timeout > 0))
+	{	soap->error = SOAP_OCCURS;
+		return NULL;
+	}
+	return a;
+}
+
+SOAP_FMAC5 struct dss__EventWaitFor * SOAP_FMAC6 soap_new_dss__EventWaitFor(struct soap *soap, int n)
+{	return soap_instantiate_dss__EventWaitFor(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventWaitFor(struct soap *soap, struct dss__EventWaitFor *p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_instantiate_dss__EventWaitFor(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__EventWaitFor(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__EventWaitFor, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new struct dss__EventWaitFor;
+		if (size)
+			*size = sizeof(struct dss__EventWaitFor);
+	}
+	else
+	{	cp->ptr = (void*)new struct dss__EventWaitFor[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(struct dss__EventWaitFor);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (struct dss__EventWaitFor*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventWaitFor(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__EventWaitFor %p -> %p\n", q, p));
+	*(struct dss__EventWaitFor*)p = *(struct dss__EventWaitFor*)q;
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventWaitForResponse(struct soap *soap, struct dss__EventWaitForResponse *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_default_std__vectorTemplateOfdss__Event(soap, &a->result);
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventWaitForResponse(struct soap *soap, const struct dss__EventWaitForResponse *a)
+{
+	(void)soap; (void)a; /* appease -Wall -Werror */
+	soap_serialize_std__vectorTemplateOfdss__Event(soap, &a->result);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventWaitForResponse(struct soap *soap, const struct dss__EventWaitForResponse *a, const char *tag, const char *type)
+{
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__EventWaitForResponse);
+	if (soap_out_dss__EventWaitForResponse(soap, tag, id, a, type))
+		return soap->error;
+	return soap_putindependent(soap);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventWaitForResponse(struct soap *soap, const char *tag, int id, const struct dss__EventWaitForResponse *a, const char *type)
+{
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__EventWaitForResponse), type))
+		return soap->error;
+	if (soap_out_std__vectorTemplateOfdss__Event(soap, "result", -1, &a->result, ""))
+		return soap->error;
+	return soap_element_end_out(soap, tag);
+}
+
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_get_dss__EventWaitForResponse(struct soap *soap, struct dss__EventWaitForResponse *p, const char *tag, const char *type)
+{
+	if ((p = soap_in_dss__EventWaitForResponse(soap, tag, p, type)))
+		if (soap_getindependent(soap))
+			return NULL;
+	return p;
+}
+
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_in_dss__EventWaitForResponse(struct soap *soap, const char *tag, struct dss__EventWaitForResponse *a, const char *type)
+{
+	if (soap_element_begin_in(soap, tag, 0, type))
+		return NULL;
+	a = (struct dss__EventWaitForResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__EventWaitForResponse, sizeof(struct dss__EventWaitForResponse), soap->type, soap->arrayType);
+	if (!a)
+		return NULL;
+	soap_default_dss__EventWaitForResponse(soap, a);
+	if (soap->body && !*soap->href)
+	{
+		for (;;)
+		{	soap->error = SOAP_TAG_MISMATCH;
+			if (soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_std__vectorTemplateOfdss__Event(soap, "result", &a->result, "dss:Event"))
+					continue;
+			if (soap->error == SOAP_TAG_MISMATCH)
+				soap->error = soap_ignore_element(soap);
+			if (soap->error == SOAP_NO_TAG)
+				break;
+			if (soap->error)
+				return NULL;
+		}
+		if (soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	else
+	{	a = (struct dss__EventWaitForResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__EventWaitForResponse, 0, sizeof(struct dss__EventWaitForResponse), 0, soap_copy_dss__EventWaitForResponse);
+		if (soap->body && soap_element_end_in(soap, tag))
+			return NULL;
+	}
+	return a;
+}
+
+SOAP_FMAC5 struct dss__EventWaitForResponse * SOAP_FMAC6 soap_new_dss__EventWaitForResponse(struct soap *soap, int n)
+{	return soap_instantiate_dss__EventWaitForResponse(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventWaitForResponse(struct soap *soap, struct dss__EventWaitForResponse *p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_instantiate_dss__EventWaitForResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__EventWaitForResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__EventWaitForResponse, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new struct dss__EventWaitForResponse;
+		if (size)
+			*size = sizeof(struct dss__EventWaitForResponse);
+	}
+	else
+	{	cp->ptr = (void*)new struct dss__EventWaitForResponse[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(struct dss__EventWaitForResponse);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (struct dss__EventWaitForResponse*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventWaitForResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__EventWaitForResponse %p -> %p\n", q, p));
+	*(struct dss__EventWaitForResponse*)p = *(struct dss__EventWaitForResponse*)q;
+}
+
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventRaise(struct soap *soap, struct dss__EventRaise *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
@@ -10608,501 +11243,6 @@
 	*(struct dss__ModulatorGetPowerConsumptionResponse*)p = *(struct dss__ModulatorGetPowerConsumptionResponse*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetLocation(struct soap *soap, struct dss__DeviceGetLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_int(soap, &a->_token);
-	soap_default_string(soap, &a->_deviceID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceGetLocation(struct soap *soap, const struct dss__DeviceGetLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->_deviceID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceGetLocation(struct soap *soap, const struct dss__DeviceGetLocation *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DeviceGetLocation);
-	if (soap_out_dss__DeviceGetLocation(soap, tag, id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceGetLocation(struct soap *soap, const char *tag, int id, const struct dss__DeviceGetLocation *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DeviceGetLocation), type))
-		return soap->error;
-	if (soap_out_int(soap, "token", -1, &a->_token, ""))
-		return soap->error;
-	if (soap_out_string(soap, "deviceID", -1, &a->_deviceID, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_get_dss__DeviceGetLocation(struct soap *soap, struct dss__DeviceGetLocation *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_dss__DeviceGetLocation(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_in_dss__DeviceGetLocation(struct soap *soap, const char *tag, struct dss__DeviceGetLocation *a, const char *type)
-{
-	short soap_flag__token = 1, soap_flag__deviceID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct dss__DeviceGetLocation *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DeviceGetLocation, sizeof(struct dss__DeviceGetLocation), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_dss__DeviceGetLocation(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag__token && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_int(soap, NULL, &a->_token, "xsd:int"))
-				{	soap_flag__token--;
-					continue;
-				}
-			if (soap_flag__deviceID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, NULL, &a->_deviceID, "xsd:string"))
-				{	soap_flag__deviceID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct dss__DeviceGetLocation *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DeviceGetLocation, 0, sizeof(struct dss__DeviceGetLocation), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC5 struct dss__DeviceGetLocation * SOAP_FMAC6 soap_new_dss__DeviceGetLocation(struct soap *soap, int n)
-{	return soap_instantiate_dss__DeviceGetLocation(soap, n, NULL, NULL, NULL);
-}
-
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceGetLocation(struct soap *soap, struct dss__DeviceGetLocation *p)
-{	soap_delete(soap, p);
-}
-
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_instantiate_dss__DeviceGetLocation(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DeviceGetLocation(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DeviceGetLocation, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__DeviceGetLocation;
-		if (size)
-			*size = sizeof(struct dss__DeviceGetLocation);
-	}
-	else
-	{	cp->ptr = (void*)new struct dss__DeviceGetLocation[n];
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct dss__DeviceGetLocation);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__DeviceGetLocation*)cp->ptr;
-}
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceGetLocation(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DeviceGetLocation %p -> %p\n", q, p));
-	*(struct dss__DeviceGetLocation*)p = *(struct dss__DeviceGetLocation*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceSetLocation(struct soap *soap, struct dss__DeviceSetLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_int(soap, &a->_token);
-	soap_default_string(soap, &a->_deviceID);
-	soap_default_DeviceLocation(soap, &a->_location);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceSetLocation(struct soap *soap, const struct dss__DeviceSetLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->_deviceID);
-	soap_serialize_DeviceLocation(soap, &a->_location);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceSetLocation(struct soap *soap, const struct dss__DeviceSetLocation *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DeviceSetLocation);
-	if (soap_out_dss__DeviceSetLocation(soap, tag, id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceSetLocation(struct soap *soap, const char *tag, int id, const struct dss__DeviceSetLocation *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DeviceSetLocation), type))
-		return soap->error;
-	if (soap_out_int(soap, "token", -1, &a->_token, ""))
-		return soap->error;
-	if (soap_out_string(soap, "deviceID", -1, &a->_deviceID, ""))
-		return soap->error;
-	if (soap_out_DeviceLocation(soap, "location", -1, &a->_location, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_get_dss__DeviceSetLocation(struct soap *soap, struct dss__DeviceSetLocation *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_dss__DeviceSetLocation(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_in_dss__DeviceSetLocation(struct soap *soap, const char *tag, struct dss__DeviceSetLocation *a, const char *type)
-{
-	short soap_flag__token = 1, soap_flag__deviceID = 1, soap_flag__location = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct dss__DeviceSetLocation *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DeviceSetLocation, sizeof(struct dss__DeviceSetLocation), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_dss__DeviceSetLocation(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag__token && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_int(soap, NULL, &a->_token, "xsd:int"))
-				{	soap_flag__token--;
-					continue;
-				}
-			if (soap_flag__deviceID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, NULL, &a->_deviceID, "xsd:string"))
-				{	soap_flag__deviceID--;
-					continue;
-				}
-			if (soap_flag__location && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_DeviceLocation(soap, NULL, &a->_location, "DeviceLocation"))
-				{	soap_flag__location--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct dss__DeviceSetLocation *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DeviceSetLocation, 0, sizeof(struct dss__DeviceSetLocation), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0 || soap_flag__location > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC5 struct dss__DeviceSetLocation * SOAP_FMAC6 soap_new_dss__DeviceSetLocation(struct soap *soap, int n)
-{	return soap_instantiate_dss__DeviceSetLocation(soap, n, NULL, NULL, NULL);
-}
-
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceSetLocation(struct soap *soap, struct dss__DeviceSetLocation *p)
-{	soap_delete(soap, p);
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_instantiate_dss__DeviceSetLocation(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DeviceSetLocation(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DeviceSetLocation, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__DeviceSetLocation;
-		if (size)
-			*size = sizeof(struct dss__DeviceSetLocation);
-	}
-	else
-	{	cp->ptr = (void*)new struct dss__DeviceSetLocation[n];
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct dss__DeviceSetLocation);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__DeviceSetLocation*)cp->ptr;
-}
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceSetLocation(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DeviceSetLocation %p -> %p\n", q, p));
-	*(struct dss__DeviceSetLocation*)p = *(struct dss__DeviceSetLocation*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceSetLocationResponse(struct soap *soap, struct dss__DeviceSetLocationResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_bool(soap, &a->result);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceSetLocationResponse(struct soap *soap, const struct dss__DeviceSetLocationResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceSetLocationResponse(struct soap *soap, const struct dss__DeviceSetLocationResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DeviceSetLocationResponse);
-	if (soap_out_dss__DeviceSetLocationResponse(soap, tag, id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceSetLocationResponse(struct soap *soap, const char *tag, int id, const struct dss__DeviceSetLocationResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DeviceSetLocationResponse), type))
-		return soap->error;
-	if (soap_out_bool(soap, "result", -1, &a->result, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_get_dss__DeviceSetLocationResponse(struct soap *soap, struct dss__DeviceSetLocationResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_dss__DeviceSetLocationResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_in_dss__DeviceSetLocationResponse(struct soap *soap, const char *tag, struct dss__DeviceSetLocationResponse *a, const char *type)
-{
-	short soap_flag_result = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct dss__DeviceSetLocationResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DeviceSetLocationResponse, sizeof(struct dss__DeviceSetLocationResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_dss__DeviceSetLocationResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_result && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_bool(soap, "result", &a->result, "xsd:boolean"))
-				{	soap_flag_result--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct dss__DeviceSetLocationResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DeviceSetLocationResponse, 0, sizeof(struct dss__DeviceSetLocationResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_result > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC5 struct dss__DeviceSetLocationResponse * SOAP_FMAC6 soap_new_dss__DeviceSetLocationResponse(struct soap *soap, int n)
-{	return soap_instantiate_dss__DeviceSetLocationResponse(soap, n, NULL, NULL, NULL);
-}
-
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceSetLocationResponse(struct soap *soap, struct dss__DeviceSetLocationResponse *p)
-{	soap_delete(soap, p);
-}
-
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_instantiate_dss__DeviceSetLocationResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DeviceSetLocationResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DeviceSetLocationResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__DeviceSetLocationResponse;
-		if (size)
-			*size = sizeof(struct dss__DeviceSetLocationResponse);
-	}
-	else
-	{	cp->ptr = (void*)new struct dss__DeviceSetLocationResponse[n];
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct dss__DeviceSetLocationResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__DeviceSetLocationResponse*)cp->ptr;
-}
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceSetLocationResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DeviceSetLocationResponse %p -> %p\n", q, p));
-	*(struct dss__DeviceSetLocationResponse*)p = *(struct dss__DeviceSetLocationResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_DeviceLocation(struct soap *soap, struct DeviceLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_double(soap, &a->x);
-	soap_default_double(soap, &a->y);
-	soap_default_double(soap, &a->z);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_DeviceLocation(struct soap *soap, const struct DeviceLocation *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_DeviceLocation(struct soap *soap, const struct DeviceLocation *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_DeviceLocation);
-	if (soap_out_DeviceLocation(soap, tag, id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_DeviceLocation(struct soap *soap, const char *tag, int id, const struct DeviceLocation *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_DeviceLocation), type))
-		return soap->error;
-	if (soap_out_double(soap, "x", -1, &a->x, ""))
-		return soap->error;
-	if (soap_out_double(soap, "y", -1, &a->y, ""))
-		return soap->error;
-	if (soap_out_double(soap, "z", -1, &a->z, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_get_DeviceLocation(struct soap *soap, struct DeviceLocation *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_DeviceLocation(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_in_DeviceLocation(struct soap *soap, const char *tag, struct DeviceLocation *a, const char *type)
-{
-	short soap_flag_x = 1, soap_flag_y = 1, soap_flag_z = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct DeviceLocation *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_DeviceLocation, sizeof(struct DeviceLocation), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_DeviceLocation(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_x && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_double(soap, "x", &a->x, "xsd:double"))
-				{	soap_flag_x--;
-					continue;
-				}
-			if (soap_flag_y && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_double(soap, "y", &a->y, "xsd:double"))
-				{	soap_flag_y--;
-					continue;
-				}
-			if (soap_flag_z && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_double(soap, "z", &a->z, "xsd:double"))
-				{	soap_flag_z--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct DeviceLocation *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_DeviceLocation, 0, sizeof(struct DeviceLocation), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_x > 0 || soap_flag_y > 0 || soap_flag_z > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC5 struct DeviceLocation * SOAP_FMAC6 soap_new_DeviceLocation(struct soap *soap, int n)
-{	return soap_instantiate_DeviceLocation(soap, n, NULL, NULL, NULL);
-}
-
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_DeviceLocation(struct soap *soap, struct DeviceLocation *p)
-{	soap_delete(soap, p);
-}
-
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_instantiate_DeviceLocation(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_DeviceLocation(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_DeviceLocation, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)new struct DeviceLocation;
-		if (size)
-			*size = sizeof(struct DeviceLocation);
-	}
-	else
-	{	cp->ptr = (void*)new struct DeviceLocation[n];
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct DeviceLocation);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct DeviceLocation*)cp->ptr;
-}
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_DeviceLocation(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct DeviceLocation %p -> %p\n", q, p));
-	*(struct DeviceLocation*)p = *(struct DeviceLocation*)q;
-}
-
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetZoneID(struct soap *soap, struct dss__DeviceGetZoneID *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
@@ -27240,6 +27380,97 @@
 	return soap_instring(soap, tag, a, type, SOAP_TYPE_string, 1, -1, -1);
 }
 
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfdss__Event(struct soap *soap, std::vector<dss__Event >*p)
+{
+	p->clear();
+}
+
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfdss__Event(struct soap *soap, const std::vector<dss__Event >*a)
+{
+	for (std::vector<dss__Event >::const_iterator i = a->begin(); i != a->end(); ++i)
+		(*i).soap_serialize(soap);
+}
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfdss__Event(struct soap *soap, const char *tag, int id, const std::vector<dss__Event >*a, const char *type)
+{
+	for (std::vector<dss__Event >::const_iterator i = a->begin(); i != a->end(); ++i)
+	{
+		if ((*i).soap_out(soap, tag, id, ""))
+			return soap->error;
+	}
+	return SOAP_OK;
+}
+
+SOAP_FMAC3 std::vector<dss__Event >* SOAP_FMAC4 soap_in_std__vectorTemplateOfdss__Event(struct soap *soap, const char *tag, std::vector<dss__Event >*a, const char *type)
+{
+	if (soap_element_begin_in(soap, tag, 1, NULL))
+		return NULL;
+	if (!a && !(a = soap_new_std__vectorTemplateOfdss__Event(soap, -1)))
+		return NULL;
+	dss__Event n;
+	short soap_flag = 0;
+	do
+	{	soap_revert(soap);
+		n.soap_default(soap);
+		if (*soap->id || *soap->href)
+		{	if (!soap_container_id_forward(soap, *soap->id?soap->id:soap->href, a, (size_t)a->size(), SOAP_TYPE_dss__Event, SOAP_TYPE_std__vectorTemplateOfdss__Event, sizeof(dss__Event), 0))
+				break;
+			if (!soap_in_dss__Event(soap, tag, NULL, "dss:Event"))
+				break;
+		}
+		else
+		{
+			if (!soap_in_dss__Event(soap, tag, &n, "dss:Event"))
+				break;
+		}
+		a->push_back(n);
+		soap_flag = 1;
+	}
+	while (!soap_element_begin_in(soap, tag, 1, NULL));
+	if (soap_flag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
+	{	soap->error = SOAP_OK;
+		return a;
+	}
+	return NULL;
+}
+
+SOAP_FMAC5 std::vector<dss__Event > * SOAP_FMAC6 soap_new_std__vectorTemplateOfdss__Event(struct soap *soap, int n)
+{	return soap_instantiate_std__vectorTemplateOfdss__Event(soap, n, NULL, NULL, NULL);
+}
+
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_std__vectorTemplateOfdss__Event(struct soap *soap, std::vector<dss__Event >*p)
+{	soap_delete(soap, p);
+}
+
+SOAP_FMAC3 std::vector<dss__Event > * SOAP_FMAC4 soap_instantiate_std__vectorTemplateOfdss__Event(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_std__vectorTemplateOfdss__Event(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__vectorTemplateOfdss__Event, n, soap_fdelete);
+	if (!cp)
+		return NULL;
+	if (n < 0)
+	{	cp->ptr = (void*)new std::vector<dss__Event >;
+		if (size)
+			*size = sizeof(std::vector<dss__Event >);
+	}
+	else
+	{	cp->ptr = (void*)new std::vector<dss__Event >[n];
+		if (!cp->ptr)
+		{	soap->error = SOAP_EOM;
+			return NULL;
+		}
+		if (size)
+			*size = n * sizeof(std::vector<dss__Event >);
+	}
+		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
+	return (std::vector<dss__Event >*)cp->ptr;
+}
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfdss__Event(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+{
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::vector<dss__Event > %p -> %p\n", q, p));
+	*(std::vector<dss__Event >*)p = *(std::vector<dss__Event >*)q;
+}
+
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfint(struct soap *soap, std::vector<int >*p)
 {
 	p->clear();

Modified: dss/trunk/webservices/soapH.h
===================================================================
--- dss/trunk/webservices/soapH.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/soapH.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -136,6 +136,18 @@
 
 SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *);
 
+#ifndef SOAP_TYPE_dss__Event
+#define SOAP_TYPE_dss__Event (271)
+#endif
+
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__Event(struct soap*, const char*, int, const dss__Event *, const char*);
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_get_dss__Event(struct soap*, dss__Event *, const char*, const char*);
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_in_dss__Event(struct soap*, const char*, dss__Event *, const char*);
+SOAP_FMAC5 dss__Event * SOAP_FMAC6 soap_new_dss__Event(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__Event(struct soap*, dss__Event*);
+SOAP_FMAC3 dss__Event * SOAP_FMAC4 soap_instantiate_dss__Event(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Event(struct soap*, int, int, void*, size_t, const void*, size_t);
+
 #ifndef SOAP_TYPE_std__string
 #define SOAP_TYPE_std__string (33)
 #endif
@@ -153,7 +165,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_SOAP_ENV__Fault
-#define SOAP_TYPE_SOAP_ENV__Fault (312)
+#define SOAP_TYPE_SOAP_ENV__Fault (314)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
@@ -171,7 +183,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_SOAP_ENV__Reason
-#define SOAP_TYPE_SOAP_ENV__Reason (311)
+#define SOAP_TYPE_SOAP_ENV__Reason (313)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
@@ -189,7 +201,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_SOAP_ENV__Detail
-#define SOAP_TYPE_SOAP_ENV__Detail (308)
+#define SOAP_TYPE_SOAP_ENV__Detail (310)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
@@ -207,7 +219,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_SOAP_ENV__Code
-#define SOAP_TYPE_SOAP_ENV__Code (306)
+#define SOAP_TYPE_SOAP_ENV__Code (308)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
@@ -225,7 +237,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_SOAP_ENV__Header
-#define SOAP_TYPE_SOAP_ENV__Header (305)
+#define SOAP_TYPE_SOAP_ENV__Header (307)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
@@ -241,7 +253,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetChildren
-#define SOAP_TYPE_dss__PropertyGetChildren (304)
+#define SOAP_TYPE_dss__PropertyGetChildren (306)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetChildren(struct soap*, struct dss__PropertyGetChildren *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetChildren(struct soap*, const struct dss__PropertyGetChildren *);
@@ -255,7 +267,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetChildren(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetChildrenResponse
-#define SOAP_TYPE_dss__PropertyGetChildrenResponse (303)
+#define SOAP_TYPE_dss__PropertyGetChildrenResponse (305)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetChildrenResponse(struct soap*, struct dss__PropertyGetChildrenResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetChildrenResponse(struct soap*, const struct dss__PropertyGetChildrenResponse *);
@@ -269,7 +281,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetChildrenResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetBool
-#define SOAP_TYPE_dss__PropertyGetBool (301)
+#define SOAP_TYPE_dss__PropertyGetBool (303)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetBool(struct soap*, struct dss__PropertyGetBool *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetBool(struct soap*, const struct dss__PropertyGetBool *);
@@ -283,7 +295,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetBool(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetBoolResponse
-#define SOAP_TYPE_dss__PropertyGetBoolResponse (300)
+#define SOAP_TYPE_dss__PropertyGetBoolResponse (302)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetBoolResponse(struct soap*, struct dss__PropertyGetBoolResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetBoolResponse(struct soap*, const struct dss__PropertyGetBoolResponse *);
@@ -297,7 +309,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetBoolResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetString
-#define SOAP_TYPE_dss__PropertyGetString (298)
+#define SOAP_TYPE_dss__PropertyGetString (300)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetString(struct soap*, struct dss__PropertyGetString *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetString(struct soap*, const struct dss__PropertyGetString *);
@@ -311,7 +323,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetString(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetStringResponse
-#define SOAP_TYPE_dss__PropertyGetStringResponse (297)
+#define SOAP_TYPE_dss__PropertyGetStringResponse (299)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetStringResponse(struct soap*, struct dss__PropertyGetStringResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetStringResponse(struct soap*, const struct dss__PropertyGetStringResponse *);
@@ -325,7 +337,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetStringResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetInt
-#define SOAP_TYPE_dss__PropertyGetInt (295)
+#define SOAP_TYPE_dss__PropertyGetInt (297)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetInt(struct soap*, struct dss__PropertyGetInt *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetInt(struct soap*, const struct dss__PropertyGetInt *);
@@ -339,7 +351,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetInt(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetIntResponse
-#define SOAP_TYPE_dss__PropertyGetIntResponse (294)
+#define SOAP_TYPE_dss__PropertyGetIntResponse (296)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetIntResponse(struct soap*, struct dss__PropertyGetIntResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetIntResponse(struct soap*, const struct dss__PropertyGetIntResponse *);
@@ -353,7 +365,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetIntResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetBool
-#define SOAP_TYPE_dss__PropertySetBool (292)
+#define SOAP_TYPE_dss__PropertySetBool (294)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetBool(struct soap*, struct dss__PropertySetBool *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetBool(struct soap*, const struct dss__PropertySetBool *);
@@ -367,7 +379,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetBool(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetBoolResponse
-#define SOAP_TYPE_dss__PropertySetBoolResponse (291)
+#define SOAP_TYPE_dss__PropertySetBoolResponse (293)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetBoolResponse(struct soap*, struct dss__PropertySetBoolResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetBoolResponse(struct soap*, const struct dss__PropertySetBoolResponse *);
@@ -381,7 +393,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetBoolResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetString
-#define SOAP_TYPE_dss__PropertySetString (289)
+#define SOAP_TYPE_dss__PropertySetString (291)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetString(struct soap*, struct dss__PropertySetString *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetString(struct soap*, const struct dss__PropertySetString *);
@@ -395,7 +407,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetString(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetStringResponse
-#define SOAP_TYPE_dss__PropertySetStringResponse (288)
+#define SOAP_TYPE_dss__PropertySetStringResponse (290)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetStringResponse(struct soap*, struct dss__PropertySetStringResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetStringResponse(struct soap*, const struct dss__PropertySetStringResponse *);
@@ -409,7 +421,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetStringResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetInt
-#define SOAP_TYPE_dss__PropertySetInt (286)
+#define SOAP_TYPE_dss__PropertySetInt (288)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetInt(struct soap*, struct dss__PropertySetInt *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetInt(struct soap*, const struct dss__PropertySetInt *);
@@ -423,7 +435,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetInt(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertySetIntResponse
-#define SOAP_TYPE_dss__PropertySetIntResponse (285)
+#define SOAP_TYPE_dss__PropertySetIntResponse (287)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertySetIntResponse(struct soap*, struct dss__PropertySetIntResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertySetIntResponse(struct soap*, const struct dss__PropertySetIntResponse *);
@@ -437,7 +449,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertySetIntResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetType
-#define SOAP_TYPE_dss__PropertyGetType (283)
+#define SOAP_TYPE_dss__PropertyGetType (285)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetType(struct soap*, struct dss__PropertyGetType *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetType(struct soap*, const struct dss__PropertyGetType *);
@@ -451,7 +463,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetType(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__PropertyGetTypeResponse
-#define SOAP_TYPE_dss__PropertyGetTypeResponse (282)
+#define SOAP_TYPE_dss__PropertyGetTypeResponse (284)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__PropertyGetTypeResponse(struct soap*, struct dss__PropertyGetTypeResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__PropertyGetTypeResponse(struct soap*, const struct dss__PropertyGetTypeResponse *);
@@ -464,8 +476,64 @@
 SOAP_FMAC3 struct dss__PropertyGetTypeResponse * SOAP_FMAC4 soap_instantiate_dss__PropertyGetTypeResponse(struct soap*, int, const char*, const char*, size_t*);
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__PropertyGetTypeResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
+#ifndef SOAP_TYPE_dss__EventSubscribeTo
+#define SOAP_TYPE_dss__EventSubscribeTo (282)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventSubscribeTo(struct soap*, struct dss__EventSubscribeTo *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventSubscribeTo(struct soap*, const struct dss__EventSubscribeTo *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventSubscribeTo(struct soap*, const struct dss__EventSubscribeTo *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventSubscribeTo(struct soap*, const char*, int, const struct dss__EventSubscribeTo *, const char*);
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_get_dss__EventSubscribeTo(struct soap*, struct dss__EventSubscribeTo *, const char*, const char*);
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_in_dss__EventSubscribeTo(struct soap*, const char*, struct dss__EventSubscribeTo *, const char*);
+SOAP_FMAC5 struct dss__EventSubscribeTo * SOAP_FMAC6 soap_new_dss__EventSubscribeTo(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventSubscribeTo(struct soap*, struct dss__EventSubscribeTo*);
+SOAP_FMAC3 struct dss__EventSubscribeTo * SOAP_FMAC4 soap_instantiate_dss__EventSubscribeTo(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventSubscribeTo(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__EventSubscribeToResponse
+#define SOAP_TYPE_dss__EventSubscribeToResponse (281)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventSubscribeToResponse(struct soap*, struct dss__EventSubscribeToResponse *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventSubscribeToResponse(struct soap*, const struct dss__EventSubscribeToResponse *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventSubscribeToResponse(struct soap*, const struct dss__EventSubscribeToResponse *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventSubscribeToResponse(struct soap*, const char*, int, const struct dss__EventSubscribeToResponse *, const char*);
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_get_dss__EventSubscribeToResponse(struct soap*, struct dss__EventSubscribeToResponse *, const char*, const char*);
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_in_dss__EventSubscribeToResponse(struct soap*, const char*, struct dss__EventSubscribeToResponse *, const char*);
+SOAP_FMAC5 struct dss__EventSubscribeToResponse * SOAP_FMAC6 soap_new_dss__EventSubscribeToResponse(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventSubscribeToResponse(struct soap*, struct dss__EventSubscribeToResponse*);
+SOAP_FMAC3 struct dss__EventSubscribeToResponse * SOAP_FMAC4 soap_instantiate_dss__EventSubscribeToResponse(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventSubscribeToResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__EventWaitFor
+#define SOAP_TYPE_dss__EventWaitFor (279)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventWaitFor(struct soap*, struct dss__EventWaitFor *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventWaitFor(struct soap*, const struct dss__EventWaitFor *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventWaitFor(struct soap*, const struct dss__EventWaitFor *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventWaitFor(struct soap*, const char*, int, const struct dss__EventWaitFor *, const char*);
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_get_dss__EventWaitFor(struct soap*, struct dss__EventWaitFor *, const char*, const char*);
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_in_dss__EventWaitFor(struct soap*, const char*, struct dss__EventWaitFor *, const char*);
+SOAP_FMAC5 struct dss__EventWaitFor * SOAP_FMAC6 soap_new_dss__EventWaitFor(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventWaitFor(struct soap*, struct dss__EventWaitFor*);
+SOAP_FMAC3 struct dss__EventWaitFor * SOAP_FMAC4 soap_instantiate_dss__EventWaitFor(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventWaitFor(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__EventWaitForResponse
+#define SOAP_TYPE_dss__EventWaitForResponse (278)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventWaitForResponse(struct soap*, struct dss__EventWaitForResponse *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventWaitForResponse(struct soap*, const struct dss__EventWaitForResponse *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__EventWaitForResponse(struct soap*, const struct dss__EventWaitForResponse *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__EventWaitForResponse(struct soap*, const char*, int, const struct dss__EventWaitForResponse *, const char*);
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_get_dss__EventWaitForResponse(struct soap*, struct dss__EventWaitForResponse *, const char*, const char*);
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_in_dss__EventWaitForResponse(struct soap*, const char*, struct dss__EventWaitForResponse *, const char*);
+SOAP_FMAC5 struct dss__EventWaitForResponse * SOAP_FMAC6 soap_new_dss__EventWaitForResponse(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__EventWaitForResponse(struct soap*, struct dss__EventWaitForResponse*);
+SOAP_FMAC3 struct dss__EventWaitForResponse * SOAP_FMAC4 soap_instantiate_dss__EventWaitForResponse(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventWaitForResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
+
 #ifndef SOAP_TYPE_dss__EventRaise
-#define SOAP_TYPE_dss__EventRaise (280)
+#define SOAP_TYPE_dss__EventRaise (274)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventRaise(struct soap*, struct dss__EventRaise *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventRaise(struct soap*, const struct dss__EventRaise *);
@@ -479,7 +547,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventRaise(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__EventRaiseResponse
-#define SOAP_TYPE_dss__EventRaiseResponse (279)
+#define SOAP_TYPE_dss__EventRaiseResponse (273)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__EventRaiseResponse(struct soap*, struct dss__EventRaiseResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__EventRaiseResponse(struct soap*, const struct dss__EventRaiseResponse *);
@@ -493,7 +561,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__EventRaiseResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__SwitchGetGroupID
-#define SOAP_TYPE_dss__SwitchGetGroupID (277)
+#define SOAP_TYPE_dss__SwitchGetGroupID (270)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__SwitchGetGroupID(struct soap*, struct dss__SwitchGetGroupID *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__SwitchGetGroupID(struct soap*, const struct dss__SwitchGetGroupID *);
@@ -507,7 +575,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__SwitchGetGroupID(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__SwitchGetGroupIDResponse
-#define SOAP_TYPE_dss__SwitchGetGroupIDResponse (276)
+#define SOAP_TYPE_dss__SwitchGetGroupIDResponse (269)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__SwitchGetGroupIDResponse(struct soap*, struct dss__SwitchGetGroupIDResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__SwitchGetGroupIDResponse(struct soap*, const struct dss__SwitchGetGroupIDResponse *);
@@ -521,7 +589,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__SwitchGetGroupIDResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__DeviceGetFunctionID
-#define SOAP_TYPE_dss__DeviceGetFunctionID (274)
+#define SOAP_TYPE_dss__DeviceGetFunctionID (267)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetFunctionID(struct soap*, struct dss__DeviceGetFunctionID *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceGetFunctionID(struct soap*, const struct dss__DeviceGetFunctionID *);
@@ -535,7 +603,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceGetFunctionID(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__DeviceGetFunctionIDResponse
-#define SOAP_TYPE_dss__DeviceGetFunctionIDResponse (273)
+#define SOAP_TYPE_dss__DeviceGetFunctionIDResponse (266)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetFunctionIDResponse(struct soap*, struct dss__DeviceGetFunctionIDResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceGetFunctionIDResponse(struct soap*, const struct dss__DeviceGetFunctionIDResponse *);
@@ -549,7 +617,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceGetFunctionIDResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupRemoveDevice
-#define SOAP_TYPE_dss__GroupRemoveDevice (271)
+#define SOAP_TYPE_dss__GroupRemoveDevice (264)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupRemoveDevice(struct soap*, struct dss__GroupRemoveDevice *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupRemoveDevice(struct soap*, const struct dss__GroupRemoveDevice *);
@@ -563,7 +631,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupRemoveDevice(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupRemoveDeviceResponse
-#define SOAP_TYPE_dss__GroupRemoveDeviceResponse (270)
+#define SOAP_TYPE_dss__GroupRemoveDeviceResponse (263)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupRemoveDeviceResponse(struct soap*, struct dss__GroupRemoveDeviceResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupRemoveDeviceResponse(struct soap*, const struct dss__GroupRemoveDeviceResponse *);
@@ -577,7 +645,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupRemoveDeviceResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupAddDevice
-#define SOAP_TYPE_dss__GroupAddDevice (268)
+#define SOAP_TYPE_dss__GroupAddDevice (261)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupAddDevice(struct soap*, struct dss__GroupAddDevice *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupAddDevice(struct soap*, const struct dss__GroupAddDevice *);
@@ -591,7 +659,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupAddDevice(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupAddDeviceResponse
-#define SOAP_TYPE_dss__GroupAddDeviceResponse (267)
+#define SOAP_TYPE_dss__GroupAddDeviceResponse (260)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupAddDeviceResponse(struct soap*, struct dss__GroupAddDeviceResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupAddDeviceResponse(struct soap*, const struct dss__GroupAddDeviceResponse *);
@@ -605,7 +673,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupAddDeviceResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupRemoveUserGroup
-#define SOAP_TYPE_dss__GroupRemoveUserGroup (265)
+#define SOAP_TYPE_dss__GroupRemoveUserGroup (258)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupRemoveUserGroup(struct soap*, struct dss__GroupRemoveUserGroup *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupRemoveUserGroup(struct soap*, const struct dss__GroupRemoveUserGroup *);
@@ -619,7 +687,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupRemoveUserGroup(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__GroupRemoveUserGroupResponse
-#define SOAP_TYPE_dss__GroupRemoveUserGroupResponse (264)
+#define SOAP_TYPE_dss__GroupRemoveUserGroupResponse (257)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__GroupRemoveUserGroupResponse(struct soap*, struct dss__GroupRemoveUserGroupResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__GroupRemoveUserGroupResponse(struct soap*, const struct dss__GroupRemoveUserGroupResponse *);
@@ -633,7 +701,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__GroupRemoveUserGroupResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateUserGroup
-#define SOAP_TYPE_dss__ApartmentAllocateUserGroup (262)
+#define SOAP_TYPE_dss__ApartmentAllocateUserGroup (255)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentAllocateUserGroup(struct soap*, struct dss__ApartmentAllocateUserGroup *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentAllocateUserGroup(struct soap*, const struct dss__ApartmentAllocateUserGroup *);
@@ -647,7 +715,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateUserGroup(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse
-#define SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse (261)
+#define SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse (254)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentAllocateUserGroupResponse(struct soap*, struct dss__ApartmentAllocateUserGroupResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentAllocateUserGroupResponse(struct soap*, const struct dss__ApartmentAllocateUserGroupResponse *);
@@ -661,7 +729,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateUserGroupResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_SetName
-#define SOAP_TYPE_dss__Zone_SetName (259)
+#define SOAP_TYPE_dss__Zone_SetName (252)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_SetName(struct soap*, struct dss__Zone_SetName *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_SetName(struct soap*, const struct dss__Zone_SetName *);
@@ -675,7 +743,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_SetName(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_SetNameResponse
-#define SOAP_TYPE_dss__Zone_SetNameResponse (258)
+#define SOAP_TYPE_dss__Zone_SetNameResponse (251)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_SetNameResponse(struct soap*, struct dss__Zone_SetNameResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_SetNameResponse(struct soap*, const struct dss__Zone_SetNameResponse *);
@@ -689,7 +757,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_SetNameResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_RemoveDevice
-#define SOAP_TYPE_dss__Zone_RemoveDevice (256)
+#define SOAP_TYPE_dss__Zone_RemoveDevice (249)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_RemoveDevice(struct soap*, struct dss__Zone_RemoveDevice *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_RemoveDevice(struct soap*, const struct dss__Zone_RemoveDevice *);
@@ -703,7 +771,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_RemoveDevice(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_RemoveDeviceResponse
-#define SOAP_TYPE_dss__Zone_RemoveDeviceResponse (255)
+#define SOAP_TYPE_dss__Zone_RemoveDeviceResponse (248)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_RemoveDeviceResponse(struct soap*, struct dss__Zone_RemoveDeviceResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_RemoveDeviceResponse(struct soap*, const struct dss__Zone_RemoveDeviceResponse *);
@@ -717,7 +785,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_RemoveDeviceResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_AddDevice
-#define SOAP_TYPE_dss__Zone_AddDevice (253)
+#define SOAP_TYPE_dss__Zone_AddDevice (246)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_AddDevice(struct soap*, struct dss__Zone_AddDevice *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_AddDevice(struct soap*, const struct dss__Zone_AddDevice *);
@@ -731,7 +799,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_AddDevice(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__Zone_AddDeviceResponse
-#define SOAP_TYPE_dss__Zone_AddDeviceResponse (252)
+#define SOAP_TYPE_dss__Zone_AddDeviceResponse (245)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__Zone_AddDeviceResponse(struct soap*, struct dss__Zone_AddDeviceResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__Zone_AddDeviceResponse(struct soap*, const struct dss__Zone_AddDeviceResponse *);
@@ -745,7 +813,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__Zone_AddDeviceResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentDeleteZone
-#define SOAP_TYPE_dss__ApartmentDeleteZone (250)
+#define SOAP_TYPE_dss__ApartmentDeleteZone (243)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentDeleteZone(struct soap*, struct dss__ApartmentDeleteZone *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentDeleteZone(struct soap*, const struct dss__ApartmentDeleteZone *);
@@ -759,7 +827,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentDeleteZone(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentDeleteZoneResponse
-#define SOAP_TYPE_dss__ApartmentDeleteZoneResponse (249)
+#define SOAP_TYPE_dss__ApartmentDeleteZoneResponse (242)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentDeleteZoneResponse(struct soap*, struct dss__ApartmentDeleteZoneResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentDeleteZoneResponse(struct soap*, const struct dss__ApartmentDeleteZoneResponse *);
@@ -773,7 +841,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentDeleteZoneResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateZone
-#define SOAP_TYPE_dss__ApartmentAllocateZone (247)
+#define SOAP_TYPE_dss__ApartmentAllocateZone (240)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentAllocateZone(struct soap*, struct dss__ApartmentAllocateZone *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentAllocateZone(struct soap*, const struct dss__ApartmentAllocateZone *);
@@ -787,7 +855,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateZone(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateZoneResponse
-#define SOAP_TYPE_dss__ApartmentAllocateZoneResponse (246)
+#define SOAP_TYPE_dss__ApartmentAllocateZoneResponse (239)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentAllocateZoneResponse(struct soap*, struct dss__ApartmentAllocateZoneResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentAllocateZoneResponse(struct soap*, const struct dss__ApartmentAllocateZoneResponse *);
@@ -801,7 +869,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateZoneResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ModulatorGetName
-#define SOAP_TYPE_dss__ModulatorGetName (244)
+#define SOAP_TYPE_dss__ModulatorGetName (237)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetName(struct soap*, struct dss__ModulatorGetName *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetName(struct soap*, const struct dss__ModulatorGetName *);
@@ -815,7 +883,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetName(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ModulatorGetNameResponse
-#define SOAP_TYPE_dss__ModulatorGetNameResponse (243)
+#define SOAP_TYPE_dss__ModulatorGetNameResponse (236)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetNameResponse(struct soap*, struct dss__ModulatorGetNameResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetNameResponse(struct soap*, const struct dss__ModulatorGetNameResponse *);
@@ -829,7 +897,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetNameResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDs
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (241)
+#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (234)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDs(struct soap*, struct dss__ApartmentGetModulatorIDs *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDs(struct soap*, const struct dss__ApartmentGetModulatorIDs *);
@@ -843,7 +911,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDs(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (240)
+#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (233)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDsResponse(struct soap*, struct dss__ApartmentGetModulatorIDsResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDsResponse(struct soap*, const struct dss__ApartmentGetModulatorIDsResponse *);
@@ -857,7 +925,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDsResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumption
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (238)
+#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (231)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumption(struct soap*, struct dss__ModulatorGetPowerConsumption *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumption(struct soap*, const struct dss__ModulatorGetPowerConsumption *);
@@ -871,7 +939,7 @@
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumption(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (237)
+#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (230)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumptionResponse(struct soap*, struct dss__ModulatorGetPowerConsumptionResponse *);
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumptionResponse(struct soap*, const struct dss__ModulatorGetPowerConsumptionResponse *);
@@ -884,62 +952,6 @@
 SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(struct soap*, int, const char*, const char*, size_t*);
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumptionResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
-#ifndef SOAP_TYPE_dss__DeviceGetLocation
-#define SOAP_TYPE_dss__DeviceGetLocation (234)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetLocation(struct soap*, struct dss__DeviceGetLocation *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceGetLocation(struct soap*, const struct dss__DeviceGetLocation *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceGetLocation(struct soap*, const struct dss__DeviceGetLocation *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceGetLocation(struct soap*, const char*, int, const struct dss__DeviceGetLocation *, const char*);
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_get_dss__DeviceGetLocation(struct soap*, struct dss__DeviceGetLocation *, const char*, const char*);
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_in_dss__DeviceGetLocation(struct soap*, const char*, struct dss__DeviceGetLocation *, const char*);
-SOAP_FMAC5 struct dss__DeviceGetLocation * SOAP_FMAC6 soap_new_dss__DeviceGetLocation(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceGetLocation(struct soap*, struct dss__DeviceGetLocation*);
-SOAP_FMAC3 struct dss__DeviceGetLocation * SOAP_FMAC4 soap_instantiate_dss__DeviceGetLocation(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceGetLocation(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__DeviceSetLocation
-#define SOAP_TYPE_dss__DeviceSetLocation (231)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceSetLocation(struct soap*, struct dss__DeviceSetLocation *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceSetLocation(struct soap*, const struct dss__DeviceSetLocation *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceSetLocation(struct soap*, const struct dss__DeviceSetLocation *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceSetLocation(struct soap*, const char*, int, const struct dss__DeviceSetLocation *, const char*);
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_get_dss__DeviceSetLocation(struct soap*, struct dss__DeviceSetLocation *, const char*, const char*);
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_in_dss__DeviceSetLocation(struct soap*, const char*, struct dss__DeviceSetLocation *, const char*);
-SOAP_FMAC5 struct dss__DeviceSetLocation * SOAP_FMAC6 soap_new_dss__DeviceSetLocation(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceSetLocation(struct soap*, struct dss__DeviceSetLocation*);
-SOAP_FMAC3 struct dss__DeviceSetLocation * SOAP_FMAC4 soap_instantiate_dss__DeviceSetLocation(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceSetLocation(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__DeviceSetLocationResponse
-#define SOAP_TYPE_dss__DeviceSetLocationResponse (230)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceSetLocationResponse(struct soap*, struct dss__DeviceSetLocationResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DeviceSetLocationResponse(struct soap*, const struct dss__DeviceSetLocationResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DeviceSetLocationResponse(struct soap*, const struct dss__DeviceSetLocationResponse *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DeviceSetLocationResponse(struct soap*, const char*, int, const struct dss__DeviceSetLocationResponse *, const char*);
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_get_dss__DeviceSetLocationResponse(struct soap*, struct dss__DeviceSetLocationResponse *, const char*, const char*);
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_in_dss__DeviceSetLocationResponse(struct soap*, const char*, struct dss__DeviceSetLocationResponse *, const char*);
-SOAP_FMAC5 struct dss__DeviceSetLocationResponse * SOAP_FMAC6 soap_new_dss__DeviceSetLocationResponse(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DeviceSetLocationResponse(struct soap*, struct dss__DeviceSetLocationResponse*);
-SOAP_FMAC3 struct dss__DeviceSetLocationResponse * SOAP_FMAC4 soap_instantiate_dss__DeviceSetLocationResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DeviceSetLocationResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_DeviceLocation
-#define SOAP_TYPE_DeviceLocation (228)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_DeviceLocation(struct soap*, struct DeviceLocation *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_DeviceLocation(struct soap*, const struct DeviceLocation *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_DeviceLocation(struct soap*, const struct DeviceLocation *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_DeviceLocation(struct soap*, const char*, int, const struct DeviceLocation *, const char*);
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_get_DeviceLocation(struct soap*, struct DeviceLocation *, const char*, const char*);
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_in_DeviceLocation(struct soap*, const char*, struct DeviceLocation *, const char*);
-SOAP_FMAC5 struct DeviceLocation * SOAP_FMAC6 soap_new_DeviceLocation(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_DeviceLocation(struct soap*, struct DeviceLocation*);
-SOAP_FMAC3 struct DeviceLocation * SOAP_FMAC4 soap_instantiate_DeviceLocation(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_DeviceLocation(struct soap*, int, int, void*, size_t, const void*, size_t);
-
 #ifndef SOAP_TYPE_dss__DeviceGetZoneID
 #define SOAP_TYPE_dss__DeviceGetZoneID (227)
 #endif
@@ -2791,7 +2803,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_PointerToSOAP_ENV__Reason (314)
+#define SOAP_TYPE_PointerToSOAP_ENV__Reason (316)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
 SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
@@ -2804,7 +2816,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_PointerToSOAP_ENV__Detail (313)
+#define SOAP_TYPE_PointerToSOAP_ENV__Detail (315)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
 SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
@@ -2817,7 +2829,7 @@
 #ifndef WITH_NOGLOBAL
 
 #ifndef SOAP_TYPE_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_PointerToSOAP_ENV__Code (307)
+#define SOAP_TYPE_PointerToSOAP_ENV__Code (309)
 #endif
 SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
 SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
@@ -2856,6 +2868,18 @@
 SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
 SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
 
+#ifndef SOAP_TYPE_std__vectorTemplateOfdss__Event
+#define SOAP_TYPE_std__vectorTemplateOfdss__Event (275)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfdss__Event(struct soap*, std::vector<dss__Event >*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfdss__Event(struct soap*, const std::vector<dss__Event >*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfdss__Event(struct soap*, const char*, int, const std::vector<dss__Event >*, const char*);
+SOAP_FMAC3 std::vector<dss__Event >* SOAP_FMAC4 soap_in_std__vectorTemplateOfdss__Event(struct soap*, const char*, std::vector<dss__Event >*, const char*);
+SOAP_FMAC5 std::vector<dss__Event > * SOAP_FMAC6 soap_new_std__vectorTemplateOfdss__Event(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_std__vectorTemplateOfdss__Event(struct soap*, std::vector<dss__Event >*);
+SOAP_FMAC3 std::vector<dss__Event > * SOAP_FMAC4 soap_instantiate_std__vectorTemplateOfdss__Event(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfdss__Event(struct soap*, int, int, void*, size_t, const void*, size_t);
+
 #ifndef SOAP_TYPE_std__vectorTemplateOfint
 #define SOAP_TYPE_std__vectorTemplateOfint (79)
 #endif

Modified: dss/trunk/webservices/soapServer.cpp
===================================================================
--- dss/trunk/webservices/soapServer.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/soapServer.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -6,7 +6,7 @@
 */
 #include "soapH.h"
 
-SOAP_SOURCE_STAMP("@(#) soapServer.cpp ver 2.7.10 2009-06-08 14:45:47 GMT")
+SOAP_SOURCE_STAMP("@(#) soapServer.cpp ver 2.7.10 2009-09-22 13:48:12 GMT")
 
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap *soap)
@@ -235,6 +235,10 @@
 		return soap_serve_dss__SwitchGetGroupID(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:EventRaise"))
 		return soap_serve_dss__EventRaise(soap);
+	if (!soap_match_tag(soap, soap->tag, "dss:EventWaitFor"))
+		return soap_serve_dss__EventWaitFor(soap);
+	if (!soap_match_tag(soap, soap->tag, "dss:EventSubscribeTo"))
+		return soap_serve_dss__EventSubscribeTo(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:PropertyGetType"))
 		return soap_serve_dss__PropertyGetType(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:PropertySetInt"))
@@ -2964,7 +2968,6 @@
 	return soap_closesock(soap);
 }
 
-
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct soap *soap)
 {	struct dss__ModulatorGetPowerConsumption soap_tmp_dss__ModulatorGetPowerConsumption;
 	struct dss__ModulatorGetPowerConsumptionResponse soap_tmp_dss__ModulatorGetPowerConsumptionResponse;
@@ -3580,6 +3583,88 @@
 	return soap_closesock(soap);
 }
 
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__EventWaitFor(struct soap *soap)
+{	struct dss__EventWaitFor soap_tmp_dss__EventWaitFor;
+	struct dss__EventWaitForResponse soap_tmp_dss__EventWaitForResponse;
+	soap_default_dss__EventWaitForResponse(soap, &soap_tmp_dss__EventWaitForResponse);
+	soap_default_dss__EventWaitFor(soap, &soap_tmp_dss__EventWaitFor);
+	soap->encodingStyle = NULL;
+	if (!soap_get_dss__EventWaitFor(soap, &soap_tmp_dss__EventWaitFor, "dss:EventWaitFor", NULL))
+		return soap->error;
+	if (soap_body_end_in(soap)
+	 || soap_envelope_end_in(soap)
+	 || soap_end_recv(soap))
+		return soap->error;
+	soap->error = dss__EventWaitFor(soap, soap_tmp_dss__EventWaitFor._token, soap_tmp_dss__EventWaitFor._timeout, soap_tmp_dss__EventWaitForResponse.result);
+	if (soap->error)
+		return soap->error;
+	soap_serializeheader(soap);
+	soap_serialize_dss__EventWaitForResponse(soap, &soap_tmp_dss__EventWaitForResponse);
+	if (soap_begin_count(soap))
+		return soap->error;
+	if (soap->mode & SOAP_IO_LENGTH)
+	{	if (soap_envelope_begin_out(soap)
+		 || soap_putheader(soap)
+		 || soap_body_begin_out(soap)
+		 || soap_put_dss__EventWaitForResponse(soap, &soap_tmp_dss__EventWaitForResponse, "dss:EventWaitForResponse", "")
+		 || soap_body_end_out(soap)
+		 || soap_envelope_end_out(soap))
+			 return soap->error;
+	};
+	if (soap_end_count(soap)
+	 || soap_response(soap, SOAP_OK)
+	 || soap_envelope_begin_out(soap)
+	 || soap_putheader(soap)
+	 || soap_body_begin_out(soap)
+	 || soap_put_dss__EventWaitForResponse(soap, &soap_tmp_dss__EventWaitForResponse, "dss:EventWaitForResponse", "")
+	 || soap_body_end_out(soap)
+	 || soap_envelope_end_out(soap)
+	 || soap_end_send(soap))
+		return soap->error;
+	return soap_closesock(soap);
+}
+
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__EventSubscribeTo(struct soap *soap)
+{	struct dss__EventSubscribeTo soap_tmp_dss__EventSubscribeTo;
+	struct dss__EventSubscribeToResponse soap_tmp_dss__EventSubscribeToResponse;
+	soap_default_dss__EventSubscribeToResponse(soap, &soap_tmp_dss__EventSubscribeToResponse);
+	soap_default_dss__EventSubscribeTo(soap, &soap_tmp_dss__EventSubscribeTo);
+	soap->encodingStyle = NULL;
+	if (!soap_get_dss__EventSubscribeTo(soap, &soap_tmp_dss__EventSubscribeTo, "dss:EventSubscribeTo", NULL))
+		return soap->error;
+	if (soap_body_end_in(soap)
+	 || soap_envelope_end_in(soap)
+	 || soap_end_recv(soap))
+		return soap->error;
+	soap->error = dss__EventSubscribeTo(soap, soap_tmp_dss__EventSubscribeTo._token, soap_tmp_dss__EventSubscribeTo._name, soap_tmp_dss__EventSubscribeToResponse.result);
+	if (soap->error)
+		return soap->error;
+	soap_serializeheader(soap);
+	soap_serialize_dss__EventSubscribeToResponse(soap, &soap_tmp_dss__EventSubscribeToResponse);
+	if (soap_begin_count(soap))
+		return soap->error;
+	if (soap->mode & SOAP_IO_LENGTH)
+	{	if (soap_envelope_begin_out(soap)
+		 || soap_putheader(soap)
+		 || soap_body_begin_out(soap)
+		 || soap_put_dss__EventSubscribeToResponse(soap, &soap_tmp_dss__EventSubscribeToResponse, "dss:EventSubscribeToResponse", "")
+		 || soap_body_end_out(soap)
+		 || soap_envelope_end_out(soap))
+			 return soap->error;
+	};
+	if (soap_end_count(soap)
+	 || soap_response(soap, SOAP_OK)
+	 || soap_envelope_begin_out(soap)
+	 || soap_putheader(soap)
+	 || soap_body_begin_out(soap)
+	 || soap_put_dss__EventSubscribeToResponse(soap, &soap_tmp_dss__EventSubscribeToResponse, "dss:EventSubscribeToResponse", "")
+	 || soap_body_end_out(soap)
+	 || soap_envelope_end_out(soap)
+	 || soap_end_send(soap))
+		return soap->error;
+	return soap_closesock(soap);
+}
+
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__PropertyGetType(struct soap *soap)
 {	struct dss__PropertyGetType soap_tmp_dss__PropertyGetType;
 	struct dss__PropertyGetTypeResponse soap_tmp_dss__PropertyGetTypeResponse;

Modified: dss/trunk/webservices/soapStub.h
===================================================================
--- dss/trunk/webservices/soapStub.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/soapStub.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -1471,53 +1471,8 @@
 };
 #endif
 
-#ifndef SOAP_TYPE_DeviceLocation
-#define SOAP_TYPE_DeviceLocation (228)
-/* DeviceLocation */
-struct DeviceLocation
-{
-public:
-	double x;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:double */
-	double y;	/* required element of type xsd:double */
-	double z;	/* required element of type xsd:double */
-};
-#endif
-
-#ifndef SOAP_TYPE_dss__DeviceSetLocationResponse
-#define SOAP_TYPE_dss__DeviceSetLocationResponse (230)
-/* dss:DeviceSetLocationResponse */
-struct dss__DeviceSetLocationResponse
-{
-public:
-	bool result;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:boolean */
-};
-#endif
-
-#ifndef SOAP_TYPE_dss__DeviceSetLocation
-#define SOAP_TYPE_dss__DeviceSetLocation (231)
-/* dss:DeviceSetLocation */
-struct dss__DeviceSetLocation
-{
-public:
-	int _token;	/* required element of type xsd:int */
-	char *_deviceID;	/* optional element of type xsd:string */
-	struct DeviceLocation _location;	/* required element of type DeviceLocation */
-};
-#endif
-
-#ifndef SOAP_TYPE_dss__DeviceGetLocation
-#define SOAP_TYPE_dss__DeviceGetLocation (234)
-/* dss:DeviceGetLocation */
-struct dss__DeviceGetLocation
-{
-public:
-	int _token;	/* required element of type xsd:int */
-	char *_deviceID;	/* optional element of type xsd:string */
-};
-#endif
-
 #ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (237)
+#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (230)
 /* dss:ModulatorGetPowerConsumptionResponse */
 struct dss__ModulatorGetPowerConsumptionResponse
 {
@@ -1527,7 +1482,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumption
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (238)
+#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (231)
 /* dss:ModulatorGetPowerConsumption */
 struct dss__ModulatorGetPowerConsumption
 {
@@ -1538,7 +1493,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (240)
+#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (233)
 /* dss:ApartmentGetModulatorIDsResponse */
 struct dss__ApartmentGetModulatorIDsResponse
 {
@@ -1548,7 +1503,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDs
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (241)
+#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (234)
 /* dss:ApartmentGetModulatorIDs */
 struct dss__ApartmentGetModulatorIDs
 {
@@ -1558,7 +1513,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ModulatorGetNameResponse
-#define SOAP_TYPE_dss__ModulatorGetNameResponse (243)
+#define SOAP_TYPE_dss__ModulatorGetNameResponse (236)
 /* dss:ModulatorGetNameResponse */
 struct dss__ModulatorGetNameResponse
 {
@@ -1568,7 +1523,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ModulatorGetName
-#define SOAP_TYPE_dss__ModulatorGetName (244)
+#define SOAP_TYPE_dss__ModulatorGetName (237)
 /* dss:ModulatorGetName */
 struct dss__ModulatorGetName
 {
@@ -1579,7 +1534,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateZoneResponse
-#define SOAP_TYPE_dss__ApartmentAllocateZoneResponse (246)
+#define SOAP_TYPE_dss__ApartmentAllocateZoneResponse (239)
 /* dss:ApartmentAllocateZoneResponse */
 struct dss__ApartmentAllocateZoneResponse
 {
@@ -1589,7 +1544,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateZone
-#define SOAP_TYPE_dss__ApartmentAllocateZone (247)
+#define SOAP_TYPE_dss__ApartmentAllocateZone (240)
 /* dss:ApartmentAllocateZone */
 struct dss__ApartmentAllocateZone
 {
@@ -1599,7 +1554,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentDeleteZoneResponse
-#define SOAP_TYPE_dss__ApartmentDeleteZoneResponse (249)
+#define SOAP_TYPE_dss__ApartmentDeleteZoneResponse (242)
 /* dss:ApartmentDeleteZoneResponse */
 struct dss__ApartmentDeleteZoneResponse
 {
@@ -1609,7 +1564,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentDeleteZone
-#define SOAP_TYPE_dss__ApartmentDeleteZone (250)
+#define SOAP_TYPE_dss__ApartmentDeleteZone (243)
 /* dss:ApartmentDeleteZone */
 struct dss__ApartmentDeleteZone
 {
@@ -1620,7 +1575,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_AddDeviceResponse
-#define SOAP_TYPE_dss__Zone_AddDeviceResponse (252)
+#define SOAP_TYPE_dss__Zone_AddDeviceResponse (245)
 /* dss:Zone-AddDeviceResponse */
 struct dss__Zone_AddDeviceResponse
 {
@@ -1630,7 +1585,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_AddDevice
-#define SOAP_TYPE_dss__Zone_AddDevice (253)
+#define SOAP_TYPE_dss__Zone_AddDevice (246)
 /* dss:Zone-AddDevice */
 struct dss__Zone_AddDevice
 {
@@ -1642,7 +1597,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_RemoveDeviceResponse
-#define SOAP_TYPE_dss__Zone_RemoveDeviceResponse (255)
+#define SOAP_TYPE_dss__Zone_RemoveDeviceResponse (248)
 /* dss:Zone-RemoveDeviceResponse */
 struct dss__Zone_RemoveDeviceResponse
 {
@@ -1652,7 +1607,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_RemoveDevice
-#define SOAP_TYPE_dss__Zone_RemoveDevice (256)
+#define SOAP_TYPE_dss__Zone_RemoveDevice (249)
 /* dss:Zone-RemoveDevice */
 struct dss__Zone_RemoveDevice
 {
@@ -1664,7 +1619,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_SetNameResponse
-#define SOAP_TYPE_dss__Zone_SetNameResponse (258)
+#define SOAP_TYPE_dss__Zone_SetNameResponse (251)
 /* dss:Zone-SetNameResponse */
 struct dss__Zone_SetNameResponse
 {
@@ -1674,7 +1629,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__Zone_SetName
-#define SOAP_TYPE_dss__Zone_SetName (259)
+#define SOAP_TYPE_dss__Zone_SetName (252)
 /* dss:Zone-SetName */
 struct dss__Zone_SetName
 {
@@ -1686,7 +1641,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse
-#define SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse (261)
+#define SOAP_TYPE_dss__ApartmentAllocateUserGroupResponse (254)
 /* dss:ApartmentAllocateUserGroupResponse */
 struct dss__ApartmentAllocateUserGroupResponse
 {
@@ -1696,7 +1651,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__ApartmentAllocateUserGroup
-#define SOAP_TYPE_dss__ApartmentAllocateUserGroup (262)
+#define SOAP_TYPE_dss__ApartmentAllocateUserGroup (255)
 /* dss:ApartmentAllocateUserGroup */
 struct dss__ApartmentAllocateUserGroup
 {
@@ -1706,7 +1661,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupRemoveUserGroupResponse
-#define SOAP_TYPE_dss__GroupRemoveUserGroupResponse (264)
+#define SOAP_TYPE_dss__GroupRemoveUserGroupResponse (257)
 /* dss:GroupRemoveUserGroupResponse */
 struct dss__GroupRemoveUserGroupResponse
 {
@@ -1716,7 +1671,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupRemoveUserGroup
-#define SOAP_TYPE_dss__GroupRemoveUserGroup (265)
+#define SOAP_TYPE_dss__GroupRemoveUserGroup (258)
 /* dss:GroupRemoveUserGroup */
 struct dss__GroupRemoveUserGroup
 {
@@ -1727,7 +1682,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupAddDeviceResponse
-#define SOAP_TYPE_dss__GroupAddDeviceResponse (267)
+#define SOAP_TYPE_dss__GroupAddDeviceResponse (260)
 /* dss:GroupAddDeviceResponse */
 struct dss__GroupAddDeviceResponse
 {
@@ -1737,7 +1692,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupAddDevice
-#define SOAP_TYPE_dss__GroupAddDevice (268)
+#define SOAP_TYPE_dss__GroupAddDevice (261)
 /* dss:GroupAddDevice */
 struct dss__GroupAddDevice
 {
@@ -1749,7 +1704,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupRemoveDeviceResponse
-#define SOAP_TYPE_dss__GroupRemoveDeviceResponse (270)
+#define SOAP_TYPE_dss__GroupRemoveDeviceResponse (263)
 /* dss:GroupRemoveDeviceResponse */
 struct dss__GroupRemoveDeviceResponse
 {
@@ -1759,7 +1714,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__GroupRemoveDevice
-#define SOAP_TYPE_dss__GroupRemoveDevice (271)
+#define SOAP_TYPE_dss__GroupRemoveDevice (264)
 /* dss:GroupRemoveDevice */
 struct dss__GroupRemoveDevice
 {
@@ -1771,7 +1726,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__DeviceGetFunctionIDResponse
-#define SOAP_TYPE_dss__DeviceGetFunctionIDResponse (273)
+#define SOAP_TYPE_dss__DeviceGetFunctionIDResponse (266)
 /* dss:DeviceGetFunctionIDResponse */
 struct dss__DeviceGetFunctionIDResponse
 {
@@ -1781,7 +1736,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__DeviceGetFunctionID
-#define SOAP_TYPE_dss__DeviceGetFunctionID (274)
+#define SOAP_TYPE_dss__DeviceGetFunctionID (267)
 /* dss:DeviceGetFunctionID */
 struct dss__DeviceGetFunctionID
 {
@@ -1792,7 +1747,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__SwitchGetGroupIDResponse
-#define SOAP_TYPE_dss__SwitchGetGroupIDResponse (276)
+#define SOAP_TYPE_dss__SwitchGetGroupIDResponse (269)
 /* dss:SwitchGetGroupIDResponse */
 struct dss__SwitchGetGroupIDResponse
 {
@@ -1802,7 +1757,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__SwitchGetGroupID
-#define SOAP_TYPE_dss__SwitchGetGroupID (277)
+#define SOAP_TYPE_dss__SwitchGetGroupID (270)
 /* dss:SwitchGetGroupID */
 struct dss__SwitchGetGroupID
 {
@@ -1812,8 +1767,29 @@
 };
 #endif
 
+#ifndef SOAP_TYPE_dss__Event
+#define SOAP_TYPE_dss__Event (271)
+/* dss:Event */
+class SOAP_CMAC dss__Event
+{
+public:
+	std::string name;	/* required element of type xsd:string */
+	std::vector<std::string >parameter;	/* optional element of type xsd:string */
+public:
+	virtual int soap_type() const { return 271; } /* = unique id SOAP_TYPE_dss__Event */
+	virtual void soap_default(struct soap*);
+	virtual void soap_serialize(struct soap*) const;
+	virtual int soap_put(struct soap*, const char*, const char*) const;
+	virtual int soap_out(struct soap*, const char*, int, const char*) const;
+	virtual void *soap_get(struct soap*, const char*, const char*);
+	virtual void *soap_in(struct soap*, const char*, const char*);
+	         dss__Event()  { }
+	virtual ~dss__Event() { }
+};
+#endif
+
 #ifndef SOAP_TYPE_dss__EventRaiseResponse
-#define SOAP_TYPE_dss__EventRaiseResponse (279)
+#define SOAP_TYPE_dss__EventRaiseResponse (273)
 /* dss:EventRaiseResponse */
 struct dss__EventRaiseResponse
 {
@@ -1823,7 +1799,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__EventRaise
-#define SOAP_TYPE_dss__EventRaise (280)
+#define SOAP_TYPE_dss__EventRaise (274)
 /* dss:EventRaise */
 struct dss__EventRaise
 {
@@ -1836,8 +1812,50 @@
 };
 #endif
 
+#ifndef SOAP_TYPE_dss__EventWaitForResponse
+#define SOAP_TYPE_dss__EventWaitForResponse (278)
+/* dss:EventWaitForResponse */
+struct dss__EventWaitForResponse
+{
+public:
+	std::vector<dss__Event >result;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type dss:Event */
+};
+#endif
+
+#ifndef SOAP_TYPE_dss__EventWaitFor
+#define SOAP_TYPE_dss__EventWaitFor (279)
+/* dss:EventWaitFor */
+struct dss__EventWaitFor
+{
+public:
+	int _token;	/* required element of type xsd:int */
+	int _timeout;	/* required element of type xsd:int */
+};
+#endif
+
+#ifndef SOAP_TYPE_dss__EventSubscribeToResponse
+#define SOAP_TYPE_dss__EventSubscribeToResponse (281)
+/* dss:EventSubscribeToResponse */
+struct dss__EventSubscribeToResponse
+{
+public:
+	std::string result;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:string */
+};
+#endif
+
+#ifndef SOAP_TYPE_dss__EventSubscribeTo
+#define SOAP_TYPE_dss__EventSubscribeTo (282)
+/* dss:EventSubscribeTo */
+struct dss__EventSubscribeTo
+{
+public:
+	int _token;	/* required element of type xsd:int */
+	std::string _name;	/* required element of type xsd:string */
+};
+#endif
+
 #ifndef SOAP_TYPE_dss__PropertyGetTypeResponse
-#define SOAP_TYPE_dss__PropertyGetTypeResponse (282)
+#define SOAP_TYPE_dss__PropertyGetTypeResponse (284)
 /* dss:PropertyGetTypeResponse */
 struct dss__PropertyGetTypeResponse
 {
@@ -1847,7 +1865,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetType
-#define SOAP_TYPE_dss__PropertyGetType (283)
+#define SOAP_TYPE_dss__PropertyGetType (285)
 /* dss:PropertyGetType */
 struct dss__PropertyGetType
 {
@@ -1858,7 +1876,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetIntResponse
-#define SOAP_TYPE_dss__PropertySetIntResponse (285)
+#define SOAP_TYPE_dss__PropertySetIntResponse (287)
 /* dss:PropertySetIntResponse */
 struct dss__PropertySetIntResponse
 {
@@ -1868,7 +1886,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetInt
-#define SOAP_TYPE_dss__PropertySetInt (286)
+#define SOAP_TYPE_dss__PropertySetInt (288)
 /* dss:PropertySetInt */
 struct dss__PropertySetInt
 {
@@ -1881,7 +1899,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetStringResponse
-#define SOAP_TYPE_dss__PropertySetStringResponse (288)
+#define SOAP_TYPE_dss__PropertySetStringResponse (290)
 /* dss:PropertySetStringResponse */
 struct dss__PropertySetStringResponse
 {
@@ -1891,7 +1909,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetString
-#define SOAP_TYPE_dss__PropertySetString (289)
+#define SOAP_TYPE_dss__PropertySetString (291)
 /* dss:PropertySetString */
 struct dss__PropertySetString
 {
@@ -1904,7 +1922,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetBoolResponse
-#define SOAP_TYPE_dss__PropertySetBoolResponse (291)
+#define SOAP_TYPE_dss__PropertySetBoolResponse (293)
 /* dss:PropertySetBoolResponse */
 struct dss__PropertySetBoolResponse
 {
@@ -1914,7 +1932,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertySetBool
-#define SOAP_TYPE_dss__PropertySetBool (292)
+#define SOAP_TYPE_dss__PropertySetBool (294)
 /* dss:PropertySetBool */
 struct dss__PropertySetBool
 {
@@ -1927,7 +1945,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetIntResponse
-#define SOAP_TYPE_dss__PropertyGetIntResponse (294)
+#define SOAP_TYPE_dss__PropertyGetIntResponse (296)
 /* dss:PropertyGetIntResponse */
 struct dss__PropertyGetIntResponse
 {
@@ -1937,7 +1955,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetInt
-#define SOAP_TYPE_dss__PropertyGetInt (295)
+#define SOAP_TYPE_dss__PropertyGetInt (297)
 /* dss:PropertyGetInt */
 struct dss__PropertyGetInt
 {
@@ -1948,7 +1966,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetStringResponse
-#define SOAP_TYPE_dss__PropertyGetStringResponse (297)
+#define SOAP_TYPE_dss__PropertyGetStringResponse (299)
 /* dss:PropertyGetStringResponse */
 struct dss__PropertyGetStringResponse
 {
@@ -1958,7 +1976,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetString
-#define SOAP_TYPE_dss__PropertyGetString (298)
+#define SOAP_TYPE_dss__PropertyGetString (300)
 /* dss:PropertyGetString */
 struct dss__PropertyGetString
 {
@@ -1969,7 +1987,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetBoolResponse
-#define SOAP_TYPE_dss__PropertyGetBoolResponse (300)
+#define SOAP_TYPE_dss__PropertyGetBoolResponse (302)
 /* dss:PropertyGetBoolResponse */
 struct dss__PropertyGetBoolResponse
 {
@@ -1979,7 +1997,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetBool
-#define SOAP_TYPE_dss__PropertyGetBool (301)
+#define SOAP_TYPE_dss__PropertyGetBool (303)
 /* dss:PropertyGetBool */
 struct dss__PropertyGetBool
 {
@@ -1990,7 +2008,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetChildrenResponse
-#define SOAP_TYPE_dss__PropertyGetChildrenResponse (303)
+#define SOAP_TYPE_dss__PropertyGetChildrenResponse (305)
 /* dss:PropertyGetChildrenResponse */
 struct dss__PropertyGetChildrenResponse
 {
@@ -2000,7 +2018,7 @@
 #endif
 
 #ifndef SOAP_TYPE_dss__PropertyGetChildren
-#define SOAP_TYPE_dss__PropertyGetChildren (304)
+#define SOAP_TYPE_dss__PropertyGetChildren (306)
 /* dss:PropertyGetChildren */
 struct dss__PropertyGetChildren
 {
@@ -2011,7 +2029,7 @@
 #endif
 
 #ifndef SOAP_TYPE_SOAP_ENV__Header
-#define SOAP_TYPE_SOAP_ENV__Header (305)
+#define SOAP_TYPE_SOAP_ENV__Header (307)
 /* SOAP Header: */
 struct SOAP_ENV__Header
 {
@@ -2023,7 +2041,7 @@
 #endif
 
 #ifndef SOAP_TYPE_SOAP_ENV__Code
-#define SOAP_TYPE_SOAP_ENV__Code (306)
+#define SOAP_TYPE_SOAP_ENV__Code (308)
 /* SOAP Fault Code: */
 struct SOAP_ENV__Code
 {
@@ -2034,7 +2052,7 @@
 #endif
 
 #ifndef SOAP_TYPE_SOAP_ENV__Detail
-#define SOAP_TYPE_SOAP_ENV__Detail (308)
+#define SOAP_TYPE_SOAP_ENV__Detail (310)
 /* SOAP-ENV:Detail */
 struct SOAP_ENV__Detail
 {
@@ -2046,7 +2064,7 @@
 #endif
 
 #ifndef SOAP_TYPE_SOAP_ENV__Reason
-#define SOAP_TYPE_SOAP_ENV__Reason (311)
+#define SOAP_TYPE_SOAP_ENV__Reason (313)
 /* SOAP-ENV:Reason */
 struct SOAP_ENV__Reason
 {
@@ -2056,7 +2074,7 @@
 #endif
 
 #ifndef SOAP_TYPE_SOAP_ENV__Fault
-#define SOAP_TYPE_SOAP_ENV__Fault (312)
+#define SOAP_TYPE_SOAP_ENV__Fault (314)
 /* SOAP Fault: */
 struct SOAP_ENV__Fault
 {
@@ -2260,10 +2278,6 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetZoneID(struct soap*, int _token, char *_deviceID, int &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceSetLocation(struct soap*, int _token, char *_deviceID, struct DeviceLocation _location, bool &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetLocation(struct soap*, int _token, char *_deviceID, struct DeviceLocation &result);
-
 SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetPowerConsumption(struct soap*, int _token, int _modulatorID, unsigned long &result);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetModulatorIDs(struct soap*, int _token, std::vector<std::string >&ids);
@@ -2294,6 +2308,10 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__EventRaise(struct soap*, int _token, char *_eventName, char *_context, char *_parameter, char *_location, bool &result);
 
+SOAP_FMAC5 int SOAP_FMAC6 dss__EventWaitFor(struct soap*, int _token, int _timeout, std::vector<dss__Event >&result);
+
+SOAP_FMAC5 int SOAP_FMAC6 dss__EventSubscribeTo(struct soap*, int _token, std::string _name, std::string &result);
+
 SOAP_FMAC5 int SOAP_FMAC6 dss__PropertyGetType(struct soap*, int _token, std::string _propertyName, std::string &result);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__PropertySetInt(struct soap*, int _token, std::string _propertyName, int _value, bool _mayCreate, bool &result);
@@ -2452,10 +2470,6 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceGetZoneID(struct soap*);
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceSetLocation(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceGetLocation(struct soap*);
-
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct soap*);
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetModulatorIDs(struct soap*);
@@ -2486,6 +2500,10 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__EventRaise(struct soap*);
 
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__EventWaitFor(struct soap*);
+
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__EventSubscribeTo(struct soap*);
+
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__PropertyGetType(struct soap*);
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__PropertySetInt(struct soap*);

Modified: dss/trunk/webservices/soapdssObject.h
===================================================================
--- dss/trunk/webservices/soapdssObject.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/soapdssObject.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -176,10 +176,6 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetZoneID(struct soap*, int _token, char *_deviceID, int &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceSetLocation(struct soap*, int _token, char *_deviceID, struct DeviceLocation _location, bool &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetLocation(struct soap*, int _token, char *_deviceID, struct DeviceLocation &result);
-
 SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetPowerConsumption(struct soap*, int _token, int _modulatorID, unsigned long &result);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetModulatorIDs(struct soap*, int _token, std::vector<std::string >&ids);
@@ -210,6 +206,10 @@
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__EventRaise(struct soap*, int _token, char *_eventName, char *_context, char *_parameter, char *_location, bool &result);
 
+SOAP_FMAC5 int SOAP_FMAC6 dss__EventWaitFor(struct soap*, int _token, int _timeout, std::vector<dss__Event >&result);
+
+SOAP_FMAC5 int SOAP_FMAC6 dss__EventSubscribeTo(struct soap*, int _token, std::string _name, std::string &result);
+
 SOAP_FMAC5 int SOAP_FMAC6 dss__PropertyGetType(struct soap*, int _token, std::string _propertyName, std::string &result);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__PropertySetInt(struct soap*, int _token, std::string _propertyName, int _value, bool _mayCreate, bool &result);

Modified: dss/trunk/webservices/webservices.cpp
===================================================================
--- dss/trunk/webservices/webservices.cpp	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/webservices.cpp	2009-09-22 15:14:59 UTC (rev 8790)
@@ -5,6 +5,8 @@
 
 #include <boost/foreach.hpp>
 
+#include "core/dss.h"
+
 namespace dss {
   //================================================== WebServices
 
@@ -92,14 +94,88 @@
   }
 
 
+  //================================================== WebServiceEventListener
+
+  class WebServiceEventListener : public EventRelayTarget {
+  public:
+    WebServiceEventListener(EventInterpreterInternalRelay& _relay)
+    : EventRelayTarget(_relay)
+    { } // ctor
+    ~WebServiceEventListener() {
+      while(!m_Subscriptions.empty()) {
+        DSS::getInstance()->getEventInterpreter().unsubscribe(m_Subscriptions.front()->getID());
+        m_Subscriptions.erase(m_Subscriptions.begin());
+      }
+    } // dtor
+
+    virtual void handleEvent(Event& _event, const EventSubscription& _subscription);
+    bool waitForEvent(const int _timeoutMS);
+    Event popEvent();
+    bool hasEvent() { return !m_PendingEvents.empty(); }
+
+    virtual std::string subscribeTo(const std::string& _eventName);
+  private:
+    SyncEvent m_EventArrived;
+    Mutex m_PendingEventsMutex;
+    std::vector<Event> m_PendingEvents;
+    std::vector<boost::shared_ptr<EventSubscription> > m_Subscriptions;
+  }; // WebServiceEventListener
+
+  void WebServiceEventListener::handleEvent(Event& _event, const EventSubscription& _subscription) {
+    m_PendingEventsMutex.lock();
+    m_PendingEvents.push_back(_event);
+    m_PendingEventsMutex.unlock();
+    m_EventArrived.signal();
+  } // handleEvent
+
+  bool WebServiceEventListener::waitForEvent(const int _timeoutMS) {
+    if(m_PendingEvents.empty()) {
+      if(_timeoutMS == 0) {
+        m_EventArrived.waitFor();
+      } else if(_timeoutMS > 0) {
+        m_EventArrived.waitFor(_timeoutMS);
+      }
+    }
+    return !m_PendingEvents.empty();
+  } // waitForEvent
+
+  Event WebServiceEventListener::popEvent() {
+    Event result;
+    m_PendingEventsMutex.lock();
+    result = m_PendingEvents.front();
+    m_PendingEvents.erase(m_PendingEvents.begin());
+    m_PendingEventsMutex.unlock();
+    return result;
+  } // popEvent
+
+  std::string WebServiceEventListener::subscribeTo(const std::string& _eventName) {
+    boost::shared_ptr<EventSubscription> subscription(
+      new dss::EventSubscription(
+            _eventName,
+            EventInterpreterInternalRelay::getPluginName(),
+            DSS::getInstance()->getEventInterpreter(),
+            boost::shared_ptr<dss::SubscriptionOptions>()
+      )
+    );
+
+    EventRelayTarget::subscribeTo(subscription);
+    m_Subscriptions.push_back(subscription);
+    DSS::getInstance()->getEventInterpreter().subscribe(subscription);
+
+    return subscription->getID();
+  } // subscribeTo
+
+
   //================================================== WebServiceSession
 
   WebServiceSession::WebServiceSession(const int _tokenID, soap* _soapRequest)
   : Session(_tokenID),
     m_OriginatorIP(_soapRequest->ip)
-  {
-  } // ctor
+  { } // ctor
 
+  WebServiceSession::~WebServiceSession() {
+  } // dtor
+
   bool WebServiceSession::isOwner(soap* _soapRequest) {
     return _soapRequest->ip == m_OriginatorIP;
   } // isOwner
@@ -111,7 +187,42 @@
     return *this;
   } // operator=
 
+  void WebServiceSession::createListener() {
+    if(m_pEventListener == NULL) {
+      EventInterpreterInternalRelay* pPlugin =
+          dynamic_cast<EventInterpreterInternalRelay*>(
+              DSS::getInstance()->getEventInterpreter().getPluginByName(
+                std::string(EventInterpreterInternalRelay::getPluginName())
+              )
+          );
+      if(pPlugin == NULL) {
+        throw new std::runtime_error("Need EventInterpreterInternalRelay to be registered");
+      }
+      m_pEventListener.reset(new WebServiceEventListener(*pPlugin));
+    }
+    assert(m_pEventListener != NULL);
+  } // createListener
 
+  bool WebServiceSession::waitForEvent(const int _timeoutMS) {
+    createListener();
+    return m_pEventListener->waitForEvent(_timeoutMS);
+  } // waitForEvent
+
+  Event WebServiceSession::popEvent() {
+    createListener();
+    return m_pEventListener->popEvent();
+  } // popEvent
+
+  std::string WebServiceSession::subscribeTo(const std::string& _eventName) {
+    return m_pEventListener->subscribeTo(_eventName);
+  } // subscribeTo
+
+  bool WebServiceSession::hasEvent() {
+    createListener();
+    return m_pEventListener->hasEvent();
+  } // hasEvent
+
+
   //================================================== WebServicesWorker
 
   WebServicesWorker::WebServicesWorker(WebServices* _services)

Modified: dss/trunk/webservices/webservices.h
===================================================================
--- dss/trunk/webservices/webservices.h	2009-09-22 15:09:31 UTC (rev 8789)
+++ dss/trunk/webservices/webservices.h	2009-09-22 15:14:59 UTC (rev 8790)
@@ -9,6 +9,8 @@
 #include "core/session.h"
 #include "core/mutex.h"
 #include "core/syncevent.h"
+#include "core/event.h"
+#include "core/eventinterpreterplugins.h"
 
 #include <deque>
 
@@ -19,16 +21,27 @@
 
   class WebServicesWorker;
 
+  class WebServiceEventListener;
+
   class WebServiceSession : public Session {
   protected:
     uint32_t m_OriginatorIP;
+    boost::shared_ptr<WebServiceEventListener> m_pEventListener;
+  private:
+    void createListener();
   public:
     WebServiceSession() {}
     WebServiceSession(const int _tokenID, soap* _soapRequest);
+    virtual ~WebServiceSession();
 
     bool isOwner(soap* _soapRequest);
 
     WebServiceSession& operator=(const WebServiceSession& _other);
+    bool waitForEvent(const int _timeoutMS);
+    Event popEvent();
+    bool hasEvent();
+
+    std::string subscribeTo(const std::string& _eventName);
   }; // WebServiceSession
 
   typedef boost::ptr_map<const int, WebServiceSession> WebServiceSessionByID;



More information about the dss-commits mailing list