|
2.3 CPL脚本的例子
CPL脚本具有与XML相同的语法和表示方法。若有用户呼叫SIP URL 为sip:jones@jonespc.example.com的用户。当请求到达该用户所在代理服务器时,代理服务器根据相应的机制调用图二所示的脚本并加以执行。首先代理服务器发出代理转发(proxy)操作,超时值设为8秒。如果在超时值超时之前,代理服务器没有接收到应答,根据应答的状态码来确定该用户是busy还是noanswer,并采取相应的动作。本例的处理方式比较的简单,对两种情况均采取了呼叫该用户服务提供商的语音邮件设备的动作,再次进行代理转发(proxy)的操作。该语音邮件设备的SIP URL为sip:jones@voicemail.example.com。通过脚本,服务提供商为用户提供了遇忙/无应答呼叫前转业务。显然,使用CPL语言编写更加复杂的脚本,服务提供商可以提供更加高级的业务。
2.4 CPL有待研究的课题
对于CPL,到目前为止还有一些领域没有草案和相关的标准出现。例如用户如何将脚本安全地传送到信令服务器上;信令服务器如何将请求或应答消息与用户上传的脚本对应起来等等。
3 SIP CGI规范
众所周知,CGI并不是一项新的技术。它最初的出现是和HTTP协议一起,使静态网页具有了与浏览者交互的功能,极大的推动了web技术的发展。CGI技术提供了一种在web环境下创建新业务的机制。从web的发展来看,无疑CGI技术又是非常成功的。它具有以下的一些特点: * 语言的独立性;CGI技术定义的是接口而非具体的编程语言,它可以与perl, C, VisualBasic, tcl等语言一起工作使用; * CGI技术允许CGI 的应用程序对消息的头部(header)具有访问权限; * 产生应答的方式与其他的一些技术,如Java servlets不同;CGI处理应答的所有部分,包括头部、应答码、消息体;
SIP协议在发展的过程中很大程度上借鉴了HTTP协议,比如消息的格式、消息请求/应答的交互方式,用文本格式对消息进行编码等。所以CGI规范的特点也特别适合SIP协议。因此可以采用CGI作为SIP的一种业务创建(Service Creation)的机制。
3.1 SIP CGI与HTTP CGI的区别
尽管SIP与HTTP具有相似的语法和请求/应答的模型,但是它们还是有一些关键的不同点。如代理服务器在SIP协议中起着重要的作用,而在HTTP协议中则不是很重要;SIP协议提供了注册的机制,而HTTP协议没有。这些不同点也反映到了SIP CGI 和HTTP CGI的下列的区别上。 *SIP CGI主要运行在代理服务器、重定向服务器、注册服务器上;而HTTP CGI则主要运行在用户代理(user agent)上; * SIP CGI允许脚本执行代理转发、重定向等操作;而HTTP CGI则不支持; * SIP CGI支持持续性模型(persistence model),通过一些机制使得允许脚本在SIP事务所包含的所有消息中保持状态;而HTTP CGI并不支持该模型;
3.2 SIP CGI网络模型
3.3 SIP CGI规范
与HTTP CGI类似,SIP CGI规范主要定义了一些机制来使用户能够运行服务器上的应用程序。服务提供商可以使用C、visual Basic、perl等语言来开发应用程序,实现不同的业务。
3.3.1 SIP CGI 脚本如何从服务器获取数据?
SIP CGI对于SIP请求或者应答消息的头部和消息体采用了不同的方式。服务器采用操作系统环境变量的机制来传递消息的头部信息。RFC3050定义了超过20个的环境变量,例如AUTH_TYPE,REMOTE_USER等。而对于消息体,服务器则采用标准输入文件描述符stdin来传递。
3.3.2 CGI应用程序处理结果的输出格式
CGI脚本应用程序输出有一些消息组成,这些消息分别对应了脚本要求服务器将要执行的动作。每条消息由一个动作(action)、多个CGI头部和多个SIP头部组成。RFC 3050中定义了Status、CGI-PROXY-REQUEST、CGI-FORWARD-RESPONSE、CGI-SET-COOKIE、CGI-AGAIN五种动作,同时还定义了CGI-Request-Token和CGI-Remove两种CGI头部。消息中所涉及到的SIP头部语法同RFC2543。 |