Max-Forwards: 70
To: Heisenberg
BYE sip:schroed5244@pc33.aol.com SIP/2.0
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z9hG4bK4332 Max-Forwards: 70
To: E. Schroedinger
From: Heisenberg
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z9hG4bK4332 To: E. Schroedinger
From: Heisenberg
SIP 学习入门范例 (3)
三、SIP 注册范例
今天开始讲注册部分。这个例子是及其简化的一个注册例子。以后还会详细介绍。
在本例中 Heisenberg 向注册服务器发送 REGISTER 请求,SIP 服务器接收到注册请求,该请求消息中 To 头字段是 Heisenberg SIP 请求,就好像是我们共用的 eMail 地址一样。后面 IP 地址是当前用户使用设备的 IP 地址。注册服务器将 SIP 地址和设备 IP 地址绑定起来,并保存到数据库中待用。(前面一个例子中所介绍的代理服务器就是通过查询注册服务器数据库信息,然后给 SIP 用户终端定位的。)
由 Heisenberg 发送的 REGISTER 消息内容如下: REGISTER sip:registrar.munich.de SIP/2.0
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z9hG4bKus19 Max-Forwards: 70
To: Werner Heisenberg
From: Werner Heisenberg
Contact: sip:werner.heisenberg@200.201.202.203 Content-Length: 0
首行中请求地址是注册服务器的地址,To 字段包含用户 SIP 地址,这里是
sip:werner.heisenberg@munich.de。除非出现第三方注册,一般来说,To和From内容一样。而Contact字段中的信息用来保存到注册服务器数据库中。
注册服务器确认成功后,发 200 Ok 回复终端,证明 Contact 字段已经保存成功。 SIP/2.0 200 OK
Via: SIP/2.0/UDP 200.201.202.203:5060;branch=z9hG4bKus19
To: Werner Heisenberg
Contact:
注意这里 Contact 地址包含一个过期时间,也就是注册有效期。很容易理解。
SIP 学习入门范例 (4)
四、SIP 状态和及时短消息范例
这个实例最简单的说法就是,利用 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
From: P. L. Chebychev
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE Contact:
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
From: P. L. Chebychev
Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE Contact:
之后,Possion 向 Chebychev 发送 NOTIFY消息,表示其当前状态