本文對於剛開始XMPP的學習者非常有用,初始登錄過程主要包括如下基本步驟:
1. 查詢和使用TLS
2. 查詢和使用SASL並使用賬戶密碼登錄
3. bind資源
4. 廣播自己的出息信息並接受Server廣播的出息信息
5. 下載自己的Roster,vcard, block, disc, bookmark等信息
- ####client下線
- <presence type="unavailable">
- <status>Logged out</status>
- </presence>
- ####client發起連接
- <?xml version="1.0"?>
- <stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="xumatomacbook-pro.local" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
- ####server相應並回複驗證的features
- <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='xumatomacbook-pro.local' id='675c6847-c13d-4710-9844-d9339e4df087' version='1.0' xml:lang='en'>
- <stream:features>
- <ver xmlns="urn:xmpp:features:rosterver"/>
- <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
- <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
- <mechanism>PLAIN</mechanism>
- <mechanism>ANONYMOUS</mechanism>
- </mechanisms>
- <register xmlns="http://jabber.org/features/iq-register"/>
- <auth xmlns="http://jabber.org/features/iq-auth"/>
- </stream:features>
- ####client啓動tls驗證
- <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
- ####server表示支持,可以繼續
- <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
- ####tls驗證結束,重新開始
- <?xml version="1.0"?>
- <stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="xumatomacbook-pro.local" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
- ####server響應,並返回下一步驗證支持的features,sasl
- <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='xumatomacbook-pro.local' id='675c6847-c13d-4710-9844-d9339e4df087' version='1.0' xml:lang='en'>
- <stream:features>
- <ver xmlns="urn:xmpp:features:rosterver"/>
- <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
- <mechanism>PLAIN</mechanism>
- <mechanism>ANONYMOUS</mechanism>
- </mechanisms>
- <register xmlns="http://jabber.org/features/iq-register"/>
- <auth xmlns="http://jabber.org/features/iq-auth"/>
- </stream:features>
- ####client開始sasl驗證
- <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">AGd1YW5mZWkAZ3VhbmZlaQ==</auth>
- ####server表示成功了
- <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
- ####client重新開始
- <?xml version="1.0"?>
- <stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="xumatomacbook-pro.local" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
- ####server響應並返回支持的features
- <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='xumatomacbook-pro.local' id='675c6847-c13d-4710-9844-d9339e4df087' version='1.0' xml:lang='en'>
- <stream:features>
- <ver xmlns="urn:xmpp:features:rosterver"/>
- <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
- <register xmlns="http://jabber.org/features/iq-register"/>
- <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
- </stream:features>
- ####client請求resource bind
- <iq type="set" id="bind_1">
- <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
- <resource>Psi+</resource>
- </bind>
- </iq>
- ####server判斷並返回結果
- <iq xmlns="jabber:client" type="result" id="bind_1" to="[email protected]/Psi+">
- <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
- <jid>[email protected]/Psi+</jid>
- </bind>
- </iq>
- ####client發起session
- <iq type="set" id="ab46a">
- <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
- </iq>
- ####server端響應
- <iq type="result" id="ab46a" to="[email protected]/Psi+"/>
- ####client端請求roster列表
- <iq type="get" id="ab47a">
- <query xmlns="jabber:iq:roster"/>
- </iq>
- ####server端返回
- <iq type="result" id="ab47a" to="[email protected]/Psi+">
- <query xmlns="jabber:iq:roster">
- <item subscription="both" name="ohno" jid="[email protected]"/>
- </query>
- </iq>
- ####client廣播自己的出席信息
- <presence>
- <priority>50</priority>
- <c xmlns="http://jabber.org/protocol/caps" node="http://psi-dev.googlecode.com/caps" ver="0.16" ext="ca cs e-time ep-notify-2 html last-act mr sxe whiteboard"/>
- </presence>
- ####client請求自己的個人信息
- <iq type="get" id="ab49a">
- <query xmlns="jabber:iq:privacy"/>
- </iq>
- ####client請求bookmark
- <iq type="get" id="ab4aa">
- <query xmlns="jabber:iq:private">
- <storage xmlns="storage:bookmarks"/>
- </query>
- </iq>
- ####client請求個人vcard
- <iq type="get" to="[email protected]" id="ab4ba">
- <vCard xmlns="vcard-temp"/>
- </iq>
- ####client請求disco列表
- <iq type="get" to="xumatomacbook-pro.local" id="ab4ca">
- <query xmlns="http://jabber.org/protocol/disco#info"/>
- </iq>
- ####server廣播出席信息
- <presence from="[email protected]/Psi+" to="[email protected]">
- <priority>50</priority>
- <c xmlns="http://jabber.org/protocol/caps" node="http://psi-dev.googlecode.com/caps" ver="0.16" ext="ca cs e-time ep-notify-2 html last-act mr sxe whiteboard"/>
- </presence>
- ####server返回個人信息項列表
- <iq type="result" id="ab49a" to="[email protected]/Psi+">
- <query xmlns="jabber:iq:privacy">
- <list name="blocked"/>
- <default name="blocked"/>
- <active name="blocked"/>
- </query>
- </iq>
- ####client請求block項內容
- <iq type="get" id="ab4da">
- <query xmlns="jabber:iq:privacy">
- <list name="blocked"/>
- </query>
- </iq>
- ####server返回bookmark信息
- <iq type="result" id="ab4aa" to="[email protected]/Psi+">
- <query xmlns="jabber:iq:private">
- <storage xmlns="storage:bookmarks"/>
- </query>
- </iq>
- ####server返回vcard信息
- <iq from="[email protected]" type="result" to="[email protected]/Psi+" id="ab4ba">
- <vCard xmlns="vcard-temp">
- <FN>guanfei</FN>
- <NICKNAME>guanfei</NICKNAME>
- </vCard>
- </iq>
- ####server返回disco列表
- <iq from="xumatomacbook-pro.local" type="result" to="[email protected]/Psi+" id="ab4ca">
- <query xmlns="http://jabber.org/protocol/disco#info">
- <identity category="server" type="im" name="Tigase ver. 0.0.0-0"/>
- <feature var="http://jabber.org/protocol/disco#info"/>
- <feature var="http://jabber.org/protocol/disco#items"/>
- <feature var="msgoffline"/>
- <feature var="http://jabber.org/protocol/stats"/>
- <feature var="http://jabber.org/protocol/commands"/>
- <feature var="jabber:iq:version"/>
- <feature var="jabber:iq:roster"/>
- <feature var="jabber:iq:roster-dynamic"/>
- <feature var="vcard-temp"/>
- <feature var="urn:ietf:params:xml:ns:xmpp-sasl"/>
- <feature var="urn:xmpp:ping"/>
- <feature var="http://jabber.org/protocol/pubsub"/>
- <feature var="http://jabber.org/protocol/pubsub#owner"/>
- <feature var="http://jabber.org/protocol/pubsub#publish"/>
- <identity category="pubsub" type="pep"/>
- <feature var="urn:ietf:params:xml:ns:xmpp-session"/>
- <feature var="http://jabber.org/protocol/amp"/>
- <feature var="msgoffline"/>
- <feature var="http://jabber.org/protocol/disco#info"/>
- <feature var="http://jabber.org/protocol/disco#items"/>
- <feature var="jabber:iq:privacy"/>
- <feature var="urn:ietf:params:xml:ns:xmpp-bind"/>
- <feature var="jabber:iq:private"/>
- <feature var="jabber:iq:auth"/>
- </query>
- </iq>
- <presence from="[email protected]/Psi+" to="[email protected]">
- <priority>50</priority>
- <c xmlns="http://jabber.org/protocol/caps" node="http://psi-dev.googlecode.com/caps" ver="0.16" ext="ca cs e-time ep-notify-2 html last-act mr sxe whiteboard"/>
- </presence>
- <iq type="result" id="ab4da" to="[email protected]/Psi+">
- <query xmlns="jabber:iq:privacy">
- <list name="blocked">
- <item action="allow" order="100"/>
- </list>
- </query>
- </iq>