PJSIP开发手册之即时消息(十六)

第十六章 即时消息

PJSIP基于即时消息可以被用来促进pager,描述在RFC3428(Session InitiationProtocol(SIP)Extension For Instance Messaging)。

另外,PJSIP支持消息组合如RFC3994(Indication of Message Compositionfor Instant Messaging)所述。

即时消息

应用通过构造一个MESSGAE请求来发送即时消息。PJSIP没有定义一个指定的API来组合MESSAGE请求,因为基本上这个流程和创建其他类型的请求相同并且MESSAGE请求不需要特殊的处理。

应用可以选择在一个dialog内还是外发送MESSAGE请求。例如,当一个语音交流的INVITE会话已经被建立,MESSAGE请求可能dialog内被交换。然而,RFC3428明确规定实现时不应该为了将MESSAGE请求和另外一个dialog关联而创建dialog。

发送消息

Dialog外

为了发送dialog外的MESSAGE请求,应用通常构建一个新的请求,调用pjsip_endpt_create_request()。这个函数可以接受一个”text/plain”的消息体。应用接着调用pjsip_endpt_send_request()来有状态地发送这个请求。

下面代码片段展示了如何实现。

PJSIP开发手册之即时消息(十六)_第1张图片

Dialog内

为了发送dialog内的MESSAGE请求,应用通常构建一个dialog内的新的请求,调用pjsip_dlg_create_request()。应用接着绑定一个”text/plain”的消息体到请求,并调用pjsip_dlg_send_request()来发送这个请求。

下面代码片段展示了如何创建一个dialog内的MESSAGE请求。

PJSIP开发手册之即时消息(十六)_第2张图片

接收消息

Dialog外的到来MESSAGE请求将被应用模块接收。

Dialog内的到来MESSAGE请求将通过这个dialog的回调函数on_tsx_state()通知给dialog usage。

消息组成指示

PJSIP SIMPLE静态库提供构成和解析消息组成指示消息体的助手。消息组成指示助手函数声明在头文件中。应用可以包含这个头部域,或者包含< pjsip-simple .h>来包含SIMPLE的所有功能。

PJSIP消息组成指示头文件声明如下函数:


创建XML文件服从“application/im-iscomposing+xml”的说明。唯一需要的参数是pool和is_composing状态。其他参数是可选的加入这个XML文件的属性。last_active属性指示了上次键入的时间。将这个参数赋值为NULL来忽略它。content_type参数指定了正在组成的消息类型。将这个参数赋值为NULL来忽略它。Refresh参数指示接受者可以期望发送者来刷新这个状态。将这个参数赋值为-1来忽略它。


创建一个SIP消息体包含消息组成指示的XML文件。

PJSIP开发手册之即时消息(十六)_第3张图片

解析一个包含消息组成指示的XML文件的缓冲。文件中的值将返回在p_is_composing, p_last_active,p_content_type, 和p_refresh参数中,这些都是可选的。



你可能感兴趣的:(PJSIP学习)