OpenFire / XMPP 503 Dienst nicht verfügbar Fehler (XEP-0065 mit iOS XMPPFramework)

Problem : Ich versuche eine TURN-Verbindung (XEP-0065) mit dem iOS XMPPFramework und einem OpenFire-Server herzustellen. Ich möchte Dateien senden und empfangen können. Ich erhalte jedoch den Fehler 503, dass der Dienst nicht verfügbar ist.

Hinweis : Die Basis meines Codes ist aus dem folgenden Tutorial:http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-server-setup/

XML-Fehler :

Ich habe über TURNSocket.m debuggt. Es geht in processRequestResponse und hat das folgende XML. (Wenn ich mich nicht irre, wurde dies von OpenFire an mich gesendet und nicht umgekehrt?) ...

<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>

Warum liegt ein Fehler vor?

Aktualisieren : XEP-0065 sagt folgendes. Auch wenn dieser Fehler ein wenig anders aussieht als der meine, ist er relevant? Wenn ja, wo liegt das Problem?

Wenn der Proxy nicht als StreamHost fungieren kann, MUSS der Proxy einen Fehler an den Anforderer zurückgeben, der SOLLTE<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>

Aktualisieren : Im Moment prüfe ich, ob das Einschließen oder Ausschließen einer JID-Ressource in die verschiedenen gesendeten und abgerufenen XML-Bits das Problem ist. Oder alternativ habe ich in der folgenden XML nicht einmal ein 'von'. Die Dokumente implizieren, dass ich das brauche. Ist das das Problem? Ich sehe keinen aktuellen Weg im Code, um ein 'von' zu machen ...

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

Update 19.04.12 11:00 Uhr : Als Antwort auf die Antwort von Matt J veröffentliche ich mehr XML. Ich bin nicht sicher, ob Matt das vollständige XML-Protokoll der gesendeten und abgerufenen Daten angefordert hat, aber für den Fall, hier ist es. Beachten Sie, dass diese Protokolle nicht alle vom selben Durchlauf stammen (da es beim Debuggen zum Abrufen der XML-Protokolle zu Zeitüberschreitungen kommt, muss ich erneut starten).

Geschickt :

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

Antwort :

<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>

Geschickt :

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

Antwort :

<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>

Geschickt :

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

Antwort :

<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>

Außerdem erhalten wir einen Streamhost aus dem Code der Abfrage wie folgt: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"/>

Geschickt :

<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>

Dies gibt keine Antwort, aber es sieht für mich in Ordnung aus, wenn ich mit Beispiel 17 von vergleicheXEP-0065. Wenn Sie jedoch keine Ressource in die an TurnSocket.m übergebene jID aufnehmen ([email protected] statt [email protected]/spark), ändert sich diese Sendeanforderung entsprechend

<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>

und das XML in meiner ursprünglichen Frage oben wird zurückgegeben! (mit dem 503 Fehlercode). Außerdem stelle ich fest, dass diese XML 'streamhost' enthält, aber sollte sie zum jetzigen Zeitpunkt tatsächlich 'streamhost-used' enthalten? Warum liegt ein Fehler vor? Sollte oder sollte ich die Ressource nicht in das 'to' aufnehmen?

Kleinere Aktualisierung 19.04.2012 15.07 : Ich habe xmpp.proxy.transfer.required auf OpenFire als false hinzugefügt. Dies ist auf folgende Diskussionen zurückzuführen:Hier undHier. Ich habe diesen Server nicht eingerichtet (mein Kollege) und ich verstehe nicht, was das bedeutet, aber es scheint keinen Unterschied für mein Problem zu haben.

Update 20/04/2012 10:00 : Mein 503 Fehler ist meiner Meinung nach richtig, wenn ich die Ressource nicht einbeziehe (lautdiese). Auch wenn dies so ist, bin ich mir nicht sicher, warum ich keine Antwort mit einer vollständigen JID bekomme.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage