Jump to content

UPNP et SOAP/XML : Invalid Action


Recommended Posts

Salut à tous,

j'essai désespéremment d'ajouter un mappage de port avec Upnp (j'en ai besoin dans un projet).

La requête que j'envoie :

POST /Public_UPNP_C3 HTTP/1.0
HOST: 192.168.1.1:8000
Content-Length: 632
Content-Type: text/xml; charset="utf-8"
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"


<?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>
<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"><NewRemoteHost></NewRemoteHost>
<NewExternalPort>2110</NewExternalPort>
<NewProtocol>UDP</NewProtocol>
<NewInternalPort>2110</NewInternalPort>
<NewInternalClient>192.168.1.4</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>UPNPTEST</NewPortMappingDescription>
<NewLeaseDuration>3600</NewLeaseDuration>
</u:AddPortMapping>
</s:Body>
</s:Envelope>

Et la NeufBox me renvoie :

HTTP/1.1 500 Internal Server Error
CONTENT-LENGTH:425
CONTENT-TYPE:text/xml
EXT:
SERVER:Ambit OS/1.0 UPnP/1.0 AMBIT-UPNP/1.0


<?xml version="1.0"?>
<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>401</errorCode><errorDescription>Invalid Action</errorDescription></UPnPError></detail></s:Fault></s:Body></s:Envelope>

Quelle erreur ai-je faite?

Merci à tous.

Link to comment
Share on other sites

401, 'Authorization Required'

a priori, j'imagine qu'il faudrait s'identifier, ou un truc du genre

L'erreur HTTP est HTTP/1.1 500 Internal Server Error

401 c'est le code erreur de Upnp, qui correspond à Invalid Action.

Mais depuis j'ai trouvé le problème : l'adresse ip se donne en network-byte-order, soit 4.1.168.192.

Le port idem je pense.

En fait j'ai trouvé ça en envoyant une requête GetGenericPortMappingEntry, qui donne cet ordre.

Le problème maintenant, c'est que GetGenreicPortMappingEntry me renvoit l'adresse dans l'ordre normal.

Je vais continuer à chercher mais je suis sur la bonne voie.

Link to comment
Share on other sites

Finalement j'ai réussi à éxécuter mes requêtes.

Cependant un mystère plane toujours :

Pourquoi les requêtes addPortMapping et deletePortMapping sont dans la forme normale (unsigned short sous forme décimale, adresses ip dans le bon sens), et les réponses genre GetGenericPortMapping sont dans la forme invers (unsigned short en network byte order sous forme décimale [ex: 936 vaut 43011] et adresse ip inversée)? Y a-t-il une raison logique ou les concepteurs avaient trop fumé?

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...