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。
第一行告诉通过CGI-PROXY-REQUEST告诉服务器代理转发请求到指定的URL。第二行则告诉服务器在转发的请求中添加Organization头部。需要注意的是,对于SIP协议在每个网络节点通常都会处理的头部,如Via、Max-forwards,服务器则会正常处理。第四行告诉服务器向主叫方发送一个100 Trying的临时应答。第六行则告诉服务器存储cookie信息。当这次呼叫所构成的事务(transaction)中的请求
|
| |