OpenFire/XMPP 503 service indisponible erreur (XEP-0065 l'utilisation d'iOS XMPPFramework)

Problème : je tente un TOUR de Connexion (XEP-0065) à l'aide de l'iOS XMPPFramework et un Serveur OpenFire. Je veux être en mesure d'envoyer et de recevoir des fichiers. Cependant, je reçois un 503 service indisponible erreur.

Note : La base de mon code est de le tutoriel suivant : http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-server-setup/

Erreur XML :

J'ai débogué par TURNSocket.m. Il va dans processRequestResponse et a le code XML suivant. (Si je ne me trompe pas, cela a été envoyée à partir d'OpenFire pour moi, plutôt que vice versa?) ...

<iq xmlns="jabber:client"
    type="error" 
    id="03CC977E-2645-4E87-AE78-536D985CA2B5" 
    from="[email protected]"
    to="[email protected]/12f10b69">
    <query xmlns="http://jabber.org/protocol/bytestreams" 
        sid="03CC977E-2645-4E87-AE78-536D985CA2B5"
        mode="tcp">
        <streamhost jid="proxy.beta.myCompany.co.uk"
            host="127.0.1.1"
            port="7777"/>
    </query>
    <error code="503"
        type="cancel">
        <service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
    </error>
</iq>

Pourquoi est-il une erreur?

Mise à jour : XEP-0065 dit ce qui suit. Même si cette erreur est un peu différente de la mienne, est-il pertinent? Si oui, quel est le problème?

Si le Proxy est pas en mesure d'agir en tant que StreamHost, le Proxy DOIT renvoyer
une erreur à la charge du Demandeur, qui DOIT être <not-allowed/>.

<iq from='[email protected]/foo'
    id='uj2c15z9'
    to='streamer.example.com'
    type='error'>
  <error type='cancel'>
    <not-allowed 
        xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>

Mise à jour : En ce moment je suis à la recherche de savoir si l'inclusion ou l'exclusion d'un JID de ressources dans les différents envoyé et récupéré des morceaux de XML est le problème. Ou sinon, je n'ai même pas de " de " dans le code xml suivant. les docs impliquent j'ai besoin de cette. Est-ce la question? Je ne vois pas une façon actuelle dans le code pour faire un 'de' ...

<iq type="get" 
    to="beta.myCompany.co.uk"
    id="215784CF-81A8-403E-89BF-455C926BEAE5">
    <query xmlns="http://jabber.org/protocol/disco#items"/>
</iq>

