织梦CMS - 轻松建站从此开始!

罗索

SIP 状态和及时短消息范例

落鹤生 发布于 2012-02-14 13:29 点击:次 
在 SIP 协议中,规定可以使用 SUBSCRIBE 来请求状态或者改写状态,用 NOTIFY 获得状态信息。在本例中,Chebychev 希望和 Possion 通信。为了能够知道 Possion 的状态情况,Chebychev 通过发送 SUBSCRIBE 订阅 Possion 状态信息
TAG:

这个实例最简单的说法就是,利用 SIP 获取好友状态信息以及发送及时消息。我们经常用的 QQ 或MSN 就是这种方式。一方用户可以获取另一方用户状态信息。状态信息用来表示该用户目前的工作状态,例如:工作中、休息中等等。目前新版本的聊天工具还可以显示 个人消息的能力。

在 SIP 协议中,规定可以使用 SUBSCRIBE 来请求状态或者改写状态,用 NOTIFY 获得状态信息。在本例中,Chebychev 希望和 Possion 通信。为了能够知道 Possion 的状态情况,Chebychev 通过发送 SUBSCRIBE 订阅 Possion 状态信息,消息内容如下:

SUBSCRIBE sip:poisson@probability.org SIP/2.0
Via SIP/2.0/TCP lecturehall21.academy.ru:5060;branch=z9hG4bK348471123
Max-Forwards: 70
To: M. Poisson <sip:poisson@probability.org>
From: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
Call-ID: 58dkfj34924lk34452k592520
CSeq: 3412 SUBSCRIBE
Allow-Events: presence
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Contact: <sip:pafnuty@lecturehall21.academy.ru;transport=tcp>
Event: presence
Content-Length: 0

Poisson 接收到 SUBSCRIBE 消息后,发送 202 Accepted 响应返回到 Chebychev

SIP/2.0 202 Accepted
Via SIP/2.0/TCP lecturehall21.academy.ru:5060
;branch=z9hG4bK348471123;received=19.34.3.1
To: M. Poisson <sip:poisson@probability.org>;tag=25140
From: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
Call-ID: 58dkfj34924lk34452k592520
CSeq: 3412 SUBSCRIBE
Allow-Events: presence
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Contact: <sip:s.possion@dist.probability.org;transport=tcp>
Event: presence
Expires: 3600
Content-Length: 0

之后,Possion 向 Chebychev 发送 NOTIFY消息,表示其当前状态

NOTIFY sip:pafnuty@lecturehall21.academy.ru SIP/2.0
Via SIP/2.0/TCP dist.probablilty.org:5060;branch=z9hG4bK4321
Max-Forwards: 70
To: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
From: M. Poisson <sip:poisson@probability.org>;tag=25140
Call-ID: 58dkfj34924lk34452k592520
CSeq: 1026 NOTIFY
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Allow-Events: dialog
Contact: <sip:s.possion@dist.probability.org;transport=tcp>
Subscription-State: active;expires=3600
Event: presence
Content-Type: application/cpim-pidf+xml
Content-Length: 244

<?xml version="1.0" encoding="UTF-8"?>
<presence xmlns="urn:ietf:params:xml:ns:cpim-pidf"
      entity="sip:poisson@probability.org">
    <tuple id="452426775">
      <status>
        <basic>closed</basic>
      </status>
    </tuple>
</presence>

Chebychev 发送 200 OK 响应 NOTIFY

SIP/2.0 200 OK
Via SIP/2.0/TCP dist.probablilty.org:5060
;branch=z9hG4bK4321;received=24.32.1.3
To: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
From: M. Poisson <sip:poisson@probability.org>;tag=25140
Call-ID: 58dkfj34924lk34452k592520
CSeq: 1026 NOTIFY
Content-Length: 0

之后,当 Poisson 登陆后,再次发送 NOTIFY 消息

NOTIFY sip:pafnuty@lecturehall21.academy.ru SIP/2.0
Via SIP/2.0/TCP dist.probablilty.org:5060;branch=z9hG4bK334241
Max-Forwards: 70
To: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
From: M. Poisson <sip:poisson@probability.org>;tag=25140
Call-ID: 58dkfj34924lk34452k592520
CSeq: 1027 NOTIFY
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Allow-Events: presence
Contact: <sip:s.possion@dist.probability.org;transport=tcp>
Subscription-State: active;expires=1800
Event: presence
Content-Type: application/cpim-pidf+xml
Content-Length: 325

<?xml version="1.0" encoding="UTF-8"?>
<presence xmlns="urn:ietf:params:xml:ns:cpim-pidf"
entity="sip:poisson@probability.org">
    <tuple id="452426775">
      <status>
        <basic>open</basic>
      </status>
      <contact>sip:s.possion@dist.probability.org;transport=tcp
      </contact>
    </tuple>
</presence>

Chebychev 发 200 OK 确认

SIP/2.0 200 OK
Via SIP/2.0/TCP dist.probablilty.org:5060
;branch=z9hG4bK334241;received=24.32.1.3
To: P. L. Chebychev <sip:chebychev@academy.ru>;tag=21171
From: M. Poisson <sip:poisson@probability.org>;tag=25140
Call-ID: 58dkfj34924lk34452k592520
CSeq: 1027 NOTIFY
Content-Length: 0

现在 Chebychev 已经知道 Possion 在线了,开始发送及时消息。

MESSAGE sip:s.possion@dist.probability.org SIP/2.0
Via SIP/2.0/TCP lecturehall21.academy.ru:5060;branch=z9hG4bK3gtr2
Max-Forwards: 70
To: M. Poisson <sip:s.possion@dist.probability.org>
From: P. L. Chebychev <sip:chebychev@academy.ru>;tag=4542
Call-ID: 9dkei93vjq1ei3
CSeq: 15 MESSAGE
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Content-Type: text/plain
Content-Length: 9

Hi There!

注意到这里,MESSAGE 是独立与会话的,它不属于任何会话。每个消息都含有一个新的 Call-ID 和 From tag。200 OK 用来确认收到该信息。

SIP/2.0 200 OK
Via SIP/2.0/TCP lecturehall21.academy.ru:5060;branch=z9hG4bK3gtr2;received=19.34.3.1
To: M. Poisson <sip:s.possion@dist.probability.org>;tag=2321
From: P. L. Chebychev <sip:chebychev@academy.ru>;tag=4542
Call-ID: 9dkei93vjq1ei3
CSeq: 15 MESSAGE
Content-Length: 0

Possion 开始回复消息

MESSAGE sip:chebychev@academy.ru SIP/2.0
Via SIP/2.0/TCP dist.probablilty.org:5060;branch=z9hG4bK4526245
Max-Forwards: 70
To: P. L. Chebychev <sip:chebychev@academy.ru>
From: M. Poisson <sip:s.possion@dist.probability.org>;tag=14083
Call-ID: lk34452k592520
CSeq: 2321 MESSAGE
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE
Content-Type: text/plain
Content-Length: 30

Well, hello there to you, too!

收到消息后,发 200 OK

SIP/2.0 200 OK
Via SIP/2.0/TCP dist.probablilty.org:5060;branch=z9hG4bK4526245;received=24.32.1.3
To: P. L. Chebychev <sip:chebychev@academy.ru>;tag=mc3bg5q77wms
From: M. Poisson <sip:s.possion@dist.probability.org>;tag=14083
Call-ID: lk34452k592520
CSeq: 2321 MESSAGE
Content-Length: 0

(cr0_3)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201202/15708.html]
本文出处:百度博客 作者:cr0_3 原文
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容