如何利用jabber協(xié)議與gtalk服務(wù)器通訊 - 建立會(huì)話(huà)
客戶(hù)端與gtalk server建立會(huì)話(huà)的過(guò)程如下(默認(rèn)中間沒(méi)有錯(cuò)誤發(fā)生):1. ( C->S ) 連接到服務(wù)器, 發(fā)送'hello'信息.
<stream:stream to="gmail.com" version="1.0" xmlns:stream="
2. ( S->C ) 服務(wù)器回應(yīng)'hello'信息
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream from="gmail.com" id="A9D1B4DB24EA879C" version="1.0" xmlns:stream="
3. ( S->C ) 服務(wù)器要求TLS, SASL
<stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>X-GOOGLE-TOKEN</mechanism>
</mechanisms>
</stream:features>
4. ( C->S ) 開(kāi)始TLS
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
5. ( S->C ) 服務(wù)器允許繼續(xù)TLS
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
6. ( C->S ) TLS握手
客戶(hù)端向服務(wù)器發(fā)起TLS握手請(qǐng)求, 如果握手成功, 執(zhí)行#7 (可以使用openssl實(shí)現(xiàn)TLS的握手功能)
7. ( C->S ) TLS握手結(jié)束后, 發(fā)送新的'hello'消息
<stream:stream to="gmail.com" version="1.0" xmlns:stream="
8. ( S->C ) 服務(wù)器回應(yīng)'hello'消息
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream from="gmail.com" id="D38877BD862E0EE4" version="1.0" xmlns:stream="
9. ( S->C ) 服務(wù)器要求SASL
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>PLAIN</mechanism>
<mechanism>X-GOOGLE-TOKEN</mechanism>
</mechanisms>
</stream:features>
10. ( C->S ) 客戶(hù)端執(zhí)行SASL
<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">
AHlzb25nLmxlZUBnbWFpbC5jb20AeXNvbmdAMTk4NA==
</auth>
auth的cdata的格式 '\0'+username+'\0'+password 的base64編碼, username和password必須是經(jīng)過(guò)認(rèn)證的.
例如:
'\0' + 'ysong.lee@gmail.com' + '\0' + 123456 -> 經(jīng)過(guò)base64編碼處理后變?yōu)閏data
11. ( S->C ) SASL成功
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
12. ( C->S ) 客戶(hù)端發(fā)送新的'hello'消息
<stream:stream to="gmail.com" version="1.0" xmlns:stream="
13. ( S->C ) 服務(wù)器回應(yīng)'hello'消息
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream from="gmail.com" id="00035A2B998BF4B9" version="1.0" xmlns:stream="
14. ( S->C ) 服務(wù)器要求綁定資源和建立一個(gè)會(huì)話(huà)
<stream:features>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>
15. ( C->S ) 客戶(hù)端綁定申請(qǐng)一個(gè)資源
<iq type="set" id="1"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/></iq>
16. ( S->C ) 服務(wù)器返回綁定資源的結(jié)果
<iq id="1" type="result">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<jid>ysong.lee@gmail.com/BC20B630</jid>
</bind>
</iq>
17. ( C->S ) 客戶(hù)端申請(qǐng)建立會(huì)話(huà)
<iq type="set" id="2">
<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</iq>
18. ( S->C ) 服務(wù)器返回建立會(huì)話(huà)成功
<iq type="result" id="2"/>
到此, Client和Gtalk server的一個(gè)會(huì)話(huà)已經(jīng)建立, 可以根據(jù)jabber協(xié)議進(jìn)行其它操作. 請(qǐng)求聯(lián)系人列表, 發(fā)消息等.
posted on 2008-10-29 00:29 ysong.lee 閱讀(4334) 評(píng)論(3) 編輯 收藏 引用