一种基于策略的SIP终端实现方法

时间:2022-05-18 07:17:22

一种基于策略的SIP终端实现方法

摘 要:在“状态机-软总线-媒体管理器”软件体系结构的基础上,设计实现一种基于策略的SIP终端软件。探讨软件实现中的注册及策略定制、实时通信、多线程设计与处理等功能的具体实现方法。

关键词:基于策略;统一通信;SIP终端;实现方法

中图分类号:TP301

文献标识码:A 文章编号:1672-7800(2015)005-0054-03

作者简介:韩可玉(1972-),男,河南南阳人,硕士,71352部队高级工程师,研究方向为计算机网络与信息安全;王振涛(1976-),男,河南新乡人,71336部队工程师,研究方向为计算机网络安全与指挥自动化;张绍星(1977-),男,河南漯河人,硕士,71352部队工程师,研究方向为计算机网络与指挥自动化。

0 引言

建设基于SIP的统一通信系统是应对现代企业管理所面临的工作位置不定性、移动性、响应及时性、改善客户满意度和费用支出最优化等主要挑战的有效措施之一。其目标是建立在任何时间,任何地点,使用任何设备都能进行通信的多媒体通信系统,以帮助商业人员应对上述挑战[1-2]。SIP终端作为客户端软件,基于SIP统一通信系统用户功能,对系统可用性发挥着重要作用。本文在“状态机-软总线-媒体管理器”软件体系结构[2]的基础上,设计实现一种基于策略的SIP终端软件,经过与现有SIP统一通信系统软件进行联试,初步实现了基于SIP统一通信端系统的主要功能。

1 软件系统实现方法

终端软件实现是在“状态机-软总线-媒体管理器”软件体系结构的基础上对各组件进行细化设计和具体实现,按照业务特点,通过注册及策略管理状态机、PA状态机、即时消息状态机、实时通信状态机等实现各终端功能。其结构如图1所示。

终端软件作为用户终端,需要有与用户交互的机制,软件实现时设计了用户界面及消息处理器。用户界面用于接收用户操作并显示系统信息;消息管理器接收系统信息,并提供给界面进行显示,是系统向用户界面传递信息的桥梁。

状态机、软总线和媒体管理器的设计与实现方法笔者曾在《基于SIP的统一通信端系统设计》一文中进行了阐述,本文主要对软件的其它关键内容进行具体实现。

1.1 注册及策略定制功能实现

统一通信的特点之一是基于策略的通信,系统之所以能够透明地进行跨设备、跨网络的多种媒体通信,关键在于通信过程中设备及网络选择是由策略驱动的。统一通信策略服务是由相应的服务器处理的,个人通信策略制定由用户完成。统一通信用户终端需提供策略定制及管理的能力,提供用户注册功能。在实现终端软件时,将用户注册及策略管理结合起来,用注册及策略管理状态机来实现。

注册及策略管理状态机是一个简单的状态机,只有一个注册状态,最小事件集为用户注册,是策略上载、策略下载、策略删除和用户注销4个设备事件的集合。由于用户注册具有有效期,超过有效期服务器会自动注销该用户,所以注册消息需要定期进行失效重传,注册状态机需要有失效重传机制。失效重传对用户应是透明的,不能影响用户其它工作,必须与其它状态机并发工作[3]。在注册状态机中用一个状态机私有队列保存该状态机所要发送的消息,对该私有队列中消息的发送用一个线程单独处理,私有队列提供延迟消息及普通消息两种存储机制。

用户注册及策略管理均通过regist方法实现,且均使用一个队列存储消息事件,一个处理过程进行消息发送。注册消息需要重传,而策略管理及注销消息不需要重传,这就要求有一种处理机制来保证各种消息都能得到正确处理。为此,需要增加一个注册链表用于存储需要发送的消息,将从队列中取出的消息与该链表中的消息进行比较,如果消息在链表中则发送,否则不发送。

当状态机接收到注册及策略相关设备事件时,根据事件生成相应的消息,对于重新注册事件和注销注册事件,首先删除链表中源地址和目标地址中与该消息相同的注册消息,将新生成的消息同时加入到注册队列和注册链表中,加入注册队列时不加延迟时间,如图2所示。

发送时对取出的消息进行判断,只有策略管理消息和链表中存在的注册消息才能发送,如图3所示。

收到本状态机发出消息的状态码后,如果为错误状态,则进行相应的错误处理,生成新的消息并加入队列中,不设延迟时间。如果是成功状态,则判断是否是注册消息,如果不是则从注册链表中删除相应的消息,任务完成。否则,根据注册有效时间设置消息延迟发送时间,将消息序号加1,并用延迟的方法加入到注册队列中,以便规定延迟时间后进行消息重传,解决注册失效问题,如图4所示。

1.2 实时通信功能实现

实时通信是通过实时通信状态机实现的,通信功能不同的状态机其复杂程度也不同。复杂实时通信状态机是一种具有各种实时通信增值服务功能的状态机,它实现了现有实时通信中绝大部分增值服务功能。本文以实现三方通话功能的实时通信状态机为例阐述实时通信功能的实现方法。

具有三方通话功能的实时通信状态机是在简单实时通信状态机的基础上增加了三方通话及会议相关状态。除基本通信功能外,还具有三方通话、呼叫保持等能力。图5为该状态机去除错误状态后的状态转换图。

