对于SIP上述业务能力的综合应用形式就是SIP应用服务器,它是目前软交换系统中提及较多的增值业务服务器形式。
一、 SIP应用服务器体系结构
下图给出了一种SIP应用服务器的高层体系结构。图中所示的应用服务器可支持基于SIPServlet、SIPCGI、CPL等多种方式开发的业务程序。应用服务器最底层是SIP协议栈,用来提供SIP协议能力,之上引入了一个规则引擎,主要用来处理业务冲突和事件分发。SIPServlet引擎提供基千SIPServlet业务的运行环境,SIPCGI环境则提供对基于SIPCGI业务的支待,而CPLServlet是对CPL业务脚本的解释程序。
SIP应用服务器体系结构示意图
二、 SIP应用服务器业务开发方式
基于SIP的业务创建手段很灵活,甚至终端用户也可以进行简单的业务定制和创建。为了加快业务创建,IETF为SIP应用的开发人员提供了两类主要的业务开发技术。
一类是CPL(CallProcessingLanguage,呼叫处理语言),它是由IETF的IPTEL工
作组制定的一种基于XML(ExtensibleMarkupLanguage,扩展标记语言)的非常简单的脚本语言,主要用来描述和控制个人化的Internet电话业务(包括呼叫策略路由、呼叫筛选、呼叫日志等业务)。
CPL的功能较弱,被设计成一种静态的、基于文本的、非递归的语言,采用XML结构描述如何对呼叫请求消息选择路由,不支持用户定义的变量,能够保证开发人员编写的业务逻辑不会对应用服务器造成破坏,因此一般提供给可信度较低的终端用户或第三方开发人员使用。开发人员可以在浏览器上编辑CPL脚本,并通过多种方式,如Web文件上载、SIP注册消息载荷、Java远程方法调用(RMI入简单网络管理协议(SNMP入轻量级目录访问协议(LDAP)等,将脚本传输到SIP应用服务器。SIP应用服务器将对脚本作者进行认证,并在脚本提交期间和运行时自动验证脚本的安全。
另一类是SIPCGICCommonGatewayInterface,公共网关接口)和SIPServlets,并制定了SIPCGI和SIPServletAPI规范。这两种技术功能较强,但使用不当会给应用服务器带来不安全的因素,一般是针对可信度较高的业务开发人员,比如运营商自己或授权的第三方业务开发商。
SIPCGI是在现行的超文本传输协议公共网关接口(HTTP-CGD上为Web环境创建的API,它重用了很多HTTP-CGI的机制、设施和工具。SIP-CGI允许作者使用抽象报告语言(Perl)、工具命令语言(Tel)、VB脚本或其他可选的脚本描述语言来创建CGI脚本。与CPL相比,CGI是一种更“低级”的API,使开发人员能够看到网络内部协议。因此,SIP-CG!是针对可信任用户的。SIP的注册消息也能够被用作将CGI脚本动态上载到应用服务器的传送机制。
由SUN公司提出的JavaServlet是计算机网络中最有影响的脚本技术,广泛应用于Internet网络业务。SIPServlet在很大程度上采用了JavaServlet的概念和原理。Servlet非常类似于CGI的概念,有所不同的是在Servlet中,SIP消息是作为一个对象被传递到Servlet引擎中,并且运行千Java虚拟机OVM)上。实际上,SIPServlet就是一大块Java代码,能够和SIP服务器交互,能够以某种方式控制或影响呼叫处理。SIPServlet可以决定如何响应消息,这和CGIAPI的处理过程非常类似。SIPServlet可以在SIP消息体中传送,如"INVITE"消息。
另外,通过在SIP应用服务器中嵌入Parlay网关功能,还可以对外提供基
千ParlayAPI/ParlayXAPI的业界标准的应用编程接口,供第三方业务开发商方便迅速地开发出新的增值业务。
三、SIP应用服务器业务执行方式
如上小节所述,SIP应用服务器在提供业务时,需要结合服务器扩展和协议扩展两种方式。SIP应用服务器提供网络业务的基本方法就是以某种方式在应用服务器中置入控制程序,其执行由收到的SIP消息触发,然后对指定的呼叫进行特殊的转发处理,以实现诸如呼叫转移、呼叫筛选等基本补充业务。
如上图所示,与SIP应用服务器提供的开发模式相对应,在SIP应用服务器中嵌人的控制程序一般有两种方式:基于CPL或SIPServlet的脚本程序,以及基于CGI的后台控制程序。基千脚本程序的控制程序一般比较简单,可以用与平台无关的脚本语言(如CPL和VXML等)编写,在满足一定条件时由服务器解释执行。CPL脚本通常与一个特定的Internet地址相关联。从功能上讲,一个CPL脚本代表着一个应用服务器的用户定位功能,并且可以被看成是一系列”条件/动作“集合。条件判断可以基千地址、时间或位置等,动作可以有信令,也可以没有信令。有信令的动作包括代理、重定向或拒绝;没有信令的动作包括通过E-mail通知一个用户,或者在日志中记录一个当前呼叫的记录。
SIPServlet方式的控制逻辑通常比较复杂,由JavaBean组件组成,或直接用Java语言编写。Servlet程序驻留在应用服务器中,可以利用JavaServlet技术实现脚本的触发。应用服务器上将装备一个“启动Servlet"和相当于Java虚拟机的"Servlet引擎",当应用服务器收到SIP消息后,由“启动Servlet"触发内置脚本的解释,然后根据解释结果决定如何处理该消息的转发。触发机制与本地策略有关,但也可能依赖于SIP消息的内容,如请求统一资源定位符(URL汃消息头或消息体等。更有意义的是,SIPServlet技术还可以将一些小程序(Applet)自动下载到用户终端,通过与应用服务器中的Servlet程序直接交互来灵活地实现各种增值业务。
SIP应用服务器也可以采用SIPCGI技术进行控制。和Web服务器一样,输入的SIP消息通过CGI触发后台处理程序,从而确定消息的转发决策。由千SIP协议结构类似千HTTP,因此SIPCGI的实现并不困难。为了能够处理SIP操作,SIP-CGI扩展了HTTP-CGI的功能,如代理请求、返回应答、产生请求、产生响应等。由于一个请求可能又会产生很多新的请求和代理请求,SIP-CGI脚本在与处理这些请求的SIP事务交互中必须保持“长期稳定“,例如,为了识别消息之间的"状态”而使用一个"Cookie"小程序穿梭于脚本和服务器之间。另外,SIP-CGI脚本能够指出在SIP呼叫中第一次被调用之后,还可以在什么样的条件下被再次调用,类似千智能网中动态"触发"的概念。因此,它能通过一些Perl小脚本支持许多传统的电话业务,如自动呼叫分配、遇忙前转、无条件前转、随人转移等。CGI的最大好处是它能够访问网络和Internet资源,如E-mail_Web、数据库和文件存储器等,与非CGI业务请求的属性交互仍处于研究阶段。
上述方式主要是提供基千呼叫重定向的基本补充业务,对于更为复杂的增值业务,除了在应用服务器中加载控制程序外,通常还需要对SIP协议本身的功能进行增强。为此,SIP提供了3种扩展机制:头部扩展、方法扩展和消息体扩展,分别用千定义新的消息参数、操作和消息体内容类型。IETFMMUSICT作组目前正针对SIP协议进行业务能力扩展,其目标是创建一些积木式的构成块,通过这些业务构成块可以构建更多特殊的应用,满足一些特殊领域的需求。理想的做法是使这些模块相互分离、与业务无关、具有公用性,而不是针对某一具体业务的实现。
四、SIP应用服务器的工作模式
SIP应用服务器的运行通常采用有状态的Proxy和BZBUA(BacktoBackUserAgent,背靠背用户代理)模式。在SIP协议中,用户代理(UA)是基本的SIP协议实体,用千终结或发起一个SIP呼叫。B2BUA则是SIP协议中UA的一种应用扩展,是一个接收请求并处理请求的逻辑实体。在原理实现上,BZBUA机制首先终结一个呼叫,然后重新发起一个呼叫,并在二者之间实现逻辑关联,因此BZBUA需要对会话状态进行维护。这就使得B2BUA适合用于进行业务控制的场合。
从业务提供角度而言,SIP应用服务器应能够终结网络中呼叫控制设备(软交换设备、SIP代理服务器、呼叫服务器等)提交来的触发业务请求,根据该业务请求信息和用户注册的业务属性信息,对其进行处理,然后生成一个与之关联的新的SIP呼叫(或称为该
SIP呼叫的第二段)并路由回网络中的呼叫控制设备,指示其完成功能不同的呼叫接续,从而实现业务逻辑控制功能。因此应用服务器在实现业务控制时,需要采用B2BUA的模式,以便做到对呼叫处理流程的控制。
需要注意的是,在B2BUA模式下,从软交换设备来看,这两段呼叫表现为两个完全不相关的呼叫,因为它们使用了完全不同的SIP呼叫标识(CallID)。在这种情况下,SIP应用服务器看起来就像PSTN中通过SS7或ISDNPRI与5类交换机连接的附属交换机或智能业务节点。在电路交换环境中,这种智能业务节点方式主要的缺陷是由附属交换机控制的每一个呼叫都要占用两个DSO时隙,对交换机电路资源的消耗非常严重。而在基于分组交换的SIP呼叫方式中,由千IP无连接的特性,不会出现上述缺陷。
此外,SIP协议控制并修改媒体的能力使得应用服务器可以在呼叫的两个终端间重定向媒体流。因此,对千从软交换设备发起到应用服务器,然后又回到软交换设备的呼叫,其信令路径通过应用服务器,但在应用服务器的控制下,媒体流路径可以被重新配置为直接在两个终端间传送。