现在的位置: 首页 > 综合 > 正文

最新飞信协议聊天过程的完整描述

2013年10月13日 ⁄ 综合 ⁄ 共 4431字 ⁄ 字号 评论关闭

 

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:818332893@fetion.com.cn;p=196"
/></contacts></args>

发起聊天会话请求,来自于
815389716
,向
sip:818332893@fetion.com.cn;p=196
发送一个请求

客户端(
59.174.141.61:3401


<<----------

服务器(
221.176.31.108:8080

//
发送请求成功

SIP-C/2.0 200 OK

I: 2

Q: 0 S

 

另一个客户端的验证请求

同时,服务器向
sip:818332893@fetion.com.cn;p=196
这个被
815389316
邀请要对话的用户,发送一个有用户向他对话的信息

客户端(
59.174.141.61:3363


<<----------

服务器(
221.176.31.108:8080

注意这个客户端是
815389316
要求对话的人的地址

I 818332893 SIP-C/2.0

F: sip: 815389316@fetion.com.cn;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:815389316@fetion.com.cn;p=72

a=user:sip: 818332893@fetion.com.cn;p=196

 

 

A
域中指定了聊天服务器的地址,以及登陆到聊天服务器的验证权值

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

 

 

客户端(
59.174.141.61:3363


--------
 

>>


服务器(
221.176.31.108:8080

SIP-C/2.0 200 OK

F: sip:815389316@fetion.com.cn;p=72

I: 4

Q: 3 I

客户端反馈,同意与
sip:815389316@fetion.com.cn;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:815389316@fetion.com.cn;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:818632893@fetion.com.cn;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:815389716@fetion.com.cn;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:815389716@fetion.com.cn;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:815389716@fetion.com.cn;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

 

此致一个完整的聊天会话过程完成

 

 

全部分析完毕,睡觉!

 

抱歉!评论已关闭.