Exemplo n.º 1
0
def deserialize_scpd_get_response(content: bytes) -> Dict[str, Any]:
    if XML_VERSION_PREFIX.encode() in content:
        parsed: List[Tuple[str,
                           str]] = CONTENT_PATTERN.findall(content.decode())
        xml_dict = xml_to_dict('' if not parsed else parsed[0][0])
        return parse_device_dict(xml_dict)
    return {}
Exemplo n.º 2
0
def deserialize_soap_post_response(
        response: bytes, method: str,
        service_id: str) -> typing.Dict[str, typing.Dict[str, str]]:
    parsed: typing.List[
        typing.List[bytes]] = CONTENT_NO_XML_VERSION_PATTERN.findall(response)
    content = b'' if not parsed else parsed[0][0]
    content_dict = xml_to_dict(content.decode())
    envelope = content_dict[ENVELOPE]
    if not isinstance(envelope[BODY], dict):
        # raise UPnPError('blank response')
        return {}  # TODO: raise
    response_body: typing.Dict[str, typing.Dict[str, typing.Dict[
        str, str]]] = flatten_keys(envelope[BODY], f"{'{' + service_id + '}'}")
    if not response_body:
        # raise UPnPError('blank response')
        return {}  # TODO: raise
    if FAULT in response_body:
        fault: typing.Dict[str,
                           typing.Dict[str,
                                       typing.Dict[str, str]]] = flatten_keys(
                                           response_body[FAULT],
                                           "{%s}" % CONTROL)
        try:
            raise UPnPError(fault['detail']['UPnPError']['errorDescription'])
        except (KeyError, TypeError, ValueError):
            raise UPnPError(
                f"Failed to decode error response: {json.dumps(fault)}")
    response_key = None
    for key in response_body:
        if method in key:
            response_key = key
            break
    if not response_key:
        raise UPnPError(
            f"unknown response fields for {method}: {response_body}")
    return response_body[response_key]
