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”>
<file xmlns=“http://jabber.org/protocol/si/profile/file-transfer” name=“jniwrap.dll” size=“45056”>
<desc>Sending file</desc>
</file>
<feature xmlns=“http://jabber.org/protocol/feature-neg”>
<x xmlns=“jabber:x:data” type=“form”>
<field var=“stream-method” type=“list-multi”>
<option>
<value>[http://jabber.org/protocol/bytestreams]
</option>
<option>
<value>[http://jabber.org/protocol/ibb]
</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”>
<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]
</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”/>
<feature var=“http://jabber.org/protocol/muc”/>
<feature var=“http://jabber.org/protocol/disco#info”/>
<feature var=“http://jabber.org/protocol/disco#items”/>
</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”/>
<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”/>
</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”/>
<feature var=“http://jabber.org/protocol/bytestreams”/>
<feature var=“http://jabber.org/protocol/disco#info”/>
</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.