SIP Presence and Instant Message Example

网友投稿 339 2022-11-29

SIP Presence and Instant Message Example

This example shows how SIP is used in a presence and instant messaging application. Presence information can be thought of as the state of a user or device at a particular instant. It can be as simple as whether a particular user is signed in or not, whether they are active at their station, or idle or away. For a mobile device, presence information can include the actual location in terms of coordinates, or in general terms such as "in the office", "on travel", or "in the lab". Presence information can even include information about the status or mood of the user, whether they are working, relaxing, or socializing. For all these examples, a presence protocol is mainly concerned about establishing subscriptions or long-term relationships between devices about transferring status information, and the delivery of that information. The actual information transferred, and how that information is presented to the user is application dependent. In terms of the SIP protocol, SUBSCRIBE is used to request status or presence updates from the presence server (or "presentity"), and NOTIFY

In this example, Chebychev wishes to communicate with Poisson. The message flow is shown in ​​Figure 2.4​​. To find out the status of Poisson, Chebychev subscribes to Poisson's presence information by sending a SUBSCRIBE

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 ;tag=21171 Call-ID: 58dkfj34924lk34452k592520 CSeq: 3412 SUBSCRIBE Allow-Events: presence

​​​​​ Figure 2.4: SIP presence and instant message example.

In this example, TCP is used as the transport for the SIP messages as indicated in the Via header field and in the transport=tcp parameter in the Contact URI. This request also contains Allow and Allow-Events header fields, which are used to advertise capabilities. In this example, Chebychev is indicating support for receiving seven methods listed in the Allow header field, and also presence subscriptions in the Allow-Event header field. As this SUBSCRIBE is creating a dialog (in an analogous way that an INVITE created a dialog in the earlier examples), the From contains a tag but the To

Poisson accepts the subscription request by sending a 202 Accepted

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

In this example, there are no proxy servers between Chebychev's watcher and Poisson's presence server, although there could be any number. The Expires header field indicates that the subscription expires in 1 hour. The actual subscription is begun by Poisson sending the first 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 ;tag=21171 From: M. Poisson ;tag=25140 Call-ID: 58dkfj34924lk34452k592520 CSeq: 1026 NOTIFY Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE Allow-Events: dialog Contact: Subscription-State: active;expires=3600 Event: presence Content-Type: application/cpim-pidf+xml Content-Length: 244 closed

Note that this NOTIFY is sent within the dialog established with the SUBSCRIBE-it uses the same dialog identifier (Call-ID, local and remote tags)-and the request is sent to the Contact URI provided by Chebychev in the subscription request. The Subscription-State header field indicates that the subscription has been authorized and activate and that it will expire in 1 hour unless refreshed by Chebychev (using another SUBSCRIBE

The Common Presence and Instant Message Presence Information Data Format (CPIM PIDF) [6] XML message body contains the status information that Poisson is currently off-line (closed).

Chebychev sends a 200 OK response to the 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 ;tag=21171 From: M. Poisson ;tag=25140 Call-ID: 58dkfj34924lk34452k592520 CSeq: 1026 NOTIFY Content-Length: 0

Later, when Poisson does sign in, this information is provided in a second 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 ;tag=21171 From: M. Poisson ;tag=25140 Call-ID: 58dkfj34924lk34452k592520 CSeq: 1027 NOTIFY Allow: ACK, INVITE, CANCEL, BYE, NOTIFY, SUBSCRIBE, MESSAGE Allow-Events: presence Contact: Subscription-State: active;expires=1800 Event: presence Content-Type: application/cpim-pidf+xml Content-Length: 325 open sip:s.possion@dist.probability.org;transport=tcp

The expiration time indicated in the Subscription-State header field indicates that 30 minutes have passed since the subscription was established. The CPIM PIDF XML message body now indicates that Poisson is on-line (open) and can be reached via the URI sip:s.possion@dist.probability.org;transport=tcp.

Chebychev confirms receipt of the NOTIFY with a 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 ;tag=21171 From: M. Poisson ;tag=25140 Call-ID: 58dkfj34924lk34452k592520 CSeq: 1027 NOTIFY Content-Length: 0

Now that Chebychev knows that Poisson is on-line, he sends an instant message to him using the Contact URI from the NOTIFY:

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 From: P. L. Chebychev ;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!

Notice that this MESSAGE is sent outside the dialog. Instant messages sent using the MESSAGE method in SIP are like page messages-they are not part of any dialog. As a result, each message contains a new Call-ID and From tag. The 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 ;tag=2321 From: P. L. Chebychev ;tag=4542 Call-ID: 9dkei93vjq1ei3 CSeq: 15 MESSAGE Content-Length: 0

Poison answers with a reply, which is also sent outside of any dialog, with a new Call-ID and From tag (an instant message response is never sent in a 200 OK reply to a MESSAGE

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 From: M. Poisson ;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!

which receives a 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 ;tag=mc3bg5q77wms From: M. Poisson ;tag=14083 Call-ID: lk34452k592520 CSeq: 2321 MESSAGE Content-Length: 0

Other presence packages define other sets of information that can be requested by watchers from presence servers.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MyBatis自定义SQL拦截器示例详解
下一篇:利用SpringBoot实现多数据源的两种方式总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~