XMPP SI FileTransfer服务传输文件过程详解

转载 2013年12月02日 23:52:34
所使用的客户端:jitsi , 服务端openfire
涉及协议:socks 5  XEP-0096: SI File Transfer  XEP-0065: SOCKS5 Bytestreams


1.场景:
账号IM4向账号IM3发送一个文件

2.IM4通过disco询问IM3的能力
[html] view plaincopy
  1. <iq id="KAmV1-760" to="im3@jiale.360buy.com/WIN-0EU8JCDSM5L" type="get" from="im4@jiale.360buy.com/jitsi-22c45pc">  
  2.   <query xmlns="http://jabber.org/protocol/disco#info" node="http://psi-im.org/caps#caps-b75d8d2b25" />  
  3. </iq>  


3.IM3回答
[html] view plaincopy
  1. <iq xmlns="jabber:client" type="result" to="im4@jiale.360buy.com/jitsi-22c45pc" id="KAmV1-760">  
  2.   <query xmlns="http://jabber.org/protocol/disco#info" node="http://psi-im.org/caps#caps-b75d8d2b25">  
  3.     <identity category="client" type="pc" name="Psi" />  
  4.     <feature var="http://jabber.org/protocol/bytestreams" />  
  5.     <feature var="http://jabber.org/protocol/si" />  
  6.     <feature var="http://jabber.org/protocol/si/profile/file-transfer" />  
  7.     <feature var="http://jabber.org/protocol/disco#info" />  
  8.     <feature var="http://jabber.org/protocol/commands" />  
  9.     <feature var="http://jabber.org/protocol/rosterx" />  
  10.     <feature var="http://jabber.org/protocol/muc" />  
  11.     <feature var="jabber:x:data" />  
  12.   </query>  
  13. </iq>  


4.IM4向IM3发送文件信息,并询问可能的传输方式
[html] view plaincopy
  1. <iq id="KAmV1-761" to="im3@jiale.360buy.com/jitsi-q653qg" from="im4@jiale.360buy.com/jitsi-22c45pc" type="set">  
  2.   <si xmlns="http://jabber.org/protocol/si" id="jsi_2828152957982417029" mime-type="application/octet-stream" profile="http://jabber.org/protocol/si/profile/file-transfer">  
  3.     <file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="91assistant_for_android.exe" size="37217848">  
  4.       <desc>Sending file</desc>  
  5.     </file>  
  6.     <feature xmlns="http://jabber.org/protocol/feature-neg">  
  7.       <x xmlns="jabber:x:data" type="form">  
  8.         <field var="stream-method" type="list-multi">  
  9.           <option>  
  10.             <value>http://jabber.org/protocol/bytestreams</value>  
  11.           </option>  
  12.           <option>  
  13.             <value>http://jabber.org/protocol/ibb</value>  
  14.           </option>  
  15.         </field>  
  16.       </x>  
  17.     </feature>  
  18.   </si>  
  19. </iq>  


5.IM3回应,并列出它支持的传输方法
[html] view plaincopy
  1. <iq id="KAmV1-761" to="im4@jiale.360buy.com/jitsi-22c45pc" from="im3@jiale.360buy.com/jitsi-q653qg" type="result">  
  2.   <si xmlns="http://jabber.org/protocol/si">  
  3.     <feature xmlns="http://jabber.org/protocol/feature-neg">  
  4.       <x xmlns="jabber:x:data" type="submit">  
  5.         <field var="stream-method">  
  6.           <value>http://jabber.org/protocol/bytestreams</value>  
  7.           <value>http://jabber.org/protocol/ibb</value>  
  8.         </field>  
  9.       </x>  
  10.     </feature>  
  11.   </si>  
  12. </iq>  


6.IM4通过disco询问XMPP服务的能力
[html] view plaincopy
  1. <iq id="KAmV1-762" to="jiale.360buy.com" type="get">  
  2.   <query xmlns="http://jabber.org/protocol/disco#items">  
  3.   </query>  
  4. </iq>  


