PJSIP开发手册之SIP事件通知(十三)

本文档介绍了PJSIP中SIP事件通知的实现,包括SUBSCRIBE和NOTIFY方法,以及事件订阅会话的生命周期管理。PJSIP提供了一个事件通知框架,封装了基本的Dialog框架,用于创建和管理事件订阅。应用需要通过事件包注册到框架,并使用pjsip_evsub对象来处理订阅请求和NOTIFY响应。此外,文档还详细描述了客户端初始化订阅、服务端处理订阅、订阅状态管理和事件回调函数的使用等操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十三章 SIP特定的事件通知

SIP事件特定的通知在RFC3265“Session Initiation Protocol-SpecificEvent Notification”描述。这个核心协议定义了建立事件订阅的两种SIP方法,即SUBSCRIBE和NOTIFY,尽管其他方法也可以被定义来建立订阅(如REFER)。

这章描述了PJSIP的设计和基于基本的Dialog框架来创建基本和通用的事件通知框架的实现。这章可以用来实现高层的事件包如presence和call transfer(使用REFER)。

PJSIP的事件通知框架的实现被打包成一个静态库pjsip-simple,在pjsip目录下。为了使用它的功能,应用应该包括头文件<pjsip_simple.h>和连接到pjsip-simple静态库。

基本概念

所有类型的JSIP事件通知会话表示为pjsip_evsub对象。这个对象管理订阅的生命周期,和转化到来的请求和响应到适合的回调函数的调用。

PJSIP事件通知会话使用基本的Dialog框架来管理下层的Dialog和维护Dialog属性(像请求目标,CSeq排序,等)。因为基本的Dialog的设计允许Dialog被多个会话共用,多个事件订阅会话可能使用相同的Dialog,并且它也可以和invite会话共用这个Dialog。

为了订阅一个事件通知,应用需要创建一个事件订阅对象,指定下层的Dialog和接收订阅事件的回调函数。

到来的订阅请求(如SUBSCRIBE或REFER)将到达一个Dialog或者应用,根据这个请求是否在一个Dialog内。应用必须检测请求中的Event id并使用合适的包的API来处理订阅。例如,当请求是REFER,应用调用pjsip_xfer_create_uas()来创建服务端订阅。当SUBSCRIBE请求中的Event id是“presence“时,应用调用pjsip_pres_create_uas()来创建服务端订阅。

事件包

事件包描述了事件订阅的语义。在PJSIP中,在带有指定的事件ID的会话被创建之前事件包必须首先被注册到事件框架上。通过调用pjsip_evsub_register_pkg()可以把事件包注册到这个框架。这个函数通常当这个PJSIP模块实现的这个事件包被初始化时。

这个事件包主要负责向NOTIFY请求提供消息体。例如,PJSIP presence事件包创建所有外出的NOTIFY请求消息体使用内容类型”application/pidf+xml”或者”application/xpidf+xml”。

头部域

事件框架基于已注册的事件包提供的信息来管理外出请求的Accept,Allow-Events,Event,Expires和Subscription-State头部域的内容。它也检查到来请求中的Expires和Subscription-State头部域的内容,并相应地更新它自己的状态。

所有其他头部域(和Dialog外的头部域)必须被事件包或者应用处理。例如,refer事件包管理外出的REFER请求的Refer-To头部域。

基本的操作

这个会话描述如何使用核心的PJSIP事件订阅框架。正如你将在后面章节见到,高层的事件包(如presence和call transfer)的操作,将和核心事件框架的操作类似。

注意:为了节省空间,图中省略了”pjsip_”头。

客户端初始化订阅

客户端通过构建和发送SUBSCRIBE请求建立Dialog来初始化订阅。客户端应该将合适的证书放入这个Dialog中,这样认证的挑战可以被evsub模块自动处理。客户端应该在Dialog中设置合适的路由集。


描述:

1.        应用(或者事件包)初始化客户端订阅通过先创建一个UAC Dialog(1a),接着创建这个客户端订阅会话(1b)。应用可以1a和1b步骤之间设置Dialog的证书和路由集。

2.        通过创建请求(2a)和发送请求(2b),应用发送初始的SUBSCRIBE(或者其他建立订阅的方法,像REFER)。

3.        上面2步骤中的SUBSCRIBE请求的发送将触发on_evsub_

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值