XMPP之文件傳輸報文

最近在作文件傳輸,遇到只能發送文件到spark,spark發送文件來不能接收,要麼一直等待,要麼發一下就要重試,這天終於找到問題的所在了
個人openfire裏面的:服務器->服務器設置->文件傳輸設置 裏面的代理服務被禁用了,應該要使用裏面的「使用」

這是我同窗總結分析出來的傳輸文件的報文,因爲咱們兩個是一塊兒在作,我就不去抓了,爲了記筆記不得不發一下

發送文件場景:
1,對方拒接
2,對方贊成接受
	2.1對方中途中斷接收
	2.2我方中途中斷髮送
	2.3發送成功

------------------------------拒絕接受

A請求向B發送一個文件
<iq type='set' to='lxy2@user-20160421db/Spark' id='file_33fe4dbdf2364' xmlns='jabber:client'>
	<si xmlns='http://jabber.org/protocol/si' id='jsi_33fe4dbdf2313' profile='http://jabber.org/protocol/si/profile/file-transfer' mime-type='application/pdf'>
		<file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='File (2).pdf' size='457701'/>
		<feature xmlns='http://jabber.org/protocol/feature-neg'>
			<x xmlns='jabber:x:data' type='form'>
				<field var='stream-method' type='list-single'>
					<option>
						<value>http://jabber.org/protocol/ibb</value>
					</option>
				</field>
			</x>
		</feature>
	</si>
</iq>

B拒絕
<iq xmlns="jabber:client" id="file_33fe4dbdf2364" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="error">
	<error code="406" type="MODIFY">
		not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
	</error>
</iq>


------------------------------------贊成接受,並完成發送
A請求向B發送一個文件。包含一些文件的信息,以及發送文件所使用的stream-method,提供了option,可選項,這裏
實現了ibb方式,因此只提供這種方式。
<iq type='set' to='lxy2@user-20160421db/Spark' id='file_33fe66c647645' xmlns='jabber:client'>
	<si xmlns='http://jabber.org/protocol/si' id='jsi_33fe66c647209' profile='http://jabber.org/protocol/si/profile/file-transfer' mime-type='application/pdf'>
		<file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='File (1).pdf' size='1073243'/>
		<feature xmlns='http://jabber.org/protocol/feature-neg'>
			<x xmlns='jabber:x:data' type='form'>
				<field var='stream-method' type='list-single'>
					<option>	
						<value>http://jabber.org/protocol/ibb</value>
					</option>
				</field>
			</x>
		</feature>
	</si>
</iq>

B贊成接收文件,同時也指明瞭使用ibb方式
<iq xmlns="jabber:client" id="file_33fe66c647645" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" 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/ibb</value>
				</field>
			</x>
		</feature>
	</si>
</iq>


A發送一個open表示初始化了通道,並通知對方,每一塊的data大小爲4096(固然,這是指最大的,最後一塊可能沒有4096)
<iq type='set' to='lxy2@user-20160421db/Spark' id='efd57f0e-ba5a-4cbe-b68b-d7e1353839c2:ibb' xmlns='jabber:client'>
	<open xmlns='http://jabber.org/protocol/ibb' stanza='iq' sid='jsi_33fe66c647209' block-size='4096'/>
</iq>

B回發一個result表示接受。
<iq xmlns="jabber:client" id="efd57f0e-ba5a-4cbe-b68b-d7e1353839c2:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/>

A接着將發送屢次的data,直至將數據發送完畢。注意:data中的seq是發送的第幾塊數據
<iq type='set' to='lxy2@user-20160421db/Spark' id='b8ef6e92-66c8-41f9-aa16-711d471b5b7a:ibb' xmlns='jabber:client'>
	<data xmlns='http://jabber.org/protocol/ibb' seq='0' sid='jsi_33fe66c647209'>數據在這裏</data>
</iq>

B回覆一個iq result表示收到上面的data。注意,只有收到B的這個回覆,A纔會發送下一個data。
<iq xmlns="jabber:client" id="b8ef6e92-66c8-41f9-aa16-711d471b5b7a:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/>

...通過屢次發送,數據發送完成

A將會發送一個close告訴B,數據已經發送完畢了
<iq type='set' to='lxy2@user-20160421db/Spark' id='f113f9f8-619b-4446-8551-3e85d7bbd065:ibb' xmlns='jabber:client'>
	<close xmlns='http://jabber.org/protocol/ibb' sid='jsi_33fe66c647209'/>
</iq>

B回覆一個iq result表示知道了
<iq xmlns="jabber:client" id="f113f9f8-619b-4446-8551-3e85d7bbd065:ibb" to="lxy@user-20160421db/8xz8uslghx" from="lxy2@user-20160421db/Spark" type="result"/>



------------------------------------贊成接受,但A中斷髮送
前面代碼同樣的

A發送一個close強制中斷髮送
<iq type='set' to='lxy2@user-20160421db/Spark' id='25384610-3cb2-4b21-8017-cde4d33fed07:ibb' xmlns='jabber:client'>
	<close xmlns='http://jabber.org/protocol/ibb' sid='jsi_33fe9304c6907'/>
</iq>

B返回iq result確認
<iq xmlns="jabber:client" id="ff5767cb-7677-43e8-9e9c-ae7493ab7a04:ibb" to="lxy@user-20160421db/76xgw7w2r6" from="lxy2@user-20160421db/Spark" type="result"/>

------------------------------------贊成接受,但B中斷接收
前面代碼同樣

B發送來一個close強制中斷接收
<iq xmlns="jabber:client" id="pfVx0-912" to="lxy@user-20160421db/76xgw7w2r6" type="set" from="lxy2@user-20160421db/Spark">
	<close xmlns="http://jabber.org/protocol/ibb" sid="jsi_33fe9702f3329"/>
</iq>

A確認收到並中止繼續發送
<iq type='result' to='lxy2@user-20160421db/Spark' id='pfVx0-912' xmlns='jabber:client'/>
  
相關文章
相關標籤/搜索