[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