對(duì)于SIP上述業(yè)務(wù)能力的綜合應(yīng)用形式就是SIP應(yīng)用服務(wù)器,它是目前軟交換系統(tǒng)中提及較多的增值業(yè)務(wù)服務(wù)器形式。
一、 SIP應(yīng)用服務(wù)器體系結(jié)構(gòu)
下圖給出了一種SIP應(yīng)用服務(wù)器的高層體系結(jié)構(gòu)。圖中所示的應(yīng)用服務(wù)器可支持基于SIPServlet、SIPCGI、CPL等多種方式開(kāi)發(fā)的業(yè)務(wù)程序。應(yīng)用服務(wù)器最底層是SIP協(xié)議棧,用來(lái)提供SIP協(xié)議能力,之上引入了一個(gè)規(guī)則引擎,主要用來(lái)處理業(yè)務(wù)沖突和事件分發(fā)。SIPServlet引擎提供基千SIPServlet業(yè)務(wù)的運(yùn)行環(huán)境,SIPCGI環(huán)境則提供對(duì)基于SIPCGI業(yè)務(wù)的支待,而CPLServlet是對(duì)CPL業(yè)務(wù)腳本的解釋程序。
SIP應(yīng)用服務(wù)器體系結(jié)構(gòu)示意圖
二、 SIP應(yīng)用服務(wù)器業(yè)務(wù)開(kāi)發(fā)方式
基于SIP的業(yè)務(wù)創(chuàng)建手段很靈活,甚至終端用戶也可以進(jìn)行簡(jiǎn)單的業(yè)務(wù)定制和創(chuàng)建。為了加快業(yè)務(wù)創(chuàng)建,IETF為SIP應(yīng)用的開(kāi)發(fā)人員提供了兩類(lèi)主要的業(yè)務(wù)開(kāi)發(fā)技術(shù)。
一類(lèi)是CPL(CallProcessingLanguage,呼叫處理語(yǔ)言),它是由IETF的IPTEL工
作組制定的一種基于XML(ExtensibleMarkupLanguage,擴(kuò)展標(biāo)記語(yǔ)言)的非常簡(jiǎn)單的腳本語(yǔ)言,主要用來(lái)描述和控制個(gè)人化的Internet電話業(yè)務(wù)(包括呼叫策略路由、呼叫篩選、呼叫日志等業(yè)務(wù))。
CPL的功能較弱,被設(shè)計(jì)成一種靜態(tài)的、基于文本的、非遞歸的語(yǔ)言,采用XML結(jié)構(gòu)描述如何對(duì)呼叫請(qǐng)求消息選擇路由,不支持用戶定義的變量,能夠保證開(kāi)發(fā)人員編寫(xiě)的業(yè)務(wù)邏輯不會(huì)對(duì)應(yīng)用服務(wù)器造成破壞,因此一般提供給可信度較低的終端用戶或第三方開(kāi)發(fā)人員使用。開(kāi)發(fā)人員可以在瀏覽器上編輯CPL腳本,并通過(guò)多種方式,如Web文件上載、SIP注冊(cè)消息載荷、Java遠(yuǎn)程方法調(diào)用(RMI入簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP入輕量級(jí)目錄訪問(wèn)協(xié)議(LDAP)等,將腳本傳輸?shù)絊IP應(yīng)用服務(wù)器。SIP應(yīng)用服務(wù)器將對(duì)腳本作者進(jìn)行認(rèn)證,并在腳本提交期間和運(yùn)行時(shí)自動(dòng)驗(yàn)證腳本的安全。
另一類(lèi)是SIPCGICCommonGatewayInterface,公共網(wǎng)關(guān)接口)和SIPServlets,并制定了SIPCGI和SIPServletAPI規(guī)范。這兩種技術(shù)功能較強(qiáng),但使用不當(dāng)會(huì)給應(yīng)用服務(wù)器帶來(lái)不安全的因素,一般是針對(duì)可信度較高的業(yè)務(wù)開(kāi)發(fā)人員,比如運(yùn)營(yíng)商自己或授權(quán)的第三方業(yè)務(wù)開(kāi)發(fā)商。
SIPCGI是在現(xiàn)行的超文本傳輸協(xié)議公共網(wǎng)關(guān)接口(HTTP-CGD上為Web環(huán)境創(chuàng)建的API,它重用了很多HTTP-CGI的機(jī)制、設(shè)施和工具。SIP-CGI允許作者使用抽象報(bào)告語(yǔ)言(Perl)、工具命令語(yǔ)言(Tel)、VB腳本或其他可選的腳本描述語(yǔ)言來(lái)創(chuàng)建CGI腳本。與CPL相比,CGI是一種更“低級(jí)”的API,使開(kāi)發(fā)人員能夠看到網(wǎng)絡(luò)內(nèi)部協(xié)議。因此,SIP-CG!是針對(duì)可信任用戶的。SIP的注冊(cè)消息也能夠被用作將CGI腳本動(dòng)態(tài)上載到應(yīng)用服務(wù)器的傳送機(jī)制。
由SUN公司提出的JavaServlet是計(jì)算機(jī)網(wǎng)絡(luò)中最有影響的腳本技術(shù),廣泛應(yīng)用于Internet網(wǎng)絡(luò)業(yè)務(wù)。SIPServlet在很大程度上采用了JavaServlet的概念和原理。Servlet非常類(lèi)似于CGI的概念,有所不同的是在Servlet中,SIP消息是作為一個(gè)對(duì)象被傳遞到Servlet引擎中,并且運(yùn)行千Java虛擬機(jī)OVM)上。實(shí)際上,SIPServlet就是一大塊Java代碼,能夠和SIP服務(wù)器交互,能夠以某種方式控制或影響呼叫處理。SIPServlet可以決定如何響應(yīng)消息,這和CGIAPI的處理過(guò)程非常類(lèi)似。SIPServlet可以在SIP消息體中傳送,如"INVITE"消息。
另外,通過(guò)在SIP應(yīng)用服務(wù)器中嵌入Parlay網(wǎng)關(guān)功能,還可以對(duì)外提供基
千ParlayAPI/ParlayXAPI的業(yè)界標(biāo)準(zhǔn)的應(yīng)用編程接口,供第三方業(yè)務(wù)開(kāi)發(fā)商方便迅速地開(kāi)發(fā)出新的增值業(yè)務(wù)。
三、SIP應(yīng)用服務(wù)器業(yè)務(wù)執(zhí)行方式
如上小節(jié)所述,SIP應(yīng)用服務(wù)器在提供業(yè)務(wù)時(shí),需要結(jié)合服務(wù)器擴(kuò)展和協(xié)議擴(kuò)展兩種方式。SIP應(yīng)用服務(wù)器提供網(wǎng)絡(luò)業(yè)務(wù)的基本方法就是以某種方式在應(yīng)用服務(wù)器中置入控制程序,其執(zhí)行由收到的SIP消息觸發(fā),然后對(duì)指定的呼叫進(jìn)行特殊的轉(zhuǎn)發(fā)處理,以實(shí)現(xiàn)諸如呼叫轉(zhuǎn)移、呼叫篩選等基本補(bǔ)充業(yè)務(wù)。
如上圖所示,與SIP應(yīng)用服務(wù)器提供的開(kāi)發(fā)模式相對(duì)應(yīng),在SIP應(yīng)用服務(wù)器中嵌人的控制程序一般有兩種方式:基于CPL或SIPServlet的腳本程序,以及基于CGI的后臺(tái)控制程序?;_本程序的控制程序一般比較簡(jiǎn)單,可以用與平臺(tái)無(wú)關(guān)的腳本語(yǔ)言(如CPL和VXML等)編寫(xiě),在滿足一定條件時(shí)由服務(wù)器解釋執(zhí)行。CPL腳本通常與一個(gè)特定的Internet地址相關(guān)聯(lián)。從功能上講,一個(gè)CPL腳本代表著一個(gè)應(yīng)用服務(wù)器的用戶定位功能,并且可以被看成是一系列”條件/動(dòng)作“集合。條件判斷可以基千地址、時(shí)間或位置等,動(dòng)作可以有信令,也可以沒(méi)有信令。有信令的動(dòng)作包括代理、重定向或拒絕;沒(méi)有信令的動(dòng)作包括通過(guò)E-mail通知一個(gè)用戶,或者在日志中記錄一個(gè)當(dāng)前呼叫的記錄。
SIPServlet方式的控制邏輯通常比較復(fù)雜,由JavaBean組件組成,或直接用Java語(yǔ)言編寫(xiě)。Servlet程序駐留在應(yīng)用服務(wù)器中,可以利用JavaServlet技術(shù)實(shí)現(xiàn)腳本的觸發(fā)。應(yīng)用服務(wù)器上將裝備一個(gè)“啟動(dòng)Servlet"和相當(dāng)于Java虛擬機(jī)的"Servlet引擎",當(dāng)應(yīng)用服務(wù)器收到SIP消息后,由“啟動(dòng)Servlet"觸發(fā)內(nèi)置腳本的解釋?zhuān)缓蟾鶕?jù)解釋結(jié)果決定如何處理該消息的轉(zhuǎn)發(fā)。觸發(fā)機(jī)制與本地策略有關(guān),但也可能依賴(lài)于SIP消息的內(nèi)容,如請(qǐng)求統(tǒng)一資源定位符(URL汃消息頭或消息體等。更有意義的是,SIPServlet技術(shù)還可以將一些小程序(Applet)自動(dòng)下載到用戶終端,通過(guò)與應(yīng)用服務(wù)器中的Servlet程序直接交互來(lái)靈活地實(shí)現(xiàn)各種增值業(yè)務(wù)。
SIP應(yīng)用服務(wù)器也可以采用SIPCGI技術(shù)進(jìn)行控制。和Web服務(wù)器一樣,輸入的SIP消息通過(guò)CGI觸發(fā)后臺(tái)處理程序,從而確定消息的轉(zhuǎn)發(fā)決策。由千SIP協(xié)議結(jié)構(gòu)類(lèi)似千HTTP,因此SIPCGI的實(shí)現(xiàn)并不困難。為了能夠處理SIP操作,SIP-CGI擴(kuò)展了HTTP-CGI的功能,如代理請(qǐng)求、返回應(yīng)答、產(chǎn)生請(qǐng)求、產(chǎn)生響應(yīng)等。由于一個(gè)請(qǐng)求可能又會(huì)產(chǎn)生很多新的請(qǐng)求和代理請(qǐng)求,SIP-CGI腳本在與處理這些請(qǐng)求的SIP事務(wù)交互中必須保持“長(zhǎng)期穩(wěn)定“,例如,為了識(shí)別消息之間的"狀態(tài)”而使用一個(gè)"Cookie"小程序穿梭于腳本和服務(wù)器之間。另外,SIP-CGI腳本能夠指出在SIP呼叫中第一次被調(diào)用之后,還可以在什么樣的條件下被再次調(diào)用,類(lèi)似千智能網(wǎng)中動(dòng)態(tài)"觸發(fā)"的概念。因此,它能通過(guò)一些Perl小腳本支持許多傳統(tǒng)的電話業(yè)務(wù),如自動(dòng)呼叫分配、遇忙前轉(zhuǎn)、無(wú)條件前轉(zhuǎn)、隨人轉(zhuǎn)移等。CGI的最大好處是它能夠訪問(wèn)網(wǎng)絡(luò)和Internet資源,如E-mail_Web、數(shù)據(jù)庫(kù)和文件存儲(chǔ)器等,與非CGI業(yè)務(wù)請(qǐng)求的屬性交互仍處于研究階段。
上述方式主要是提供基千呼叫重定向的基本補(bǔ)充業(yè)務(wù),對(duì)于更為復(fù)雜的增值業(yè)務(wù),除了在應(yīng)用服務(wù)器中加載控制程序外,通常還需要對(duì)SIP協(xié)議本身的功能進(jìn)行增強(qiáng)。為此,SIP提供了3種擴(kuò)展機(jī)制:頭部擴(kuò)展、方法擴(kuò)展和消息體擴(kuò)展,分別用千定義新的消息參數(shù)、操作和消息體內(nèi)容類(lèi)型。IETFMMUSICT作組目前正針對(duì)SIP協(xié)議進(jìn)行業(yè)務(wù)能力擴(kuò)展,其目標(biāo)是創(chuàng)建一些積木式的構(gòu)成塊,通過(guò)這些業(yè)務(wù)構(gòu)成塊可以構(gòu)建更多特殊的應(yīng)用,滿足一些特殊領(lǐng)域的需求。理想的做法是使這些模塊相互分離、與業(yè)務(wù)無(wú)關(guān)、具有公用性,而不是針對(duì)某一具體業(yè)務(wù)的實(shí)現(xiàn)。
四、SIP應(yīng)用服務(wù)器的工作模式
SIP應(yīng)用服務(wù)器的運(yùn)行通常采用有狀態(tài)的Proxy和BZBUA(BacktoBackUserAgent,背靠背用戶代理)模式。在SIP協(xié)議中,用戶代理(UA)是基本的SIP協(xié)議實(shí)體,用千終結(jié)或發(fā)起一個(gè)SIP呼叫。B2BUA則是SIP協(xié)議中UA的一種應(yīng)用擴(kuò)展,是一個(gè)接收請(qǐng)求并處理請(qǐng)求的邏輯實(shí)體。在原理實(shí)現(xiàn)上,BZBUA機(jī)制首先終結(jié)一個(gè)呼叫,然后重新發(fā)起一個(gè)呼叫,并在二者之間實(shí)現(xiàn)邏輯關(guān)聯(lián),因此BZBUA需要對(duì)會(huì)話狀態(tài)進(jìn)行維護(hù)。這就使得B2BUA適合用于進(jìn)行業(yè)務(wù)控制的場(chǎng)合。
從業(yè)務(wù)提供角度而言,SIP應(yīng)用服務(wù)器應(yīng)能夠終結(jié)網(wǎng)絡(luò)中呼叫控制設(shè)備(軟交換設(shè)備、SIP代理服務(wù)器、呼叫服務(wù)器等)提交來(lái)的觸發(fā)業(yè)務(wù)請(qǐng)求,根據(jù)該業(yè)務(wù)請(qǐng)求信息和用戶注冊(cè)的業(yè)務(wù)屬性信息,對(duì)其進(jìn)行處理,然后生成一個(gè)與之關(guān)聯(lián)的新的SIP呼叫(或稱(chēng)為該
SIP呼叫的第二段)并路由回網(wǎng)絡(luò)中的呼叫控制設(shè)備,指示其完成功能不同的呼叫接續(xù),從而實(shí)現(xiàn)業(yè)務(wù)邏輯控制功能。因此應(yīng)用服務(wù)器在實(shí)現(xiàn)業(yè)務(wù)控制時(shí),需要采用B2BUA的模式,以便做到對(duì)呼叫處理流程的控制。
需要注意的是,在B2BUA模式下,從軟交換設(shè)備來(lái)看,這兩段呼叫表現(xiàn)為兩個(gè)完全不相關(guān)的呼叫,因?yàn)樗鼈兪褂昧送耆煌腟IP呼叫標(biāo)識(shí)(CallID)。在這種情況下,SIP應(yīng)用服務(wù)器看起來(lái)就像PSTN中通過(guò)SS7或ISDNPRI與5類(lèi)交換機(jī)連接的附屬交換機(jī)或智能業(yè)務(wù)節(jié)點(diǎn)。在電路交換環(huán)境中,這種智能業(yè)務(wù)節(jié)點(diǎn)方式主要的缺陷是由附屬交換機(jī)控制的每一個(gè)呼叫都要占用兩個(gè)DSO時(shí)隙,對(duì)交換機(jī)電路資源的消耗非常嚴(yán)重。而在基于分組交換的SIP呼叫方式中,由千IP無(wú)連接的特性,不會(huì)出現(xiàn)上述缺陷。
此外,SIP協(xié)議控制并修改媒體的能力使得應(yīng)用服務(wù)器可以在呼叫的兩個(gè)終端間重定向媒體流。因此,對(duì)千從軟交換設(shè)備發(fā)起到應(yīng)用服務(wù)器,然后又回到軟交換設(shè)備的呼叫,其信令路徑通過(guò)應(yīng)用服務(wù)器,但在應(yīng)用服務(wù)器的控制下,媒體流路徑可以被重新配置為直接在兩個(gè)終端間傳送。