diff --git a/aioupnp/serialization/soap.py b/aioupnp/serialization/soap.py index 9ee2c08..e212e79 100644 --- a/aioupnp/serialization/soap.py +++ b/aioupnp/serialization/soap.py @@ -7,7 +7,7 @@ from aioupnp.constants import XML_VERSION, ENVELOPE, BODY, FAULT, CONTROL from aioupnp.serialization.xml import xml_to_dict CONTENT_NO_XML_VERSION_PATTERN = re.compile( - "(\)".encode() + b"(\<([^:>]*)\:Envelope xmlns\:[^:>]*=\"http\:\/\/schemas\.xmlsoap\.org\/soap\/envelope\/\"(\s*.)*\>)" ) diff --git a/tests/generate_test.py b/tests/generate_test.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/serialization/test_soap.py b/tests/serialization/test_soap.py index 8193453..fe06911 100644 --- a/tests/serialization/test_soap.py +++ b/tests/serialization/test_soap.py @@ -114,3 +114,11 @@ class TestSOAPSerialization(unittest.TestCase): raised = True self.assertEqual(str(err), expected) self.assertTrue(raised) + + def test_soap_env_namespace_response(self): + # tp link devices use `SOAP-ENV` namespace rather than the normal `s` + response = b'HTTP/1.1 200 OK\r\nCONNECTION: close\r\nSERVER: ipos/7.0 UPnP/1.0 TL-WR940N/TL-WR941ND/3.0\r\nCONTENT-LENGTH: 404\r\nCONTENT-TYPE: text/xml; charset="utf-8"\r\n\r\n\n\n\n100.100.100.100\n\n' + self.assertDictEqual( + deserialize_soap_post_response(response, 'GetExternalIPAddress', self.st.decode()), + {'NewExternalIPAddress': '100.100.100.100'} + )