最新飛信協議聊天過程的完整描述

 

2009年12月18日 00:30

作者:不得閒

 

 

前不久才發佈了原來的飛信控件的源碼!那個代碼中無法接收到最新的飛信的聊天發送過來的消息,想着可能就是協議有變動,今天在外面逛了半圈回來之後,開始着手分析3.5.24的聊天過程,果不其然,有變動了,以前是直來直往的發送信息,現在的消息發送就有點麻煩了,居然額外用了專門的聊天服務器,發起新的聊天請求時會創建新的鏈接,然後鏈接到聊天服務器之後,開始你來我往的不斷的驗證與註冊,完畢之後纔會開始正式的聊天信息的發送,難怪以前的收不到了哪!現在,我將分析的完整過程給下,有愛好的人,可以自行根據本協議的信息做相應的變動,來完成我發佈的那個控件還不能完成的功能:

 

 

發起聊天的方法:

1

客戶端( 59.174.141.61:2708 ------------   >> 服務器( 221.176.31.33:8080

S fetion.com.cn SIP-C/2.0

F: 815389316

I: 19

Q: 1 S

N: StartChat

 

請求開始聊天會話的信息

客戶端( 59.174.141.61:2708 <<------------ 服務器( 221.176.31.33:8080

服務器返回:

SIP-C/2.0 200 OK

I: 19

Q: 1 S

A: CS

address="221.176.31.108:8080;221.176.31.108:443",credential="1279087023.1583835504"

 

可見,客戶端請求成功!服務器端提供了 221.176.31.108:8080;221.176.31.108:443 可用

Credential 爲以後新建的 Socket 連接提供一個用於連接到服務器上的驗證權值

於是客戶端( 59.174.141.61:2708 開始創建一個新的連接

我這裏創建的這個心連接的端口爲 3401 ,也就是說新連接的地址爲 59.174.141.61:3401

 

於是進入第二個步驟

2 、新連接連接到服務器,並且發送註冊消息

  客戶端( 59.174.141.61:3401 --------->> 服務器( 221.176.31.108:8080

  (注意一下這裏的主機已經不是步驟 1 中的主機,客戶機也不是步驟 1 中的客戶機)

發送註冊信息:

R fetion.com.cn SIP-C/2.0

F: 815389316

I: 1

Q: 0 R

A: TICKS auth="1279087023.1583835504"

K: text/html-fragment

K: multiparty

K: nudge             

K: share-background

K: fetion-show

 

這裏注意裏面的 A: TICKS auth="1279087023.1583835504" ,這個 auth 就是在第一步中獲得的那個權值,提供用來登陸服務器驗證

客戶端( 59.174.141.61:3401 <<---------- 服務器( 221.176.31.108:8080

SIP-C/2.0 200 OK

I: 1

Q: 0 R

XI: 0bb0982aafb546a8af92e8d66fbe962c

X: 1200

K: text/plain

K: text/html-fragment

K: multiparty

K: nudge

K: share-background

K: fetion-show

 

返回成功了,也就是上面的註冊到聊天服務器成功 , 這裏的 K 值,用來表示服務器能夠接受的值類型方式(普通文本, html 等)

 

進入步驟三:

發送 InviteBuddy 命令邀請好友開始會話

3, 發送邀請

客戶端( 59.174.141.61:3401 ----------   >> 服務器( 221.176.31.108:8080

S fetion.com.cn SIP-C/2.0

F: 815389316

I: 2

Q: 0 S

N: InviteBuddy

L: 85

 

<args><contacts><contact uri="sip:[email protected];p=196" /></contacts></args>

發起聊天會話請求,來自於 815389716 ,向 sip:[email protected];p=196 發送一個請求

客戶端( 59.174.141.61:3401 <<---------- 服務器( 221.176.31.108:8080

// 發送請求成功

SIP-C/2.0 200 OK

I: 2

Q: 0 S

 

另一個客戶端的驗證請求

同時,服務器向 sip:[email protected];p=196 這個被 815389316 邀請要對話的用戶,發送一個有用戶向他對話的信息

客戶端( 59.174.141.61:3363 <<---------- 服務器( 221.176.31.108:8080

注意這個客戶端是 815389316 要求對話的人的地址

I 818332893 SIP-C/2.0

F: sip: [email protected];p=72

A: CS address="221.176.31.108:8080;221.176.31.108:443",credential="1279087023.1008491823"

I: -12

K: text/plain

K: text/html-fragment

K: multiparty

K: nudge

K: share-background

K: fetion-show

XI: 0bb0982aafb546a8af92e8d66fbe962c

L: 106

Q: 200002 I

AL : buddy

 

s=session

m=message

a=user:sip:[email protected];p=72

a=user:sip: [email protected];p=196

 

 

A 域中指定了聊天服務器的地址,以及登陸到聊天服務器的驗證權值

K 域指定了可接收的消息類型等

 

 

客戶端( 59.174.141.61:3363 --------   >> 服務器( 221.176.31.108:8080

SIP-C/2.0 200 OK

F: sip:[email protected];p=72

I: 4

Q: 3 I

客戶端反饋,同意與 sip:[email protected];p=72 對話

 

而後,客戶端( 59.174.141.61:3363 這個客戶端開始創建一個新的 Socket 連接,然後用這個 Socket 連接到聊天服務器服務器( 221.176.31.108:8080

如新的 Socket 連接地址爲: 59.174.141.61:3403

 

之後,通以前那個一樣

這個新連接註冊到聊天服務器,發送註冊請求信息

客戶端( 59.174.141.61:3403 --------   >> 服務器( 221.176.31.108:8080

注意這裏的客戶端的地址已經是新 Socket 地址

R fetion.com.cn SIP-C/2.0

F: 818632893

I: 4

Q: 4 R

A: TICKS auth="1279087023.1008491823"

K: text/html-fragment

K: multiparty

K: nudge

K: share-background

K: fetion-show

 

服務器反饋

客戶端( 59.174.141.61:3403 <<-------- 服務器( 221.176.31.108:8080

SIP-C/2.0 200 OK

I: 4

Q: 4 R

XI: 0bb0982aafb546a8af92e8d66fbe962c

X: 1200

K: text/plain

K: text/html-fragment

K: multiparty

K: nudge

K: share-background

K: fetion-show

表示準備成功

 

 

 

 

然後服務器通知發起人 sip:[email protected];p=72 ,他的請求方已經進入對話狀態的信息:

客戶端( 59.174.141.61:3401 <<-------- 服務器( 221.176.31.108:8080

 

BN 815389716 SIP-C/2.0

I: 1

Q: 2 BN

N: Conversation

L: 100

 

<events><event type="UserEntered"><member

uri="sip:[email protected];p=196"/></event></events>

 

同時也向被請求方發送一條類似的信息

BN 818632893 SIP-C/2.0

I: 4

Q: 2 BN

N: Conversation

L: 99

 

<events><event type="UserEntered"><member

uri="sip:[email protected];p=72"/></event></events>

 

 

此時,一個完整的會話準備過程完成,以下開始對話過程

// 發起人發送

客戶端( 59.174.141.61:3401 ------   >> 服務器( 221.176.31.108:8080

M fetion.com.cn SIP-C/2.0

F: 815389716

I: 3

Q: 0 M

C: text/html-fragment

K: SaveHistory

L: 60

 

<Font Face=' 宋體 ' Color='-16777216' Size='10.5'>767</Font>

 

// 客戶端轉發到接收方

客戶端( 59.174.141.61:3403 <<------ 服務器( 221.176.31.108:8080

M 818632893 SIP-C/2.0

I: 4

Q: 3 M

F: sip:[email protected];p=72

C: text/html-fragment

K: SaveHistory

L: 60

D: Thu, 17 Dec 2009 16:13:57 GMT

XI: 345bc93d43884da5bc0365a48c91d3e1

 

<Font Face=' 宋體 ' Color='-16777216' Size='10.5'>767</Font>

 

接收方接收到消息之後,反饋一個成功信息給服務器

客戶端( 59.174.141.61:3403 ------   >> 服務器( 221.176.31.108:8080

SIP-C/2.0 200 OK

F: sip:[email protected];p=72

I: 4

Q: 3 M

 

然後服務器將本次的通信成功與否的信息轉給發話人

客戶端( 59.174.141.61:3403 <<------ 服務器( 221.176.31.108:8080

 

SIP-C/2.0 200 OK

I: 3

Q: 0 M

D: Thu, 17 Dec 2009 16:13:57 GMT

XI: 345bc93d43884da5bc0365a48c91d3e1

 

此致一個完整的聊天會話過程完成

 

 

全部分析完畢,睡覺!

 

發佈了81 篇原創文章 · 獲贊 148 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章