XMPP FileTransfer – ¿Por qué falla el protocolo bytestreams?

Mi pregunta: Estoy haciendo transferencia de archivos a través de XMPP en Android y iOS a un cliente Spark (Spark 2.6.3). He logrado esto con éxito en android (debido a las bibliotecas agradables), pero todavía no han tenido éxito en iOS. Sin embargo, en ambos dispositivos he notado que la transferencia falla vía bytestreams …

<error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" xml:lang="en">Could not establish socket with any provided host</text></error> 

En Android la transferencia se completa recurriendo a ibb …

 <iq id="DK1IO-19" to="[email protected]/Spark 2.6.3" type="set"><open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_4740809287923906297" stanza="iq"/></iq> 

Además, en Android, cuando envío un archivo de Spark a mi aplicación para Android, parece que funciona bien mediante bytesreams.

En iOS por lo tanto, tendría que codificar la conexión ibb yo mismo, pero ¿por qué bytestreams estar fallando en el primer lugar?

Registros completos (aplicación Android):

 05-15 13:42:04.023: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-9" to="[email protected]/123" from="[email protected]/Spark 2.6.3" type="result"><si xmlns="http://jabber.org/protocol/si"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value><value>http://jabber.org/protocol/ibb</value></field></x></feature></si></iq> 05-15 13:42:04.040: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-10" to="[email protected]/Spark 2.6.3" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.060: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-10" to="[email protected]/123" type="result" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://jabber.org/protocol/xhtml-im"/><feature var="http://jabber.org/protocol/muc"/><feature var="http://jabber.org/protocol/bytestreams"/><feature var="http://jabber.org/protocol/commands"/><feature var="http://jabber.org/protocol/si/profile/file-transfer"/><feature var="http://jabber.org/protocol/si"/><feature var="http://jabber.org/protocol/ibb"/></query></iq> 05-15 13:42:04.080: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-11" to="beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#items"></query></iq> 05-15 13:42:04.090: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-11" from="beta.myCompany.co.uk" to="[email protected]/123"><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> 05-15 13:42:04.100: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-12" to="pubsub.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.110: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq id="DK1IO-10" to="[email protected]/123" type="result" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://www.xmpp.org/extensions/xep-0166.html#ns"/><feature var="urn:xmpp:tmp:jingle"/></query></iq> 05-15 13:42:04.130: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-12" from="pubsub.beta.myCompany.co.uk" to="[email protected]/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="pubsub" name="Publish-Subscribe service" type="service"/><feature var="http://jabber.org/protocol/pubsub"/><feature var="http://jabber.org/protocol/pubsub#collections"/><feature var="http://jabber.org/protocol/pubsub#config-node"/><feature var="http://jabber.org/protocol/pubsub#create-and-configure"/><feature var="http://jabber.org/protocol/pubsub#create-nodes"/><feature var="http://jabber.org/protocol/pubsub#delete-nodes"/><feature var="http://jabber.org/protocol/pubsub#get-pending"/><feature var="http://jabber.org/protocol/pubsub#instant-nodes"/><feature var="http://jabber.org/protocol/pubsub#item-ids"/><feature var="http://jabber.org/protocol/pubsub#meta-data"/><feature var="http://jabber.org/protocol/pubsub#modify-affiliations"/><feature var="http://jabber.org/protocol/pubsub#manage-subscriptions"/><feature var="http://jabber.org/protocol/pubsub#multi-subscribe"/><feature var="http://jabber.org/protocol/pubsub#outcast-affiliation"/><feature var="http://jabber.org/protocol/pubsub#persistent-items"/><feature var="http://jabber.org/protocol/pubsub#presence-notifications"/><feature var="http://jabber.org/protocol/pubsub#publish"/><feature var="http://jabber.org/protocol/pubsub#publisher-affiliation"/><feature var="http://jabber.org/protocol/pubsub#purge-nodes"/><feature var="http://jabber.org/protocol/pubsub#retract-items"/><feature var="http://jabber.org/protocol/pubsub#retrieve-affiliations"/><feature var="http://jabber.org/protocol/pubsub#retrieve-default"/><feature var="http://jabber.org/protocol/pubsub#retrieve-items"/><feature var="http://jabber.org/protocol/pubsub#retrieve-subscriptions"/><feature var="http://jabber.org/protocol/pubsub#subscribe"/><feature var="http://jabber.org/protocol/pubsub#subscription-options"/><feature var="http://jabber.org/protocol/pubsub#default_access_model_open"/><feature var="http://jabber.org/protocol/disco#info"/></query></iq> 05-15 13:42:04.160: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-13" to="broadcast.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.170: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-13" from="broadcast.beta.myCompany.co.uk" to="[email protected]/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="component" type="generic" name="Broadcast service"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/></query></iq> 05-15 13:42:04.190: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-14" to="search.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.200: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-14" from="search.beta.myCompany.co.uk" to="[email protected]/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="directory" type="user" name="User Search"/><feature var="jabber:iq:search"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/rsm"/></query></iq> 05-15 13:42:04.210: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-15" to="conference.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.230: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-15" from="conference.beta.myCompany.co.uk" to="[email protected]/123"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="conference" name="Public Chatrooms" type="text"/><identity category="directory" name="Public Chatroom Search" type="chatroom"/><feature var="http://jabber.org/protocol/muc"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/><feature var="jabber:iq:search"/><feature var="http://jabber.org/protocol/rsm"/></query></iq> 05-15 13:42:04.240: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-16" to="proxy.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/disco#info"></query></iq> 05-15 13:42:04.250: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-16" from="proxy.beta.myCompany.co.uk" to="[email protected] 05-15 13:42:04.250: I/System.out(523): 01:42:04 PM RCV (1093423288): xttools.co.uk/123"><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> 05-15 13:42:04.330: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-17" to="proxy.beta.myCompany.co.uk" type="get"><query xmlns="http://jabber.org/protocol/bytestreams"/></iq> 05-15 13:42:04.341: I/System.out(523): 01:42:04 PM RCV (1093423288): <iq type="result" id="DK1IO-17" from="proxy.beta.myCompany.co.uk" to="[email protected]/123"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 05-15 13:42:04.350: I/System.out(523): 01:42:04 PM SENT (1093423288): <iq id="DK1IO-18" to="[email protected]/Spark 2.6.3" type="set"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_4740809287923906297" mode = "tcp"><streamhost jid="[email protected]/123" host="127.0.0.1" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 05-15 13:42:04.400: D/dalvikvm(523): GC_CONCURRENT freed 361K, 5% free 9330K/9799K, paused 5ms+4ms 05-15 13:42:09.412: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-18" to="[email protected]/123" from="[email protected]/Spark 2.6.3" type="error"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_4740809287923906297" mode="tcp"><streamhost jid="[email protected]/123" host="127.0.0.1" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" xml:lang="en">Could not establish socket with any provided host</text></error></iq> 05-15 13:42:09.430: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-19" to="[email protected]/Spark 2.6.3" type="set"><open xmlns="http://jabber.org/protocol/ibb" block-size="4096" sid="jsi_4740809287923906297" stanza="iq"/></iq> 05-15 13:42:09.451: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-19" to="[email protected]/123" from="[email protected]/Spark 2.6.3" type="result"/> 05-15 13:42:09.470: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-20" to="[email protected]/Spark 2.6.3" type="set"><data xmlns="http://jabber.org/protocol/ibb" seq="0" sid="jsi_4740809287923906297">SGVsbG8sIEFuZHkh</data></iq> 05-15 13:42:09.480: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-20" to="[email protected]/123" from="[email protected]/Spark 2.6.3" type="result"/> 05-15 13:42:09.490: I/System.out(523): 01:42:09 PM SENT (1093423288): <iq id="DK1IO-21" to="[email protected]/Spark 2.6.3" type="set"><close xmlns="http://jabber.org/protocol/ibb" sid="jsi_4740809287923906297"/></iq> 05-15 13:42:09.500: I/System.out(523): 01:42:09 PM RCV (1093423288): <iq id="DK1IO-21" to="[email protected]/123" from="[email protected]/Spark 2.6.3" type="result"/> 

Registros completos (aplicación iOS):

 2012-05-16 10:41:16.988 JabberClient[392:207] RECIEVED IN APP DELEGATE - <iq xmlns="jabber:client" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" to="[email protected]/844b40b3" from="[email protected]/Spark 2.6.3" type="result"><si xmlns="http://jabber.org/protocol/si"><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="submit"><field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value></field></x></feature></si></iq> 2012-05-16 10:41:16.989 JabberClient[392:207] Attempting XEP65 connection to [email protected]/Spark 2.6.3 2012-05-16 10:41:16.990 JabberClient[392:207] TURNSocket DELEGATE STARTING 2012-05-16 10:41:16.991 JabberClient[392:5307] SENT - <iq type="get" to="beta.myCompany.co.uk" id="24C8A655-1B23-4E49-B0D2-557B863C6EB4"><query xmlns="http://jabber.org/protocol/disco#items"/></iq> 2012-05-16 10:41:16.999 JabberClient[392:5307] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" type="result" id="24C8A655-1B23-4E49-B0D2-557B863C6EB4" from="beta.myCompany.co.uk" to="[email protected]/844b40b3"><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> 2012-05-16 10:41:17.000 JabberClient[392:5307] SENT - <iq type="get" to="proxy.beta.myCompany.co.uk" id="A8D03520-2200-4260-A150-910BC70F794A"><query xmlns="http://jabber.org/protocol/disco#info"/></iq> 2012-05-16 10:41:17.004 JabberClient[392:5007] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" type="result" id="A8D03520-2200-4260-A150-910BC70F794A" from="proxy.beta.myCompany.co.uk" to="[email protected]/844b40b3"><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> 2012-05-16 10:41:17.005 JabberClient[392:5007] SENT - <iq type="get" to="proxy.beta.myCompany.co.uk" id="50A73193-944D-402D-B2E4-EEACC537B23B"><query xmlns="http://jabber.org/protocol/bytestreams"/></iq> 2012-05-16 10:41:17.008 JabberClient[392:5007] RECIEVED IN TURNSOCKET - <iq xmlns="jabber:client" type="result" id="50A73193-944D-402D-B2E4-EEACC537B23B" from="proxy.beta.myCompany.co.uk" to="[email protected]/844b40b3"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 2012-05-16 10:41:17.009 JabberClient[392:5007] SENT - <iq type="set" from="[email protected]/844b40b3" to="[email protected]/Spark 2.6.3" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB"><query xmlns="http://jabber.org/protocol/bytestreams" sid="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" mode="tcp"><streamhost xmlns="http://jabber.org/protocol/bytestreams" jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> 2012-05-16 10:41:27.027 JabberClient[392:540b] RECIEVED IN TURN SOCKET - <iq xmlns="jabber:client" id="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" to="[email protected]/844b40b3" from="[email protected]/Spark 2.6.3" type="error"><query xmlns="http://jabber.org/protocol/bytestreams" sid="5CCE541D-A2D2-4115-8D0F-A683EE9B18AB" mode="tcp"><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" lang="en">Could not establish socket with any provided host</text></error></iq> 2012-05-16 10:41:27.028 JabberClient[392:540b] TURN Connection failed! 

