Hello,
I found that upnp on my router does not work. It seems Tixati sends upnp elements in wrong order, not as defined by my device specification.
Output of my router (excerpt from
http://192.168.0.1/WANIPConnection.xml
):
AddPortMapping NewRemoteHost in RemoteHost NewExternalPort in ExternalPort NewProtocol in PortMappingProtocol NewInternalPort in InternalPort NewInternalClient in InternalClient NewEnabled in PortMappingEnabled NewPortMappingDescription in PortMappingDescription NewLeaseDuration in PortMappingLeaseDuration
What Tixati sends (from Tixati upnp log):
[00:16:00] UPNP mapping UDP port 26676 on gateway 192.168.0.1 - sending AddPortMapping to service WANIPConnection:1
[00:16:00] UPNP mapping UDP port 26676 on gateway 192.168.0.1 - sending POST command to
http://192.168.0.1:80/WANIPConnection
<s:Envelope xmlns:s="
http://schemas.xmlsoap.org/soap/envelope/
" s:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/
">
<s:Body>
<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
<NewEnabled>1</NewEnabled>
<NewExternalPort>26676</NewExternalPort>
<NewInternalClient>192.168.0.27</NewInternalClient>
<NewInternalPort>26676</NewInternalPort>
<NewLeaseDuration>898</NewLeaseDuration>
<NewPortMappingDescription>Tixati</NewPortMappingDescription>
<NewProtocol>UDP</NewProtocol>
<NewRemoteHost></NewRemoteHost>
</u:AddPortMapping>
</s:Body>
</s:Envelope>
[00:16:00] UPNP mapping UDP port 26676 on gateway 192.168.0.1 - got HTTP response code 500
[00:16:00] UPNP mapping UDP port 26676 on gateway 192.168.0.1 - got reply:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="
http://schemas.xmlsoap.org/soap/envelope/
" s:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/
"><s:Body><s:Fault><faultcode>s:Client</faultcode><faultstring>UPnPError</faultstring><detail><UPnPError xmlns="urn:schemas-upnp-org:control-1-0"><errorCode>402</errorCode><errorDescription>See UPnP Device Architecture section on Control.e:1</errorDescription></UPnPError></detail></s:Fault></s:Body></s:Envelope>
[00:16:00] UPNP mapping UDP port 26676 on gateway 192.168.0.1 - command failed with error 402 See UPnP Device Architecture section on Control.e:1
If I send it manually as:
<NewRemoteHost></NewRemoteHost>
<NewExternalPort>26676</NewExternalPort>
<NewProtocol>TCP</NewProtocol>
<NewInternalPort>26676</NewInternalPort>
<NewInternalClient>192.168.0.27</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>Tixati</NewPortMappingDescription>
<NewLeaseDuration>898</NewLeaseDuration>
Then it is succesful:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope
xmlns:s="
http://schemas.xmlsoap.org/soap/envelope/
"
s:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/
">
<s:Body>
<m:AddPortMappingResponse
xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1">
</m:AddPortMappingResponse>
</s:Body>
</s:Envelope>
From Upnp spec, it seems this has changed in version 2.0:
2.5.4 Ordering of Elements
The order of XML elements in device and service description documents shall adhere to the
order as defined in the corresponding specification as defined by the working committee for
that device or service type. Furthermore, the order of elements (e.g. arguments) in control
messages and in their responses shall adhere to the order defined in the device’s service
description document.
Note: UPnP 1.0 does NOT REQUIRE that the order of XML elements in device and service
description documents adheres to the order as defined in the corresponding schema (as
defined by the working committee) for that device or service type. However, it does
REQUIRE that control messages and responses are ordered according to the corresponding
device’s service description, a REQUIREMENT that is sometimes overlooked. Therefore,
when receiving messages from UPnP 1.0 services, control points should be able to process
out-of-order elements; and when transmitting messages to UPnP 1.0 services, control points
shall send elements in the order defined by that particular device’s service description.
https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf
Tixati v.2.86.
Thanks for looking into it.