第十二章 Dialog Invite会话和Usage
介绍
Dialog invite会话是一个高层的invite会话管理,它可以被应用用来管理invite会话(包括SDP管理)。这个invite会话封装了抽象的基本Dialog,因此应该不需要使用基本Dialog的API,当它使用invite会话API时。
一个Dialog INVITE会话是可以基于每个对话被应用创建的。Dialog INVITE会话被Dialog INVITE usage管理。Dialog INVITE usage将事件从这个Dialog转发到相应的INVITE会话,并且也处理交叉Dialog。
DialogINVITE会话和usage在单独的静态库中实现,即pjsip-ua库。应用必须包括<pjsip-ua/sip_inv.h>来使用Dialog INVITE会话/usage功能。或者应用可以只包括一个单独的头文件<pjsip-ua.h>来获得pjsip-ua库中的所有功能。
术语
DialogINVITE会话是一个在一个Dialog中的INVITE会话。如果应用决定使用高层的INVITE会话管理,它需要为每一个Dialog创建唯一一个Dialog INVITE会话实例。
DialogINVITE usage是一个注册到endpoint的PJSIP模块。当一个Dialog有Dialog INVITE session时,这个模块需要作为Dialog usage注册到特定的Dialog。这将在INVITE会话创建的时候自动实现。
特性
DialogINVITE会话提供下面的特性:
- 会话进度报告(例如,会话progressing,connected,confirmed,disconnected)
- 自动认证处理(例如,接收到401/407响应后重试这个请求)
- SDP offer和answer处理
- 高层的交叉处理
- 会话超时(即Expires头部域)
- 会话扩展,像会话定时器,和可靠的临时响应
INVITE会话状态
DialogINVITE usage提供回调函数来通知应用会话的进度。对于电话应用这是非常有用的,因为通常会话的状态和电话拨打的状态相关。
一个INVITE会话的进度如下状态图所示。
每个状态的描述如下:
PJSIP_INV_STATE_NULL |
会话第一次被创建时的状态。在状态时,没有消息已经被发送或接收。 |
PJSIP_INV_STATE_CALLING |
第一个INVITE消息发送后,在收到任何临时响应之前的会话状态。 |