Error de servicio no disponible de OpenFire / XMPP 503 (XEP-0065 usando iOS XMPPFramework)

Problema : Estoy intentando una conexión TURN (XEP-0065) usando el XMPPFramework de iOS y un servidor OpenFire. Quiero poder enviar y recibir archivos. Sin embargo, estoy recibiendo un error 503 de servicio no disponible.

Nota : La base de mi código es del siguiente tutorial:http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-server-setup/

Error de XML :

He depurado a través de TURNSocket.m. Entra en processRequestResponse y tiene el siguiente XML. (Si no me equivoco, ¿esto me lo envió OpenFire en lugar de al revés?) ...

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

¿Por qué hay un error?

Actualizar : XEP-0065 Dice lo siguiente. Aunque este error parece un poco diferente al mío, ¿es relevante? Si es así, ¿cuál es el problema?

Si el Proxy no puede actuar como un StreamHost, el Proxy DEBE devolver un error al Solicitante, el cual DEBERÍA ser<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>

Actualizar : En este momento estoy investigando si el problema es la inclusión o exclusión de un recurso JID en los diversos bits de XML enviados y recuperados. O, alternativamente, ni siquiera tengo un 'desde' en el siguiente xml. Los documentos implican que necesito esto. ¿Es este el problema? No veo una forma actual en el código para hacer un 'desde' ...

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

Actualización 19/04/12 11:00 am : En respuesta a la respuesta de Matt J, estoy publicando más XML. No estoy seguro de que Matt haya solicitado el registro XML completo de lo que se envía y se recupera, pero por si acaso, aquí está. Tenga en cuenta que estos registros no son todos del mismo recorrido (porque cuando lo depuro para obtener los registros XML, esto provoca que se agote el tiempo de espera, así que tengo que comenzar de nuevo)

Expedido :

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

Respuesta :

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

Expedido :

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

Respuesta :

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

Expedido :

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

Respuesta :

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

Además, también obtenemos un streamhost del código de la consulta como este: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"/>

Expedido :

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

Esto no responde, pero me parece bien cuando comparo con el ejemplo 17 deXEP-0065. SIN EMBARGO, si no incluye un recurso en el jID transferido a TurnSocket.m ([email protected] en lugar de [email protected]/spark), entonces esta solicitud de envío cambia adecuadamente

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

y el XML en mi pregunta original anterior es devuelto! (con el código de error 503). Además, me doy cuenta de que este xml contiene 'streamhost', pero en esta etapa, ¿debería contener realmente 'streamhost-used'? ¿Por qué hay un error? ¿Debería o no debería incluir el recurso en el 'a'?

Actualización menor 19/04/2012 15:07 : He agregado xmpp.proxy.transfer.required como falso en OpenFire. Esto se debe a estas discusiones:aquí yaquí. No configuré este servidor (mi colega sí) y no entiendo lo que significa, pero no parece haber hecho ninguna diferencia en mi problema.

Actualización 20/04/2012 10:00 : Mi error 503 creo que está correctamente cuando no incluyo el recurso (de acuerdo conesta). Sin embargo, aunque esto sea así, no estoy seguro de por qué no obtengo respuesta con un jID completo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta