[Pidgin] #1768: File transfer doesn't work with XMPP very often

Pidgin trac at pidgin.im
Sun Jul 1 15:49:22 EDT 2007


#1768: File transfer doesn't work with XMPP very often
------------------------+---------------------------------------------------
  Reporter:  zerwas     |       Owner:       
      Type:  defect     |      Status:  new  
  Priority:  minor      |   Milestone:       
 Component:  libpurple  |     Version:  2.0.2
Resolution:             |    Keywords:       
   Pending:  0          |  
------------------------+---------------------------------------------------
Comment (by bernhard):

 Hi,

 I know a similar problem from Adium and since they both use libpurple,
 they have likely the same reason.

 The problem is that libpurple only sends (on outgoing FT) or uses (on
 incoming FT) '''one''' IP Address.


 == An Example: ==

 Suppose you have two hosts, both are MultiHomed (e.g. are connected to the
 Internet as well as to a local LAN)
 Lets assume the following Setup:

 Host1:
  * Internet IP is 68.208.138.89
  * and the LAN IP is: 192.168.0.3
  * Client: Adium

 Host2:
  * Internet IP is 68.208.138.90
  * and the LAN IP is: 10.0.0.20
  * Client: PSI



 === On filetransfer Host2->Host1, Psi will send the following Message: ===



 {{{
 <iq type="set" to="host1 at jabber/Adium" id="...." >
 <query xmlns="http://jabber.org/protocol/bytestreams" mode="tcp" sid="" >
 <streamhost port="8010" host="10.0.0.20" jid="host2 at jabber" />
 <streamhost port="8010" host="68.208.138.90" jid="host2 at jabber" />
 <streamhost port="6565" host="reflector.amessage.eu"
 jid="reflector.amessage.eu" >
 <proxy xmlns="http://affinix.com/jabber/stream"/>
 </streamhost>
 <fast xmlns="http://affinix.com/jabber/stream"/>
 </query>
 </iq>
 }}}


 Note that it includes 3 IPs (the LAN and Internet, as well as an
 StreamingProxy)
 Now the sane thing to do would be to see which of those ips we can connect
 to and the transfer the file.

 What libpurble does is: it just uses the first IP (the internal one) and
 of course Host1 does not have a Route to 10.0.0.20, so the File Transfer
 fails


 Now, even WORSE:
 === On filetransfer Host1->Host2, Adium will often send the following
 Message: ===


 {{{
 <iq type="set" to="host2 at jabber/Adium" id="...." >
 <query xmlns="http://jabber.org/protocol/bytestreams" mode="tcp" sid="" >
 <streamhost port="8010" host="192.168.0.3" jid="host1 at jabber" />
 <proxy xmlns="http://affinix.com/jabber/stream"/>
 </streamhost>
 <fast xmlns="http://affinix.com/jabber/stream"/>
 </query>
 </iq>
 }}}


 Note that, not only does libpurple send only '''one''' IP even though the
 Host is MultiHomed, the one IP it sends is one Host2 doesn't have a Route
 to.
 So Host2 has no chance at all to establish a connection for filetransfer
 to Host1 and the transfer failes as soon as it recieves the expected ICMP
 Error.

 Greetings,
 Bernhard

-- 
Ticket URL: <http://developer.pidgin.im/ticket/1768#comment:2>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list