sip订阅功能

SIP SUBSCRIBE 

订阅协议参考标准

https://tools.ietf.org/html/rfc6665

订阅注册事件包参考标准

https://tools.ietf.org/html/rfc3680  


订阅消息流程如下


sip订阅功能_第1张图片


SUBSCRIBE 关键点

Event Package: 定义了通知者向订阅者报告一组状态信息,rfc3680中定义了需要的事件包

Event Template-Package: 定义一组事件包状态

Notification:通知者发送NOTIFY到订阅者


SUBSCRIBE必须具有expires字段,并且相应200ok必须有expires字段,当expires 值为0时,为取消订阅

注册与订阅的expire字段需要分割开来,注册默认超时时间3600s订阅默认超时时间3761s,防止联合刷新造成的潜在问题

subscribe 能够订阅一组联系人的注册状态,当expires 为0时,标准中定义需要发送所有注册联系人的注册状态,而其它时候通知注册状态同事变化状态的联系人

收到 404,405,410,416,480-485,489,501或604响应,则订阅者必须考虑终止订阅

如果是订阅者希望重新订阅,他通过使用新生成的Call-ID及新的唯一的fromtag

收到notify时需要检查是否是自己需要的订阅,否则返回481订阅不存在、不支持event中的event-packet,返回489,bad event,为了防止事件欺骗,notify中必须包含Subscription-State来指示订阅状态。Subscription-State field is active,已被接受或已获授权,如果包含expires则订阅者需要修改订阅持续时间,如果Subscription-State" value is "pending" ,"Subscription-State" value is "terminated",

SUBSCRIBE请求的身份验证也将始终通过401(未授权)响应执行

订阅者需要解析application/reginfo+xml 携带的xml信息

通知者应该使用403(禁止)或603(拒绝)回复请求回应

RFC3325规范增加了P-Asserted/Preferred-Identity两个头域,也是用来携带主叫号码信息。其中,P-Asserted-Identity主要在信任域的server之间、proxy之间、server与Proxy之间进行传递,而P-Preferred-Identity主要在UA与server/proxy之间传递

必须具有Accept: application/reginfo+xml告知UAS通过xml格式通知订阅者

订阅状态机如下


sip订阅功能_第2张图片

SUBSCRIBE格式

SUBSCRIBE sip:[email protected] SIP/2.0

  Via: SIP/2.0/UDP app.example.com;branch=z9hG4bKnashds7

  From: sip:app.example.com;tag=123aa9

  To: sip:[email protected]

  Call-ID: [email protected]

  CSeq: 9887 SUBSCRIBE

  Contact: sip:app.example.com

  Event: reg

  Max-Forwards: 70

  Accept: application/reginfo+xml

NOTIFY格式

NOTIFY sip:app.example.com SIP/2.0

  Via: SIP/2.0/UDP server19.example.com;branch=z9hG4bKnasaii

  From: sip:[email protected];tag=xyzygg

  To: sip:app.example.com;tag=123aa9

  Call-ID: [email protected]

  CSeq: 1288 NOTIFY

  Contact: sip:server19.example.com

  Event: reg

  Max-Forwards: 70

  Content-Type: application/reginfo+xml

  Content-Length: 98

 

 

   

 


一般来说,我们会在注册成功后进行订阅。

你可能感兴趣的:(sip订阅功能)