7.服务器回应
[html] view plaincopy
  1. <iq type="result" id="KAmV1-762" from="jiale.360buy.com" to="im4@jiale.360buy.com/jitsi-22c45pc">  
  2.   <query xmlns="http://jabber.org/protocol/disco#items">  
  3.     <item jid="conference.jiale.360buy.com" name="公共房间" />  
  4.     <item jid="rtpbridge.jiale.360buy.com" name="Media Proxy Service" />  
  5.     <item jid="yahoo.jiale.360buy.com" name="Yahoo! Transport" />  
  6.     <item jid="relay.jiale.360buy.com" name="JingleRelayNode" />  
  7.     <item jid="broadcast.jiale.360buy.com" name="Broadcast service" />  
  8.     <item jid="proxy.jiale.360buy.com" name="Socks 5 Bytestreams Proxy" />  
  9.     <item jid="sipark.jiale.360buy.com" name="SIP Controller" />  
  10.     <item jid="search.jiale.360buy.com" name="User Search" />  
  11.     <item jid="manager.jiale.360buy.com" name="Client Control Manager" />  
  12.     <item jid="msn.jiale.360buy.com" name="MSN Transport" />  
  13.     <item jid="workgroup.jiale.360buy.com" name="Fastpath" />  
  14.     <item jid="pubsub.jiale.360buy.com" name="Publish-Subscribe service" />  
  15.     <item jid="xmpp.jiale.360buy.com" name="XMPP Transport" />  
  16.     <item jid="logger.jiale.360buy.com" name="Remote Logger" />  
  17.     <item jid="updater.jiale.360buy.com" name="Spark Updater" />  
  18.   </query>  
  19. </iq>  


8.IM4获取文件代理服务的中继端口
[html] view plaincopy
  1. <iq id="KAmV1-778" to="proxy.jiale.360buy.com" type="get">  
  2.   <query xmlns="http://jabber.org/protocol/bytestreams" />  
  3. </iq>  


9.文件代理服务回应
[html] view plaincopy
  1. <iq type="result" id="KAmV1-778" from="proxy.jiale.360buy.com" to="im4@jiale.360buy.com/jitsi-22c45pc">  
  2.   <query xmlns="http://jabber.org/protocol/bytestreams">  
  3.     <streamhost jid="proxy.jiale.360buy.com" host="10.28.0.143" port="7777" />  
  4.   </query>  
  5. </iq>  


10.IM4告知IM3两个可用的streamhost,一个是自身开启的,一个是proxy服务的
[html] view plaincopy
  1. <iq id="KAmV1-779" to="im3@jiale.360buy.com/jitsi-q653qg" from="im4@jiale.360buy.com/jitsi-22c45pc" type="set">  
  2.   <query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_2828152957982417029" mode="tcp">  
  3.     <streamhost jid="im4@jiale.360buy.com/jitsi-22c45pc" host="10.28.0.142" port="7777" />  
  4.     <streamhost jid="proxy.jiale.360buy.com" host="10.28.0.143" port="7777" />  
  5.   </query>  
  6. </iq>  

11.IM3(接收文件方)尝试连接streamhost列表中的服务,由于两者不在一个局域网,无法P2P直连,最终IM3连接proxy服务(10.28.0.143:7777)进行socks5协商
[html] view plaincopy
  1. 1.IM3发送5,1,0   
  2. 2.proxy接收到5,1,0,发送5,0   
  3. 3.IM3接收到5,0,发送5,1,0,3,40(digest长度),digest,0,0   
  4. 4.proxy接收到5,1,0,3,40(digest长度),digest,0,0,发送5,0,0,3,40(digest长度),digest,0,0   


12.协商完毕,IM3选择此服务作为streamhost并通知IM4,如果协商不成功,IM3会选择其他的方式,例如IBB(带内传输)等方式
[html] view plaincopy
  1. <iq id="KAmV1-779" to="im4@jiale.360buy.com/jitsi-22c45pc" from="im3@jiale.360buy.com/jitsi-q653qg" type="result">  
  2.   <query xmlns="http://jabber.org/protocol/bytestreams">  
  3.     <streamhost-used jid="proxy.jiale.360buy.com" />  
  4.   </query>  
  5. </iq>  


13.IM4(发送文件方)连接proxy服务(10.28.0.143:7777)进行socks5协商,过程同第11步。此时proxy同时持有IM4与IM3的socks5连接

