aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/upnp/RootService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/upnp/RootService.cpp')
-rw-r--r--src/modules/upnp/RootService.cpp453
1 files changed, 219 insertions, 234 deletions
diff --git a/src/modules/upnp/RootService.cpp b/src/modules/upnp/RootService.cpp
index abf945da8..81cd7b23a 100644
--- a/src/modules/upnp/RootService.cpp
+++ b/src/modules/upnp/RootService.cpp
@@ -43,274 +43,259 @@
namespace UPnP
{
- // Example message result:
- //
- // <root xmlns="urn:schemas-upnp-org:device-1-0" >
- // <specVersion>
- // <major>1</major>
- // <minor>0</minor>
- // </specVersion>
- // <URLBase>http://10.0.0.138</URLBase>
- // <device>
- // <deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
- // <friendlyName>SpeedTouch 510 (0313QZ6S2)</friendlyName>
- // <manufacturer>THOMSON multimedia</manufacturer>
- // <manufacturerURL>http://www.thomson-multimedia.com</manufacturerURL>
- // <modelDescription>DSL Internet Gateway</modelDescription>
- // <modelName>SpeedTouch</modelName>
- // <modelNumber>510</modelNumber>
- // <modelURL>http://www.speedtouch.com</modelURL>
- // <serialNumber>0313QZ6S2</serialNumber>
- // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F</UDN>
- // <presentationURL>/index.htm</presentationURL>
- // <serviceList>
- // <service>
- // <serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
- // <serviceId>urn:upnp-org:serviceId:layer3f</serviceId>
- // <controlURL>/upnp/control/layer3f</controlURL>
- // <eventSubURL>/upnp/event/layer3f</eventSubURL>
- // <SCPDURL>/Layer3Forwarding.xml</SCPDURL>
- // </service>
- // </serviceList>
- // <deviceList>
- // <device>
- // <deviceType>urn:schemas-upnp-org:device:LANDevice:1</deviceType>
- // <friendlyName>LANDevice</friendlyName>
- // <manufacturer>THOMSON multimedia</manufacturer>
- // <modelName>SpeedTouch</modelName>
- // <serialNumber>0313QZ6S2</serialNumber>
- // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_LD</UDN>
- // <serviceList>
- // <service>
- // <serviceType>urn:schemas-upnp-org:service:LANHostConfigManagement:1</serviceType>
- // <serviceId>urn:upnp-org:serviceId:lanhcm</serviceId>
- // <controlURL>/upnp/control/lanhcm</controlURL>
- // <eventSubURL>/upnp/event/lanhcm</eventSubURL>
- // <SCPDURL>/LANHostConfigManagement.xml</SCPDURL>
- // </service>
- // </serviceList>
- // </device>
- // <device>
- // <deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
- // <friendlyName>WANDevice</friendlyName>
- // <manufacturer>THOMSON multimedia</manufacturer>
- // <modelName>SpeedTouch</modelName>
- // <serialNumber>0313QZ6S2</serialNumber>
- // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_WD</UDN>
- // <serviceList>
- // <service>
- // <serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
- // <serviceId>urn:upnp-org:serviceId:wancic</serviceId>
- // <controlURL>/upnp/control/wancic</controlURL>
- // <eventSubURL>/upnp/event/wancic</eventSubURL>
- // <SCPDURL>/WANCommonInterfaceConfig.xml</SCPDURL>
- // </service>
- // </serviceList>
- // <deviceList>
- // <device>
- // <deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
- // <friendlyName>WANConnectionDevice</friendlyName>
- // <manufacturer>THOMSON multimedia</manufacturer>
- // <modelName>SpeedTouch</modelName>
- // <serialNumber>0313QZ6S2</serialNumber>
- // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_WCDpppoa</UDN>
- // <serviceList>
- // <service>
- // <serviceType>urn:schemas-upnp-org:service:WANDSLLinkConfig:1</serviceType>
- // <serviceId>urn:upnp-org:serviceId:wandsllc:pppoa</serviceId>
- // <controlURL>/upnp/control/wandsllcpppoa</controlURL>
- // <eventSubURL>/upnp/event/wandsllcpppoa</eventSubURL>
- // <SCPDURL>/WANDSLLinkConfig.xml</SCPDURL>
- // </service>
- // <service>
- // <serviceType>urn:schemas-upnp-org:service:WANPPPConnection:1</serviceType>
- // <serviceId>urn:upnp-org:serviceId:wanpppc:pppoa</serviceId>
- // <controlURL>/upnp/control/wanpppcpppoa</controlURL>
- // <eventSubURL>/upnp/event/wanpppcpppoa</eventSubURL>
- // <SCPDURL>/WANPPPConnection.xml</SCPDURL>
- // </service>
- // </serviceList>
- // </device>
- // </deviceList>
- // </device>
- // </deviceList>
- // </device>
- // </root>
+ // Example message result:
+ //
+ // <root xmlns="urn:schemas-upnp-org:device-1-0" >
+ // <specVersion>
+ // <major>1</major>
+ // <minor>0</minor>
+ // </specVersion>
+ // <URLBase>http://10.0.0.138</URLBase>
+ // <device>
+ // <deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
+ // <friendlyName>SpeedTouch 510 (0313QZ6S2)</friendlyName>
+ // <manufacturer>THOMSON multimedia</manufacturer>
+ // <manufacturerURL>http://www.thomson-multimedia.com</manufacturerURL>
+ // <modelDescription>DSL Internet Gateway</modelDescription>
+ // <modelName>SpeedTouch</modelName>
+ // <modelNumber>510</modelNumber>
+ // <modelURL>http://www.speedtouch.com</modelURL>
+ // <serialNumber>0313QZ6S2</serialNumber>
+ // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F</UDN>
+ // <presentationURL>/index.htm</presentationURL>
+ // <serviceList>
+ // <service>
+ // <serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
+ // <serviceId>urn:upnp-org:serviceId:layer3f</serviceId>
+ // <controlURL>/upnp/control/layer3f</controlURL>
+ // <eventSubURL>/upnp/event/layer3f</eventSubURL>
+ // <SCPDURL>/Layer3Forwarding.xml</SCPDURL>
+ // </service>
+ // </serviceList>
+ // <deviceList>
+ // <device>
+ // <deviceType>urn:schemas-upnp-org:device:LANDevice:1</deviceType>
+ // <friendlyName>LANDevice</friendlyName>
+ // <manufacturer>THOMSON multimedia</manufacturer>
+ // <modelName>SpeedTouch</modelName>
+ // <serialNumber>0313QZ6S2</serialNumber>
+ // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_LD</UDN>
+ // <serviceList>
+ // <service>
+ // <serviceType>urn:schemas-upnp-org:service:LANHostConfigManagement:1</serviceType>
+ // <serviceId>urn:upnp-org:serviceId:lanhcm</serviceId>
+ // <controlURL>/upnp/control/lanhcm</controlURL>
+ // <eventSubURL>/upnp/event/lanhcm</eventSubURL>
+ // <SCPDURL>/LANHostConfigManagement.xml</SCPDURL>
+ // </service>
+ // </serviceList>
+ // </device>
+ // <device>
+ // <deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
+ // <friendlyName>WANDevice</friendlyName>
+ // <manufacturer>THOMSON multimedia</manufacturer>
+ // <modelName>SpeedTouch</modelName>
+ // <serialNumber>0313QZ6S2</serialNumber>
+ // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_WD</UDN>
+ // <serviceList>
+ // <service>
+ // <serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
+ // <serviceId>urn:upnp-org:serviceId:wancic</serviceId>
+ // <controlURL>/upnp/control/wancic</controlURL>
+ // <eventSubURL>/upnp/event/wancic</eventSubURL>
+ // <SCPDURL>/WANCommonInterfaceConfig.xml</SCPDURL>
+ // </service>
+ // </serviceList>
+ // <deviceList>
+ // <device>
+ // <deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
+ // <friendlyName>WANConnectionDevice</friendlyName>
+ // <manufacturer>THOMSON multimedia</manufacturer>
+ // <modelName>SpeedTouch</modelName>
+ // <serialNumber>0313QZ6S2</serialNumber>
+ // <UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-8E-A1-6F_WCDpppoa</UDN>
+ // <serviceList>
+ // <service>
+ // <serviceType>urn:schemas-upnp-org:service:WANDSLLinkConfig:1</serviceType>
+ // <serviceId>urn:upnp-org:serviceId:wandsllc:pppoa</serviceId>
+ // <controlURL>/upnp/control/wandsllcpppoa</controlURL>
+ // <eventSubURL>/upnp/event/wandsllcpppoa</eventSubURL>
+ // <SCPDURL>/WANDSLLinkConfig.xml</SCPDURL>
+ // </service>
+ // <service>
+ // <serviceType>urn:schemas-upnp-org:service:WANPPPConnection:1</serviceType>
+ // <serviceId>urn:upnp-org:serviceId:wanpppc:pppoa</serviceId>
+ // <controlURL>/upnp/control/wanpppcpppoa</controlURL>
+ // <eventSubURL>/upnp/event/wanpppcpppoa</eventSubURL>
+ // <SCPDURL>/WANPPPConnection.xml</SCPDURL>
+ // </service>
+ // </serviceList>
+ // </device>
+ // </deviceList>
+ // </device>
+ // </deviceList>
+ // </device>
+ // </root>
-
-// The contructor
-RootService::RootService(const QString &hostname, int port, const QString &rootUrl)
-: Service(hostname, port, rootUrl)
-, m_szHostname(hostname)
-, m_iPort(port)
-{
-
-}
-
-
-// The destructor
-RootService::~RootService()
-{
-
-}
-
-
-// Recursively add all devices and embedded devices to the deviceServices_ map
-void RootService::addDeviceServices(const QDomNode &device)
-{
- qDebug() << "UPnP discovered device " << XmlFunctions::getNodeValue(device, "/UDN") << endl;
-
- if(XmlFunctions::getNodeValue(device, "/deviceType") == InternetGatewayDeviceType)
+ // The contructor
+ RootService::RootService(const QString & hostname, int port, const QString & rootUrl)
+ : Service(hostname, port, rootUrl), m_szHostname(hostname), m_iPort(port)
{
- QString description;
- description = XmlFunctions::getNodeValue(device, "/friendlyName");
- if(description.isNull())
- description = XmlFunctions::getNodeValue(device, "/modelDescription");
- if(description.isNull())
- description = XmlFunctions::getNodeValue(device, "/modelName") + " " + XmlFunctions::getNodeValue(device, "/modelNumber");
- if(description.isNull())
- description = __tr2qs("Unknown");
-
- qDebug() << "Model: " << description << endl;
-
- g_pApp->activeConsole()->output(KVI_OUT_GENERICSTATUS,__tr2qs_ctx("[UPNP]: found gateway device: %s","upnp"), description.toUtf8().data());
-
-
}
- // Insert the given device node
- // The "key" is the device/UDN tag, the value is a list of device/serviceList/service nodes
- m_deviceServices.insert(XmlFunctions::getNodeValue(device, "/UDN"),
- device.namedItem("serviceList").childNodes());
- // Find all embedded device nodes
- QDomNodeList embeddedDevices = device.namedItem("deviceList").childNodes();
- for(int i = 0; i < embeddedDevices.count(); i++)
+ // The destructor
+ RootService::~RootService()
{
- if(embeddedDevices.item(i).nodeName() != "device") continue;
- addDeviceServices(embeddedDevices.item(i));
}
-}
+ // Recursively add all devices and embedded devices to the deviceServices_ map
+ void RootService::addDeviceServices(const QDomNode & device)
+ {
+ qDebug() << "UPnP discovered device " << XmlFunctions::getNodeValue(device, "/UDN") << endl;
+ if(XmlFunctions::getNodeValue(device, "/deviceType") == InternetGatewayDeviceType)
+ {
+ QString description;
+ description = XmlFunctions::getNodeValue(device, "/friendlyName");
+ if(description.isNull())
+ description = XmlFunctions::getNodeValue(device, "/modelDescription");
+ if(description.isNull())
+ description = XmlFunctions::getNodeValue(device, "/modelName") + " " + XmlFunctions::getNodeValue(device, "/modelNumber");
+ if(description.isNull())
+ description = __tr2qs("Unknown");
-// Return the device type
-QString RootService::getDeviceType() const
-{
- return m_szDeviceType;
-}
+ qDebug() << "Model: " << description << endl;
+ g_pApp->activeConsole()->output(KVI_OUT_GENERICSTATUS, __tr2qs_ctx("[UPNP]: found gateway device: %s", "upnp"), description.toUtf8().data());
+ }
+ // Insert the given device node
+ // The "key" is the device/UDN tag, the value is a list of device/serviceList/service nodes
+ m_deviceServices.insert(XmlFunctions::getNodeValue(device, "/UDN"),
+ device.namedItem("serviceList").childNodes());
-// Return a service from the cached root device entry
-ServiceParameters RootService::getServiceById(const QString &serviceId) const
-{
- // Get a /root/device/serviceList/service/ tag
-
- ServiceParameters params;
- QMap<QString,QDomNodeList>::const_iterator i = m_deviceServices.constBegin();
- while (i != m_deviceServices.constEnd()) {
- if(getServiceById(serviceId, i.key(), params))
- return params;
- ++i;
+ // Find all embedded device nodes
+ QDomNodeList embeddedDevices = device.namedItem("deviceList").childNodes();
+ for(int i = 0; i < embeddedDevices.count(); i++)
+ {
+ if(embeddedDevices.item(i).nodeName() != "device")
+ continue;
+ addDeviceServices(embeddedDevices.item(i));
+ }
}
- //calling function check this field to understand if the struct is null
- params.controlUrl = QString();
- return params;
-}
-
-// Return a service from a cached embedded device entry
-bool RootService::getServiceById(const QString &serviceId, const QString &deviceUdn, ServiceParameters &params) const
-{
- // Get a /root/device/deviceList/device/.../serviceList/service/serviceId tag
- QDomNode service = XmlFunctions::getNodeChildByKey( m_deviceServices[deviceUdn], "serviceId", serviceId );
-
- if(! service.isNull())
+ // Return the device type
+ QString RootService::getDeviceType() const
{
- params.hostname = m_szHostname;
- params.port = m_iPort;
- params.controlUrl = XmlFunctions::getNodeValue(service, "/controlURL");
- params.scpdUrl = XmlFunctions::getNodeValue(service, "/SCPDURL");
- params.serviceId = XmlFunctions::getNodeValue(service, "/serviceId");
- params.serviceType = XmlFunctions::getNodeValue(service, "/serviceType");
-
- return true;
- } else {
- return false;
+ return m_szDeviceType;
}
-}
+ // Return a service from the cached root device entry
+ ServiceParameters RootService::getServiceById(const QString & serviceId) const
+ {
+ // Get a /root/device/serviceList/service/ tag
-// Return a service from the cached root device entry
-ServiceParameters RootService::getServiceByType(const QString &serviceType) const
-{
- // Get a /root/device/serviceList/service/ tag
+ ServiceParameters params;
+ QMap<QString, QDomNodeList>::const_iterator i = m_deviceServices.constBegin();
+ while(i != m_deviceServices.constEnd())
+ {
+ if(getServiceById(serviceId, i.key(), params))
+ return params;
+ ++i;
+ }
- ServiceParameters params;
- QMap<QString,QDomNodeList>::const_iterator i = m_deviceServices.constBegin();
- while (i != m_deviceServices.constEnd()) {
- if(getServiceByType(serviceType, i.key(), params))
- return params;
- ++i;
+ //calling function check this field to understand if the struct is null
+ params.controlUrl = QString();
+ return params;
}
- //calling function check this field to understand if the struct is null
- params.controlUrl = QString();
- return params;
-
-}
-
+ // Return a service from a cached embedded device entry
+ bool RootService::getServiceById(const QString & serviceId, const QString & deviceUdn, ServiceParameters & params) const
+ {
+ // Get a /root/device/deviceList/device/.../serviceList/service/serviceId tag
+ QDomNode service = XmlFunctions::getNodeChildByKey(m_deviceServices[deviceUdn], "serviceId", serviceId);
+ if(!service.isNull())
+ {
+ params.hostname = m_szHostname;
+ params.port = m_iPort;
+ params.controlUrl = XmlFunctions::getNodeValue(service, "/controlURL");
+ params.scpdUrl = XmlFunctions::getNodeValue(service, "/SCPDURL");
+ params.serviceId = XmlFunctions::getNodeValue(service, "/serviceId");
+ params.serviceType = XmlFunctions::getNodeValue(service, "/serviceType");
-// Return a service from a cached embedded device entry
-bool RootService::getServiceByType(const QString &serviceType, const QString &deviceUdn, ServiceParameters &params) const
-{
- // Get a /root/device/deviceList/device/.../serviceList/service/serviceType tag
- QDomNode service = XmlFunctions::getNodeChildByKey( m_deviceServices[deviceUdn], "serviceType", serviceType );
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
- if(! service.isNull())
+ // Return a service from the cached root device entry
+ ServiceParameters RootService::getServiceByType(const QString & serviceType) const
{
- params.hostname = m_szHostname;
- params.port = m_iPort;
- params.controlUrl = XmlFunctions::getNodeValue(service, "/controlURL");
- params.scpdUrl = XmlFunctions::getNodeValue(service, "/SCPDURL");
- params.serviceId = XmlFunctions::getNodeValue(service, "/serviceId");
- params.serviceType = serviceType;
+ // Get a /root/device/serviceList/service/ tag
- return true;
- } else {
- qWarning() << "UPnP::RootService::getServiceByType -"
- << " type '" << serviceType << "' not found for device '" << deviceUdn << "'." << endl;
+ ServiceParameters params;
+ QMap<QString, QDomNodeList>::const_iterator i = m_deviceServices.constBegin();
+ while(i != m_deviceServices.constEnd())
+ {
+ if(getServiceByType(serviceType, i.key(), params))
+ return params;
+ ++i;
+ }
- return false;
+ //calling function check this field to understand if the struct is null
+ params.controlUrl = QString();
+ return params;
}
-}
+ // Return a service from a cached embedded device entry
+ bool RootService::getServiceByType(const QString & serviceType, const QString & deviceUdn, ServiceParameters & params) const
+ {
+ // Get a /root/device/deviceList/device/.../serviceList/service/serviceType tag
+ QDomNode service = XmlFunctions::getNodeChildByKey(m_deviceServices[deviceUdn], "serviceType", serviceType);
+ if(!service.isNull())
+ {
+ params.hostname = m_szHostname;
+ params.port = m_iPort;
+ params.controlUrl = XmlFunctions::getNodeValue(service, "/controlURL");
+ params.scpdUrl = XmlFunctions::getNodeValue(service, "/SCPDURL");
+ params.serviceId = XmlFunctions::getNodeValue(service, "/serviceId");
+ params.serviceType = serviceType;
-// The control point received a response to callInformationUrl()
-void RootService::gotInformationResponse(const QDomNode &response)
-{
- // Register all device UDN nodes for later
- m_deviceServices.clear();
- addDeviceServices( XmlFunctions::getNode(response, "/device") );
-
- // Fetch the required data
- m_szDeviceType = XmlFunctions::getNodeValue(response, "/device/deviceType");
- m_szRootUdn = XmlFunctions::getNodeValue(response, "/device/UDN");
-
- // The rootUdn_ is used to retrieve
- // the /root/device/serviceList/service
- // nodes from the deviceServices_ map
-}
+ return true;
+ }
+ else
+ {
+ qWarning() << "UPnP::RootService::getServiceByType -"
+ << " type '" << serviceType << "' not found for device '" << deviceUdn << "'." << endl;
+ return false;
+ }
+ }
+ // The control point received a response to callInformationUrl()
+ void RootService::gotInformationResponse(const QDomNode & response)
+ {
+ // Register all device UDN nodes for later
+ m_deviceServices.clear();
+ addDeviceServices(XmlFunctions::getNode(response, "/device"));
-// Query the device for its service list
-void RootService::queryDevice()
-{
- callInformationUrl();
-}
+ // Fetch the required data
+ m_szDeviceType = XmlFunctions::getNodeValue(response, "/device/deviceType");
+ m_szRootUdn = XmlFunctions::getNodeValue(response, "/device/UDN");
+ // The rootUdn_ is used to retrieve
+ // the /root/device/serviceList/service
+ // nodes from the deviceServices_ map
+ }
+ // Query the device for its service list
+ void RootService::queryDevice()
+ {
+ callInformationUrl();
+ }
} // end of namespae