Smack client can not transfer file as an initiator

Hi,

I use Spark as the jabber client 2.5.4 and openfire 3.3.3 as the jabber server. And also I have another jabber client of gaim.

The spark client, gaim client, and the openfire server, all of which run at localhost.

Suppose I login as Tom through spark client, and login as Fred through gaim client.

Now i want to make an experiment with file transfer between Tom and Fred.

File transfer from Fred to Tom can succeed,while the opposite direction

always holds–when Tom make a file transfer request to Fred and Fred

accept that request, the file transfer bar holds. If I use some other

java jabber client such as JBother to login with Tom, the file transfer

still can not succeed. Has anyone here met such a phoenomena?

Following is the smack debug info when Tom start the request as the initiator:

send:

<iq id=“6tPpX-21” to=“fred@localhost” type=“get”>

<vCard xmlns=“vcard-temp”>

<timestamp>1190865873923</timestamp>

<JABBERID>fred@localhost</JABBERID>

<FN/>

</vCard>

</iq>

receive:

<iq id=“6tPpX-21” to=“tom@localhost/spark” from=“fred@localhost” type=“result”>

<vCard xmlns=“vcard-temp”>

<timestamp>1190865873923</timestamp>

<JABBERID>fred@localhost</JABBERID>

<FN/>

</vCard>

</iq>

send:

<iq id=“6tPpX-22” to=“fred@localhost/Home” from=“tom@localhost/spark” type=“set”>

<si xmlns=“http://jabber.org/protocol/si” id=“jsi_5649175227595532860” profile=“http://jabber.org/protocol/si/profile/file-transfer”>

&lt;file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="jniwrap.dll" size="45056"&gt;

<desc>Sending file</desc>

</file>

&lt;feature xmlns="http://jabber.org/protocol/feature-neg"&gt;

<x xmlns=“jabber:x:data” type=“form”>

<field var=“stream-method” type=“list-multi”>

<option>

        &lt;value&gt;http://jabber.org/protocol/bytestreams</value>

</option>

<option>

        &lt;value&gt;http://jabber.org/protocol/ibb</value>

</option>

</field>

</x>

</feature>

</si>

</iq>

send:

<iq id=“6tPpX-23” to=“localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/disco#items”/>

</iq>

receive:

<iq id=“6tPpX-22” to=“tom@localhost/spark” from=“fred@localhost/Home” type=“result”>

<si xmlns=“http://jabber.org/protocol/si”>

&lt;feature xmlns="http://jabber.org/protocol/feature-neg"&gt;

<x xmlns=“jabber:x:data” type=“submit”>

<field var=“stream-method”>

      &lt;value&gt;http://jabber.org/protocol/bytestreams</value>

</field>

</x>

</feature>

</si>

</iq>

send:

<iq id=“6tPpX-24” to=“conference.localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/disco#info”/>

</iq>

receive:

<iq id=“6tPpX-23” to=“tom@localhost/spark” from=“localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/disco#items”>

<item jid=“conference.localhost” name="???"/>

<item jid=“pubsub.localhost” name=“Publish-Subscribe service”/>

<item jid=“proxy.localhost” name=“Socks 5 Bytestreams Proxy”/>

<item jid=“search.localhost” name=“User Search”/>

</query>

</iq>

send:

<iq id=“6tPpX-25” to=“pubsub.localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/disco#info”/>

</iq>

receive:

<iq id=“6tPpX-24” to=“tom@localhost/spark” from=“conference.localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/disco#info”>

<identity category=“conference” name=“Public Chatrooms” type=“text”/>

&lt;feature var="http://jabber.org/protocol/muc"/&gt;

&lt;feature var="http://jabber.org/protocol/disco#info"/&gt;

&lt;feature var="http://jabber.org/protocol/disco#items"/&gt;

</query>

</iq>

send:

<iq id=“6tPpX-26” to=“proxy.localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/disco#info”/>

</iq>

receive:

<iq id=“6tPpX-25” to=“tom@localhost/spark” from=“pubsub.localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/disco#info”>

<identity category=“pubsub” name=“Publish-Subscribe service” type=“service”/>

&lt;feature var="http://jabber.org/protocol/pubsub"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#collections"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#config-node"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#create-and-configure"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#create-nodes"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#delete-nodes"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#get-pending"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#instant-nodes"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#item-ids"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#meta-data"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#modify-affiliations"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#manage-subscriptions"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#multi-subscribe"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#outcast-affiliation"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#persistent-items"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#presence-notifications"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#publish"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#publisher-affiliation"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#purge-nodes"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#retract-items"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#retrieve-affiliations"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#retrieve-default"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#retrieve-items"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#retrieve-subscriptions"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#subscribe"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#subscription-options"/&gt;

&lt;feature var="http://jabber.org/protocol/pubsub#default_access_model_open"/&gt;

</query>

</iq>

receive:

<iq id=“6tPpX-26” to=“tom@localhost/spark” from=“proxy.localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/disco#info”>

<identity category=“proxy” name=“SOCKS5 Bytestreams Service” type=“bytestreams”/>

&lt;feature var="http://jabber.org/protocol/bytestreams"/&gt;

&lt;feature var="http://jabber.org/protocol/disco#info"/&gt;

</query>

</iq>

send:

<iq id=“6tPpX-27” to=“search.localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/disco#info”/>

</iq>

send:

<iq id=“6tPpX-28” to=“proxy.localhost” type=“get”>

<query xmlns=“http://jabber.org/protocol/bytestreams”/>

</iq>

receive:

<iq id=“6tPpX-27” to=“tom@localhost/spark” from=“search.localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/disco#info”>

<identity category=“directory” name=“User Search” type=“user”/>

<feature var=“jabber:iq:search”/>

</query>

</iq>

send:

<iq id=“6tPpX-29” to=“fred@localhost/Home” from=“tom@localhost/spark” type=“set”>

<query xmlns=“http://jabber.org/protocol/bytestreams” sid=“jsi_5649175227595532860” mode=“tcp”>

<streamhost jid=“proxy.localhost” host=“127.0.0.1” port=“7777”/>

</query>

</iq>

receive:

<iq id=“6tPpX-28” to=“tom@localhost/spark” from=“proxy.localhost” type=“result”>

<query xmlns=“http://jabber.org/protocol/bytestreams”>

<streamhost jid=“proxy.localhost” host=“127.0.0.1” port=“7777”/>

</query>

</iq>

Then the file transfer holds all along.

PS, The files transfer between two spark is all right.