14.IM4协商完毕,通知proxy开启中继服务
[html] view plaincopy
  1. <iq id="O7qEb-567" to="proxy.jiale.360buy.com" from="im4@jiale.360buy.com/jitsi-3e7ntbt" type="set">  
  2.   <query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_1333521664531359830">  
  3.     <activate>im3@jiale.360buy.com/jitsi-2vcng6</activate>  
  4.   </query>  
  5. </iq>  


15.proxy响应IM4,告知proxy服务已经准备好了
[html] view plaincopy
  1. <iq type="result" id="O7qEb-567" from="proxy.jiale.360buy.com" to="im4@jiale.360buy.com/jitsi-3e7ntbt"/>  


16.IM4开始发送文件字节流数据,由proxy转发给连入的IM3
17.proxy察觉到IM4已经发送完毕(read=-1),于是断开连接,文件传输结束。

XMPP之文件传输报文

最近在做文件传输,遇到只能发送文件到spark,spark发送文件来不能接收,要么一直等待,要么发一下就要重试,这天终于找到问题的所在了 我的openfire里面的:服务器->服务器设置->文件传输设...
  • cainiaobegin
  • cainiaobegin
  • 2017年04月04日 22:01
  • 228

【PSI/SI学习系列】2.PSI/SI深入学习2——PSI信息解析(PAT,PMT,CAT)

PSI 信息 INFORMATION OF PSI "PSI是对单一TS流的描述,是TS流中的引导信息"          PSI信息由节目关联表PAT、条件接收表CAT、节目映射表PMT和网络信息表...
  • u010090005
  • u010090005
  • 2013年10月24日 10:37
  • 5254

SI和DI寄存器的用途

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。 但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目...
  • syflyhua
  • syflyhua
  • 2013年06月14日 16:35
  • 2680

汇编入门学习笔记 (六)—— si、di,双重循环

疯狂的暑假学习之  汇编入门学习笔记 (六)—— si、di,双重循环 参考: 《汇编语言》 王爽 第7章 1. and和or指令,与[bx+idata] ...
  • billvsme
  • billvsme
  • 2014年07月09日 01:24
  • 1620

【PSI/SI学习系列】2.PSI/SI深入学习1——预备知识

写在前面的话       其实PSI/SI相关内容早在两个月前就开始接触了,当时只是对PSI/SI基础的一些了解,对所谓的“描述符”“段”这些概念还是非常模糊的。这次借“考试”之机,拿起纸质版的...
  • simonjay2007
  • simonjay2007
  • 2014年03月25日 23:42
  • 2611

【翻译】【Ionic】上传,FileTransfer学习

英文原文及GitHub下载地址点我;FileTransfer对象提供一种使用HTTP多部分 POST或者PUT请求上传文件的方式,并且,可以下载文件;Propertiesonprogress:无论是否...
  • River_Continent
  • River_Continent
  • 2017年07月19日 19:08
  • 581

ts流psi/si:学习笔记2

PSI/SI 深入学习 BASIC KNOWLEDGE LEARNING OF PSI/SI  PSI信息 INFORMATION OF PSI "PS...
  • z1002137615
  • z1002137615
  • 2015年11月23日 12:37
  • 904

SI与软件:不得不说的故事

SI与软件:不得不说的故事 张振 2002/03/04   由于脱胎于硬件代理,SI(系统集成商)在开始的时候对软件并没有多少感觉,客户不认可,集成商自己也不在乎。那时候的SI徜徉在丰厚的硬件利润...
  • myspacedemen
  • myspacedemen
  • 2014年08月01日 11:32
  • 1421

AGPS中的SI、NI模式

SI 模式: 用户发起定位请求,辅助GPS 模块快速进行定位。6秒-15秒之间。 这个方式解决了普通GPS 最快需要30秒时间获得卫星星历的问题,如果使用AGPS将通过中移动的服务器拿到卫星星历,时...
  • liyunzhao
  • liyunzhao
  • 2013年04月22日 15:27
  • 1187

SI中Macro的使用

Windows下开发人员的至爱,功能强大,界面友好。支持语法高亮、符号跳转,还支持函数调用关系图显示。...
  • zhaozhichenghpu
  • zhaozhichenghpu
  • 2015年10月03日 21:13
  • 265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XMPP SI FileTransfer服务传输文件过程详解
举报原因:
原因补充:

(最多只允许输入30个字)