Mise à jour 19/04/12 11:00 am : En réponse à Matt J réponse, je suis à la publication de plus d'XML. Je ne suis pas sûr que Matt a demandé le XML complet du journal de ce qui est envoyé et récupéré, mais juste au cas où, c'est ici. Notez que ces journaux ne sont pas tous de la même exécution (parce que quand je debug pour obtenir les journaux XML, il entraîne des délais d'attente donc je dois recommencer)

Envoyé :

<iq type="get" to="beta.myCompany.co.uk" 
    id="082A1987-384F-43CD-9E7B-A2C0E31F2CA8">
    <query xmlns="http://jabber.org/protocol/disco#items"/>
</iq>

Réponse :

<iq xmlns="jabber:client" 
    type="result" 
    id="18EED477-B0E4-492D-89CF-CA692FCF13AD"
    from="beta.myCompany.co.uk" 
    to="[email protected]/72d23cd0">
    <query xmlns="http://jabber.org/protocol/disco#items">
        <item jid="pubsub.beta.myCompany.co.uk" 
            name="Publish-Subscribe service"/>
        <item jid="broadcast.beta.myCompany.co.uk" 
            name="Broadcast service"/>
        <item jid="search.beta.myCompany.co.uk" 
            name="User Search"/>
        <item jid="conference.beta.myCompany.co.uk" 
            name="Public Chatrooms"/>
        <item jid="proxy.beta.myCompany.co.uk" 
            name="Socks 5 Bytestreams Proxy"/>
    </query>
</iq>

Envoyé :

<iq type="get" 
    to="proxy.beta.myCompany.co.uk" 
    id="F1B5370C-234F-4F2D-93E7-D60D2C35D063">
    <query xmlns="http://jabber.org/protocol/disco#info"/>
</iq>

Réponse :

<iq xmlns="jabber:client" 
    type="result" 
    id="F1B5370C-234F-4F2D-93E7-D60D2C35D063"
    from="proxy.beta.myCompany.co.uk" 
    to="[email protected]/32276f6">
    <query xmlns="http://jabber.org/protocol/disco#info">
        <identity category="proxy" 
            name="SOCKS5 Bytestreams Service" 
            type="bytestreams"/>
            <feature var="http://jabber.org/protocol/bytestreams"/>
            <feature var="http://jabber.org/protocol/disco#info"/>
    </query>
</iq>

Envoyé :

<iq type="get" 
    to="proxy.beta.myCompany.co.uk" 
    id="84904B7D-2BB2-4B8E-90BE-BE0F5A934764">
    <query xmlns="http://jabber.org/protocol/bytestreams"/>
</iq>

Réponse :

<iq xmlns="jabber:client" 
    type="result" 
    id="B412512B-FA27-4531-88BE-2FC0A26E6ED2"
    from="proxy.beta.myCompany.co.uk" 
    to="[email protected]/45ca808d">
    <query xmlns="http://jabber.org/protocol/bytestreams"/>
</iq>

de plus, nous avons également obtenir un streamhost du code de la requête comme ceci: NSXMLElement *streamhost = [query elementForName:@"streamhost"];

<streamhost xmlns="http://jabber.org/protocol/bytestreams"
    jid="proxy.beta.myCompany.co.uk"
    host="127.0.1.1" 
    port="7777"/>

Envoyé :

<iq type="set" 
    to="[email protected]/spark" 
    id="DD96A581-BFA3-47BC-A3C0-D26AD48D7442">
    <query xmlns="http://jabber.org/protocol/bytestreams" 
        sid="DD96A581-BFA3-47BC-A3C0-D26AD48D7442" 
        mode="tcp">
        <streamhost xmlns="http://jabber.org/protocol/bytestreams"
            jid="proxy.beta.myCompany.co.uk" 
            host="127.0.1.1"
            port="7777"/>
    </query>
</iq>

Cela donne pas de réponse, mais il semble ok pour moi quand je le compare à l'exemple 17 de XEP-0065. TOUTEFOIS, si vous n'êtes pas inclure une ressource sur le jID passé dans TurnSocket.m ([email protected] plutôt que de [email protected]/spark), alors cette demande d'envoi des changements de façon appropriée

<iq type="set"
     to="[email protected]" **LOOK! NO RESOURCE!**
     id="5D08B85E-CA78-4AA8-A893-C1DC571A9808">
     <query xmlns="http://jabber.org/protocol/bytestreams" 
        sid="5D08B85E-CA78-4AA8-A893-C1DC571A9808" 
        mode="tcp">
        <streamhost xmlns="http://jabber.org/protocol/bytestreams"
            jid="proxy.beta.myCompany.co.uk"
            host="127.0.1.1"
            port="7777"/>
      </query>
</iq>

et le XML dans ma question initiale est de retour! (avec le 503 du code d'erreur). En outre, je remarque que ce xml contient 'streamhost", mais à ce stade, il en fait contenir des "streamhost utilisée"? Pourquoi est-il une erreur? Devrais ou ne devrais-je pas inclure la ressource dans le 'à'?

Mise à Jour mineure 19/04/2012 15:07 : j'ai ajouté xmpp.proxy.de transfert.nécessaire comme faux sur OpenFire. C'est en raison de ces discussions: ici et ici. Je n'ai pas configurer ce serveur (mon collègue a fait) et je ne comprends pas ce que cela signifie, mais il ne semble pas avoir fait toute la différence à mon problème.

Mise à jour 20/04/2012 10:00 : Mon erreur 503, je pense, est bien là quand je ne comprend pas la ressource (selon cette). Même si c'est aussi bien, je ne suis pas sûr pourquoi je n'obtiens pas de réponse avec un jID.

Pour répondre à la première partie de votre question, un client n'envoie jamais un 'de' - il est ajouté par le serveur, lorsqu'il reçoit une strophe de la part du client, le client est en pleine JID (ie. y compris une ressource).
Je pense que si vous pouviez obtenir une information plus complète sur XML journal de ce qui est envoyé/reçu lorsque vous essayez d'effectuer un transfert, qui pourrait l'aider. On dirait que vous pourriez être l'envoi d'une strophe à l'acquéreur qui doit aller vers le proxy.
Merci pour votre réponse Matt! Je suis à présent convaincu que nous pouvons apporter à cette résolution. Je vais commencer à mettre ensemble un XML complet du Journal. Cependant, je ne suis pas sûr si lorsque je passe la JID en TurnSocket.m, si elle doit avoir une ressource ou pas? e.g friendsUsername@domaine ou friendsUsername@domaine/de la ressource.
Salut Matt. Veuillez noter que j'ai répondu à mon problème initial, mais pour plus de clarté, j'ai commencé une nouvelle question à se concentrer sur la partie qui est actuellement de me causer des problèmes. Si vous souhaitez prendre un coup d'oeil, c'est ici ... stackoverflow.com/questions/10297009/...

OriginalL'auteur |