Exemplo n.º 3
0
 def test_parse_device_response_xml(self):
     self.assertDictEqual(
         xml_to_dict(
             '<?xml version="1.0"?>\n<root xmlns="urn:schemas-upnp-org:device-1-0">\n\t<specVersion>\n\t\t<major>1</major>\n\t\t<minor>0</minor>\n\t</specVersion>\n\t<URLBase>http://10.0.0.1:49152</URLBase>\n\t<device>\n\t\t<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>\n\t\t<friendlyName>Wireless Broadband Router</friendlyName>\n\t\t<manufacturer>D-Link Corporation</manufacturer>\n\t\t<manufacturerURL>http://www.dlink.com</manufacturerURL>\n\t\t<modelDescription>D-Link Router</modelDescription>\n\t\t<modelName>D-Link Router</modelName>\n\t\t<modelNumber>DIR-890L</modelNumber>\n\t\t<modelURL>http://www.dlink.com</modelURL>\n\t\t<serialNumber>120</serialNumber>\n\t\t<UDN>uuid:11111111-2222-3333-4444-555555555555</UDN>\n\t\t<iconList>\n\t\t\t<icon>\n\t\t\t\t<mimetype>image/gif</mimetype>\n\t\t\t\t<width>118</width>\n\t\t\t\t<height>119</height>\n\t\t\t\t<depth>8</depth>\n\t\t\t\t<url>/ligd.gif</url>\n\t\t\t</icon>\n\t\t</iconList>\n\t\t<serviceList>\n\t\t\t<service>\n\t\t\t\t<serviceType>urn:schemas-microsoft-com:service:OSInfo:1</serviceType>\n\t\t\t\t<serviceId>urn:microsoft-com:serviceId:OSInfo1</serviceId>\n\t\t\t\t<controlURL>/soap.cgi?service=OSInfo1</controlURL>\n\t\t\t\t<eventSubURL>/gena.cgi?service=OSInfo1</eventSubURL>\n\t\t\t\t<SCPDURL>/OSInfo.xml</SCPDURL>\n\t\t\t</service>\n\t\t\t<service>\n\t\t\t\t<serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>\n\t\t\t\t<serviceId>urn:upnp-org:serviceId:L3Forwarding1</serviceId>\n\t\t\t\t<controlURL>/soap.cgi?service=L3Forwarding1</controlURL>\n\t\t\t\t<eventSubURL>/gena.cgi?service=L3Forwarding1</eventSubURL>\n\t\t\t\t<SCPDURL>/Layer3Forwarding.xml</SCPDURL>\n\t\t\t</service>\n\t\t</serviceList>\n\t\t<deviceList>\n\t\t\t<device>\n\t\t\t\t<deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>\n\t\t\t\t<friendlyName>WANDevice</friendlyName>\n\t\t\t\t<manufacturer>D-Link</manufacturer>\n\t\t\t\t<manufacturerURL>http://www.dlink.com</manufacturerURL>\n\t\t\t\t<modelDescription>WANDevice</modelDescription>\n\t\t\t\t<modelName>DIR-890L</modelName>\n\t\t\t\t<modelNumber>1</modelNumber>\n\t\t\t\t<modelURL>http://www.dlink.com</modelURL>\n\t\t\t\t<serialNumber>120</serialNumber>\n\t\t\t\t<UDN>uuid:11111111-2222-3333-4444-555555555555</UDN>\n\t\t\t\t<serviceList>\n\t\t\t\t\t<service>\n\t\t\t\t\t\t<serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>\n\t\t\t\t\t\t<serviceId>urn:upnp-org:serviceId:WANCommonIFC1</serviceId>\n\t\t\t\t\t\t<controlURL>/soap.cgi?service=WANCommonIFC1</controlURL>\n\t\t\t\t\t\t<eventSubURL>/gena.cgi?service=WANCommonIFC1</eventSubURL>\n\t\t\t\t\t\t<SCPDURL>/WANCommonInterfaceConfig.xml</SCPDURL>\n\t\t\t\t\t</service>\n\t\t\t\t</serviceList>\n\t\t\t\t<deviceList>\n\t\t\t\t\t<device>\n\t\t\t\t\t\t<deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>\n\t\t\t\t\t\t<friendlyName>WANConnectionDevice</friendlyName>\n\t\t\t\t\t\t<manufacturer>D-Link</manufacturer>\n\t\t\t\t\t\t<manufacturerURL>http://www.dlink.com</manufacturerURL>\n\t\t\t\t\t\t<modelDescription>WanConnectionDevice</modelDescription>\n\t\t\t\t\t\t<modelName>DIR-890L</modelName>\n\t\t\t\t\t\t<modelNumber>1</modelNumber>\n\t\t\t\t\t\t<modelURL>http://www.dlink.com</modelURL>\n\t\t\t\t\t\t<serialNumber>120</serialNumber>\n\t\t\t\t\t\t<UDN>uuid:11111111-2222-3333-4444-555555555555</UDN>\n\t\t\t\t\t\t<serviceList>\n\t\t\t\t\t\t\t<service>\n\t\t\t\t\t\t\t\t<serviceType>urn:schemas-upnp-org:service:WANEthernetLinkConfig:1</serviceType>\n\t\t\t\t\t\t\t\t<serviceId>urn:upnp-org:serviceId:WANEthLinkC1</serviceId>\n\t\t\t\t\t\t\t\t<controlURL>/soap.cgi?service=WANEthLinkC1</controlURL>\n\t\t\t\t\t\t\t\t<eventSubURL>/gena.cgi?service=WANEthLinkC1</eventSubURL>\n\t\t\t\t\t\t\t\t<SCPDURL>/WANEthernetLinkConfig.xml</SCPDURL>\n\t\t\t\t\t\t\t</service>\n\t\t\t\t\t\t\t<service>\n\t\t\t\t\t\t\t\t<serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType>\n\t\t\t\t\t\t\t\t<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>\n\t\t\t\t\t\t\t\t<controlURL>/soap.cgi?service=WANIPConn1</controlURL>\n\t\t\t\t\t\t\t\t<eventSubURL>/gena.cgi?service=WANIPConn1</eventSubURL>\n\t\t\t\t\t\t\t\t<SCPDURL>/WANIPConnection.xml</SCPDURL>\n\t\t\t\t\t\t\t</service>\n\t\t\t\t\t\t</serviceList>\n\t\t\t\t\t</device>\n\t\t\t\t</deviceList>\n\t\t\t</device>\n\t\t</deviceList>\n\t\t<presentationURL>http://10.0.0.1</presentationURL>\n\t</device>\n</root>\n'
         ), {
             '{urn:schemas-upnp-org:device-1-0}root': {
                 '{urn:schemas-upnp-org:device-1-0}specVersion': {
                     '{urn:schemas-upnp-org:device-1-0}major': '1',
                     '{urn:schemas-upnp-org:device-1-0}minor': '0'
                 },
                 '{urn:schemas-upnp-org:device-1-0}URLBase':
                 'http://10.0.0.1:49152',
                 '{urn:schemas-upnp-org:device-1-0}device': {
                     '{urn:schemas-upnp-org:device-1-0}deviceType':
                     'urn:schemas-upnp-org:device:InternetGatewayDevice:1',
                     '{urn:schemas-upnp-org:device-1-0}friendlyName':
                     'Wireless Broadband Router',
                     '{urn:schemas-upnp-org:device-1-0}manufacturer':
                     'D-Link Corporation',
                     '{urn:schemas-upnp-org:device-1-0}manufacturerURL':
                     'http://www.dlink.com',
                     '{urn:schemas-upnp-org:device-1-0}modelDescription':
                     'D-Link Router',
                     '{urn:schemas-upnp-org:device-1-0}modelName':
                     'D-Link Router',
                     '{urn:schemas-upnp-org:device-1-0}modelNumber':
                     'DIR-890L',
                     '{urn:schemas-upnp-org:device-1-0}modelURL':
                     'http://www.dlink.com',
                     '{urn:schemas-upnp-org:device-1-0}serialNumber':
                     '120',
                     '{urn:schemas-upnp-org:device-1-0}UDN':
                     'uuid:11111111-2222-3333-4444-555555555555',
                     '{urn:schemas-upnp-org:device-1-0}iconList': {
                         '{urn:schemas-upnp-org:device-1-0}icon': {
                             '{urn:schemas-upnp-org:device-1-0}mimetype':
                             'image/gif',
                             '{urn:schemas-upnp-org:device-1-0}width':
                             '118',
                             '{urn:schemas-upnp-org:device-1-0}height':
                             '119',
                             '{urn:schemas-upnp-org:device-1-0}depth': '8',
                             '{urn:schemas-upnp-org:device-1-0}url':
                             '/ligd.gif'
                         }
                     },
                     '{urn:schemas-upnp-org:device-1-0}serviceList': {
                         '{urn:schemas-upnp-org:device-1-0}service': [{
                             '{urn:schemas-upnp-org:device-1-0}serviceType':
                             'urn:schemas-microsoft-com:service:OSInfo:1',
                             '{urn:schemas-upnp-org:device-1-0}serviceId':
                             'urn:microsoft-com:serviceId:OSInfo1',
                             '{urn:schemas-upnp-org:device-1-0}controlURL':
                             '/soap.cgi?service=OSInfo1',
                             '{urn:schemas-upnp-org:device-1-0}eventSubURL':
                             '/gena.cgi?service=OSInfo1',
                             '{urn:schemas-upnp-org:device-1-0}SCPDURL':
                             '/OSInfo.xml'
                         }, {
                             '{urn:schemas-upnp-org:device-1-0}serviceType':
                             'urn:schemas-upnp-org:service:Layer3Forwarding:1',
                             '{urn:schemas-upnp-org:device-1-0}serviceId':
                             'urn:upnp-org:serviceId:L3Forwarding1',
                             '{urn:schemas-upnp-org:device-1-0}controlURL':
                             '/soap.cgi?service=L3Forwarding1',
                             '{urn:schemas-upnp-org:device-1-0}eventSubURL':
                             '/gena.cgi?service=L3Forwarding1',
                             '{urn:schemas-upnp-org:device-1-0}SCPDURL':
                             '/Layer3Forwarding.xml'
                         }]
                     },
                     '{urn:schemas-upnp-org:device-1-0}deviceList': {
                         '{urn:schemas-upnp-org:device-1-0}device': {
                             '{urn:schemas-upnp-org:device-1-0}deviceType':
                             'urn:schemas-upnp-org:device:WANDevice:1',
                             '{urn:schemas-upnp-org:device-1-0}friendlyName':
                             'WANDevice',
                             '{urn:schemas-upnp-org:device-1-0}manufacturer':
                             'D-Link',
                             '{urn:schemas-upnp-org:device-1-0}manufacturerURL':
                             'http://www.dlink.com',
                             '{urn:schemas-upnp-org:device-1-0}modelDescription':
                             'WANDevice',
                             '{urn:schemas-upnp-org:device-1-0}modelName':
                             'DIR-890L',
                             '{urn:schemas-upnp-org:device-1-0}modelNumber':
                             '1',
                             '{urn:schemas-upnp-org:device-1-0}modelURL':
                             'http://www.dlink.com',
                             '{urn:schemas-upnp-org:device-1-0}serialNumber':
                             '120',
                             '{urn:schemas-upnp-org:device-1-0}UDN':
                             'uuid:11111111-2222-3333-4444-555555555555',
                             '{urn:schemas-upnp-org:device-1-0}serviceList':
                             {
                                 '{urn:schemas-upnp-org:device-1-0}service':
                                 {
                                     '{urn:schemas-upnp-org:device-1-0}serviceType':
                                     'urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1',
                                     '{urn:schemas-upnp-org:device-1-0}serviceId':
                                     'urn:upnp-org:serviceId:WANCommonIFC1',
                                     '{urn:schemas-upnp-org:device-1-0}controlURL':
                                     '/soap.cgi?service=WANCommonIFC1',
                                     '{urn:schemas-upnp-org:device-1-0}eventSubURL':
                                     '/gena.cgi?service=WANCommonIFC1',
                                     '{urn:schemas-upnp-org:device-1-0}SCPDURL':
                                     '/WANCommonInterfaceConfig.xml'
                                 }
                             },
                             '{urn:schemas-upnp-org:device-1-0}deviceList':
                             {
                                 '{urn:schemas-upnp-org:device-1-0}device':
                                 {
                                     '{urn:schemas-upnp-org:device-1-0}deviceType':
                                     'urn:schemas-upnp-org:device:WANConnectionDevice:1',
                                     '{urn:schemas-upnp-org:device-1-0}friendlyName':
                                     'WANConnectionDevice',
                                     '{urn:schemas-upnp-org:device-1-0}manufacturer':
                                     'D-Link',
                                     '{urn:schemas-upnp-org:device-1-0}manufacturerURL':
                                     'http://www.dlink.com',
                                     '{urn:schemas-upnp-org:device-1-0}modelDescription':
                                     'WanConnectionDevice',
                                     '{urn:schemas-upnp-org:device-1-0}modelName':
                                     'DIR-890L',
                                     '{urn:schemas-upnp-org:device-1-0}modelNumber':
                                     '1',
                                     '{urn:schemas-upnp-org:device-1-0}modelURL':
                                     'http://www.dlink.com',
                                     '{urn:schemas-upnp-org:device-1-0}serialNumber':
                                     '120',
                                     '{urn:schemas-upnp-org:device-1-0}UDN':
                                     'uuid:11111111-2222-3333-4444-555555555555',
                                     '{urn:schemas-upnp-org:device-1-0}serviceList':
                                     {
                                         '{urn:schemas-upnp-org:device-1-0}service':
                                         [{
                                             '{urn:schemas-upnp-org:device-1-0}serviceType':
                                             'urn:schemas-upnp-org:service:WANEthernetLinkConfig:1',
                                             '{urn:schemas-upnp-org:device-1-0}serviceId':
                                             'urn:upnp-org:serviceId:WANEthLinkC1',
                                             '{urn:schemas-upnp-org:device-1-0}controlURL':
                                             '/soap.cgi?service=WANEthLinkC1',
                                             '{urn:schemas-upnp-org:device-1-0}eventSubURL':
                                             '/gena.cgi?service=WANEthLinkC1',
                                             '{urn:schemas-upnp-org:device-1-0}SCPDURL':
                                             '/WANEthernetLinkConfig.xml'
                                         }, {
                                             '{urn:schemas-upnp-org:device-1-0}serviceType':
                                             'urn:schemas-upnp-org:service:WANIPConnection:1',
                                             '{urn:schemas-upnp-org:device-1-0}serviceId':
                                             'urn:upnp-org:serviceId:WANIPConn1',
                                             '{urn:schemas-upnp-org:device-1-0}controlURL':
                                             '/soap.cgi?service=WANIPConn1',
                                             '{urn:schemas-upnp-org:device-1-0}eventSubURL':
                                             '/gena.cgi?service=WANIPConn1',
                                             '{urn:schemas-upnp-org:device-1-0}SCPDURL':
                                             '/WANIPConnection.xml'
                                         }]
                                     }
                                 }
                             }
                         }
                     },
                     '{urn:schemas-upnp-org:device-1-0}presentationURL':
                     'http://10.0.0.1'
                 }
             }
         })