Configuración de OpenFire XMPP –

 xmpp.auth.anonymous - true xmpp.client.compression.policy - disabled xmpp.client.idle -1 xmpp.client.idle.ping - false xmpp.domain - beta.myCompany.co.uk xmpp.enabled - true xmpp.externalip - proxy.beta.myCompany.co.uk xmpp.offline.quota - 102400 xmpp.offline.type - bounce xmpp.proxy.enabled - true xmpp.proxy.port - 7777 xmpp.proxy.transfer.required - true xmpp.server.compression.policy - disabled xmpp.server.socket.active - true xmpp.session.conflict-limit - 0 xmpp.session.conflict.limit - 0 xmpp.socket.ssl.active - true 

Actualización 19 de mayo: A continuación se muestran algunos registros desde donde Spark envía con éxito a android (en lugar de viceversa). El streamhost utilizado no es el proxy! Sin embargo, todavía no he logrado replicar esto en iOS, y realmente debería? ¿No debería funcionar proxy?

 RCV (1079219752): <iq id="ktI51-43" to="[email protected]/123" type="set" from="[email protected]/Spark 2.6.3"><query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_1985730781887292843" mode="tcp"><streamhost jid="[email protected]/Spark 2.6.3" host="10.95.xxx.xx" port="7777"/><streamhost jid="proxy.beta.myCompany.co.uk" host="127.0.1.1" port="7777"/></query></iq> SENT (1079219752): <iq id="ktI51-43" to="[email protected]/Spark 2.6.3" type="result"><query xmlns="http://jabber.org/protocol/bytestreams"><streamhost-used jid="[email protected]/Spark 2.6.3" /></query></iq> 