实时通信实现过程。终端软件作为主叫方,实时通信状态机接收到用户发出呼叫的设备事件后处理过程如下:

(1)从媒体参数变量中取出用户本次呼叫所要使用的媒体及编码格式,调用媒体管理器能力查询接口查询本终端的媒体能力。

(2)检查所要使用的媒体及格式是否是终端软件媒体能力的子集,若不是则向界面返回不支持媒体的信息并结束此次事件处理;否则,生成能力协商SDP,能力协商SDP与会话SDP的区别是SDP中的IP地址及PORT都设为0[4]。

(3)生成能力协商INVITE呼叫请求消息,其消息体是能力协商SDP,发送该消息。

(4)收到peer应答消息后,检查对端的能力,如果peer的能力和所请求的能力交集不为空,则调用媒体管理器进行资源分配和NAT处理,并生成会话请求SDP。如果所请求的媒体peer不支持则向界面发送相应信息;如果所请求的媒体能力peer都不支持则呼叫事件处理结束。

(5)调用媒体管理器的媒体调度接口,实例化经过协商的媒体,并启动所用媒体的相应线程。

(6)生成会话请求INVITE消息,消息体为会话SDP,并发送该消息。

(7)根据peer的应答建立通信连接。

如果终端软件是被叫端,实时通信状态机建立通信过程如下:

①收到peer的能力协商INVITE,调用媒体管理器能力查询接口,检查本端是否支持peer所请求的媒体能力,并根据peer所请求的能力及自身能力生成能力协商SDP;

②生成能力协商INVITE的应答消息,其消息体为能力协商SDP,并发送该应答消息;

③当收到peer的呼叫请求INVITE时,生成本端会话SDP,并用此SDP生成180响应消息,同时发送该消息;

④调用媒体管理器实例化会话所要用到的媒体能力,并启动相应线程;

⑤生成200消息并发送,建立通信连接。

在通信过程中,增加媒体时首先检查媒体的状态,如果所要增加的媒体本来就是活跃状态则丢弃该事件。如果是挂起状态则直接发送REINVITE,将其重新激活;否则,进行与建立呼叫过程大致相同的处理,不同的是能力协商时只协商要加入的媒体,请求消息是REINVITE而不是INVITE。后两种情况通信双方的SDP都会改变。

在通信过程中删除媒体直接发送REINVITE消息,在通信双方将所要删除的媒体挂起,并对SDP进行修改。

1.3 多线程设计与处理

为提高系统并发处理能力,采用多线程编程技术。当用于处理信令的状态机及用于实现媒体通信功能的媒体构件发生变化时,可以根据实际需要决定是否使用或启动新的线程,同时这些线程间还要共享事件数据和实现同步。图6为系统中的主要线程以及交互方法。

界面线程用于接收用户操作和系统反馈信息,并将接收到的用户操作信息写入共享缓冲区中,将接收到的反馈信息进行显示。

设备线程用来监视用户操作,并将操作转化成相应的事件加入到事件队列中。界面线程和设备线程分开设计的原因在于:一是满足不同设备的部署环境,如在PDA等存储器比较小的设备上部署时可能不希望有用户界面;二是系统功能独立于用户界面,满足用户的个性化界面需求,方便界面更换。

工作线程是对事件进行处理的线程,它从事件队列中接收事件,对事件进行预处理并分类,将与注册有关的事件加入到注册队列中,将与PA有关的事件加入到PA事件队列中,对其余事件进行处理并形成信令消息交给SIP协议栈进行发送。在处理实时通信事件时,需要与媒体线程交互,将生成的SDP提交给媒体线程。SIP线程接收SIP消息,进行必要的处理后形成SIP事件加入到总事件队列中。

注册线程处理注册事件及策略管理事件,PA线程处理与PA有关的事件。它们之所以设计成单独的线程,是因为注册和PA事件均有有效期,为了使其不失效需要进行定时重传操作,并且这些重传操作是并发执行的,各自维护自身的重传队列。

媒体线程负责通信媒体的采集及编解码处理。

协议栈各线程负责信息发送与接收。

对于包含事件队列这样的类会在多个线程中使用,并且必须保证各线程使用的是同一个实例。为此,系统将这些需要在多个线程中使用同一个实例的类按照Single模式进行实现,并增加必要的互斥机制,从而保证该类实例在整个系统中的唯一性。

2 结语

本文利用“状态机-软总线-媒体管理器”软件体系结构,设计实现了一种基于策略的SIP终端软件,系统采用多线程模式进行编程,利用相应的状态机实现相应的通信及管理功能。经过与现有SIP统一通信系统进行联试,通信效果良好,功能使用及转换简便,初步实现了基于SIP统一通信端系统的主要功能。

参考文献:

[1]

[2] 韩可玉.商务环境下基于SIP的统一通信端系统的设计与实现[D].北京:北京大学,2005.

[3] 韩可玉,任安西.基于SIP的统一通信端系统设计[J] .软件导刊,2013(6):90-93 .

[4] ROSENBERG J .A session initiation protocol (SIP) event package for registrations,RFC3680[Z] .2004.

[5] F ANDREASEN.Session description protocol (SDP) simple capability declaration RFC3407[Z] . 2002.

上一篇:基于Sakai的移动学习资源需求分析 下一篇:一种软硬件并行开发无缝集成的规范化方法