PJSIP开发手册之用户代理(十)

第十章基本用户代理层(UA)

基本Dialog概念

基本的UA dialog提供管理SIP dialogs的基础设备和dialog usages,像dialog的状态,会话计数器,Call-ID,From,To,和Contact头部域,transactions中CSeq的排序,和路由集。

这个基本的UA dialog是不知道它正在使用哪种类型的会话(例如,INVITE会话,SUBSCRIBE/NOTIFY会话,REFER/NOTIFY会话,等等),并且它可以被用来同时在同一个dialog内建立多个不同类型的会话。

一个PJSIP dialog可以被认为只是一个存储常用dialog属性的被动数据结构。你不能讲dialog和INVITE会话混淆。一个INVITE会话是一个会话(也通常叫做dialog usage)在一个dialog内。同一个dialog内也可以有其他的会话、usages;它们共享共同的dialog属性(虽然每个dialog中可能只有一个INVITE会话)。

PJSIP dialog不知道它的会话的状态。它不知道是否一个INVITE会话已经被建立或者失去连接。事实上,PJSIP dialog甚至不知道在dialog中的是哪种类型的会话。它关心的只是这个dialog中有多少个活动的会话。Dialog初始的时候有一个活动的会话,并且当这个会话计数器到达0并且最后的transaction也终止了,这个dialog将被销毁。

增加和减小会话计数器是每个dialog usages的责任。

Dialog会话

Dialog会话在PJSIP的dialog框架中只是用一个引用计数器来表示。每当Dialog usages在一个特定的Dialog中创建或销毁一个会话时,它们将增加或减小这个引用计数器。

Dialog会话是Dialog usages创建的。在一个特定的Dialog中,一个Dialog usages可以创建多个会话(除了INVITE usage,它只能在一个Dialog中创建一个INVITE会话)。

关于“会话”,准确的表示将在Dialog usage模块中定义。基本的Dialog只关心Dialog中活动的会话数目。

Dialog Usages

Dialog usages是PJSIP的模块,注册到Dialog来接收Dialog的事件。多个模块可以注册到一个Dialog,因此Dialog可以有多个usages。每个Dialog usages模块负责处理一个指定的会话。例如,每当接收到一个新的SUBSCRIBE请求(和增加Dialog的会话计数器)时,subscribe usage模块将创建一个新的subscribe会话。当这个subscribe会话终止时减少这个会话计数器。

Dialog处理Dialog usages的过程和endpoint处理模块的过程类似;每当on_rx_request()和on_rx_response()事件发生,Dialog将按照Dialog usages的优先级从高到低,将事件传到每个usages,直到有一个模块返回true(例如,非0),在这种情况下,Dialog将停止分发事件。On_tsx_state()通知将分发到所有的Dialog usages。每个Dialog usage应该滤掉不属于它的transaction事件。

在它更底层的使用方面,应用可以直接管理Dialog,并且它是Dialog的“usage”(或用户)。在这种情况下,应用负责管理一个Dialog内的会话,即处理所有的请求和响应和建立/销毁会话。

在最后一章中,我们将学习管理会话的高层APIs。这些高层APIs是PJSIP模块并作为Dialog usages注册到Dialog。它们将处理各种类型会话中指定的各种类型的SIP消息(例如,一个INVITE usage模块将处理INVITE,PRACK,CANCEL,ACK,BYE,UPDATE和INFO,等等)。这些高层APIs根据会话的说明提供高层的回调函数。

在这章中,我们只学习基本,底层的Dialog usages。

Dialog集

每个Dialog包含在一个Dialog集中。每个Dialog集用一个共同的本地标签(如,From标签)标识。通常一个Dialog集只有一个Dialog。一个Dialog集有多个Dialog的情况,只有当外出的INVITE交叉时,在这种情况下,每个接收到含有不同的To便签的响应消息将在同一个Dialog集中创建一个新的Dialog。

一个Dialog集在PJSIP中定义为一个不透明的类型(即void*)。一个Dialog结构(pjsip_dialog)有一个成员dlg_set用来标识它所属的Dialog集。应用可以使用linked list API来保存一个Dialog的所有兄弟姐妹(在同一个会话中)。

客户端认证

一个Dialog维持一个客户端认证会话(pjsip_auth_clt_sess),

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值