Tenga en cuenta que si intento enviar desde Spark a mi aplicación iOS, cuando se utiliza el streamhost sin proxy, ¡se rechaza la conexión! (Como en el punto 6 de este protocolo SOCKS Protocolo Versión 5 ). Rep es 5 en el siguiente código, (pero debe ser 0).

 UInt8 ver = [NSNumber extractUInt8FromData:data atOffset:0]; UInt8 rep = [NSNumber extractUInt8FromData:data atOffset:1]; 

Hosts File: (nota: he reemplazado algunos números con x's para esta pregunta stackoverflow)

 127.0.0.1 localhost 10.95.xxx.xxx intranet.myCompany.co.uk 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 10.95.xxx.xxx beta.myCompany.co.uk 

Tuve el ajuste incorrecto en mis propiedades de OpenFire. 'Xmpp.externalip' está mal. Necesitaba usar 'xmpp.proxy.enabledip' y establecer esto a la IP pública.

Parece que su servidor está reportando un steamhost (proxy) de 127.0.0.1, o localhost, que no es correcto.

Recientemente vi esto en un servidor openfire que alguien había configurado / etc / hosts para apuntar el nombre del servidor a 127.0.0.1, así que eso es lo que informó a los clientes cuando buscó su propio nombre.

La forma más sencilla de comprobar esto será "ping" y "ping", y ver qué direcciones IP que viene con.

Por ejemplo, si su nombre de servidor era beta.myCompany.co.uk, intentaría (Mientras está conectado al servidor):

Ping beta ping beta.myCompany.co.uk

Si se devuelve con una IP de 127.0.0.1, compruebe que / etc / hosts (o C: \ Windows \ System32 \ drivers \ etc \ hosts si está en windows) y asegúrese de que beta y beta.myCompany.co.uk no están ( O tener los datos apropiados si están allí).

Sí, la transferencia de archivos tendrá este error. No utilice la biblioteca compilada utilizar el código fuente de smack para android llamado amack / smack que le ayudará a rastrear el error. Utilicé el código fuente.

https://github.com/rtreffer/smack/blob/master/source/org/jivesoftware/smack/XMPPConnection.java

  • La mejor manera de crear un cliente de chat Android XMPP en Unity3D
  • Android: asmack (portado) o smack (parcheado)?
  • ¿Cómo implementar el estado de lectura de mensajes como whatsapp blue tick mark?
  • Eventos XMPP en Android
  • XMPP: Asmack Connection PacketListener problema ...
  • ¿Cómo puedo saber si el servidor recibe un mensaje de chat?
  • Inhibición de inicio de sesión La autenticación SASL falló al utilizar el mecanismo DIGEST-MD5 asmack en android
  • Mejor manera de implementar la aplicación de chat utilizando XMPP en Android?
  • No hay respuesta de cliente remoto: error durante la transferencia de archivos usando asmack
  • XMPP con Java Asmack biblioteca que admite X-FACEBOOK-PLATFORM
  • Android y XMPP: Soluciones disponibles actualmente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.