【正文】
oSIP開發(fā)者手冊(cè)——本手冊(cè)指導(dǎo)開發(fā)者利用oSIP棧開發(fā)用戶代理原文標(biāo)題:oSIP User Manual原文作者:Aymeric Moizard聯(lián)系方法:jack@版權(quán)保護(hù):GNU Free Documentation License項(xiàng)目網(wǎng)站:譯文作者:陳善學(xué)聯(lián)系方法:chenshanxue@摘要“會(huì)話發(fā)起協(xié)議(Session Initiation ProtocolSIP)是一個(gè)應(yīng)用層的信令控制協(xié)議。用于創(chuàng)建、修改和終止一個(gè)或多個(gè)參與者的會(huì)話。這些會(huì)話可以是Internet多媒體會(huì)議、IP電話或多媒體分發(fā)(例如:語音信箱)。會(huì)話的參與者可以通過組播(multicast)、網(wǎng)狀單播(unicast)或兩者的混合體進(jìn)行通信。”The Session Initiation Protocol (SIP) is an applicationlayer control (signaling) protocol for creating, modifying and terminating sessions with one or more participants. These sessions include Internet multimedia conferences, Internet telephone calls and multimedia distribution. Members in a session can municate via multicast or via a mesh of unicast relations, or a bination of these.版權(quán)本文的版權(quán)歸Aymeric Moizard所有。允許拷貝、分發(fā)和在”GNU Free Documentation License”()下的定制。需要注意的是,本文檔的任何章節(jié)的引用(包括本中文翻譯)需列出它們的標(biāo)題、開始的文本和結(jié)尾文本,并且標(biāo)明文檔受”GNU Free Documentation Licence”保護(hù)。Copyright (c) 2001 Aymeric MOIZARD. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version or any later version published by the Free Software Foundation。 with the Invariant Sections being LIST THEIR TITLES, with the FrontCover Texts being LIST, and with the BackCover Texts being LIST. A copy of the license is included in the section entitled GNU Free Documentation License.前言譯者修正了原文中一些細(xì)微的錯(cuò)誤。本文檔是由譯者獨(dú)立完成,未免有翻譯不妥之處,因此任何的建議和指正都是非常歡迎的。聯(lián)系的方式是通過電子郵件至 chenshanxue@索引摘要 1版權(quán) 1前言 1索引 2正文 3第一章 SIP協(xié)議 3SIP獨(dú)立與媒體 3SIP獨(dú)立于傳輸層 3SIP有很好的擴(kuò)展性 3SIP和最終用戶服務(wù) 3第二章 SIP協(xié)議概述 4SIP語法 4SIP事務(wù) 5SIP會(huì)話 5Server 行為 7第三章 oSIP開發(fā)庫 7目標(biāo) 7開發(fā)的層次 7語法分析器 7有限狀態(tài)機(jī) 8事務(wù)管理 8誰將受益于oSIP 8允許的平臺(tái) 8第四章 oSIP語法分析器 8文件 8SIPURL(SIP地址) 9URL定義的語法結(jié)構(gòu)和設(shè)計(jì)目標(biāo) 9url_t結(jié)構(gòu)體操作的API 9url_param_t和url_header_t操作的API 11SIP headers操作的API 13SIP Message操作的API 17語法分析部分樣例程序 23結(jié)構(gòu)信息轉(zhuǎn)化成字符串 26如何提高語法分析器的性能 27第五章 有限狀態(tài)機(jī) 27事務(wù)處理和事件(Events) 27事務(wù)處理的定義和目的 27事件的定義和目的 28事務(wù)處理的API 28回叫 31一些有用的宏(MACROs) 32有限狀態(tài)機(jī)的指引 33初始化oSIP棧 33分配和初始化osip_t結(jié)構(gòu) 33發(fā)送事件(events)控制事物(transaction) 34Proxy開發(fā)的注意點(diǎn) 36建造自己的體系結(jié)構(gòu) 36后記 36正文第一章 SIP協(xié)議SIP協(xié)議是用于發(fā)起、控制和終結(jié)多媒體會(huì)話的信令協(xié)議。它被IETF( )以rfc2543發(fā)表。SIP是IETF致力于將電話服務(wù)帶入IP網(wǎng)絡(luò)眾多協(xié)議的一個(gè)組成部分(它與SDP、RTP、RTCP、RTSP、RSVP、TRIP等眾多協(xié)議構(gòu)成SIP系統(tǒng)協(xié)議棧)。其將要變成正在發(fā)展的IP電話——這個(gè)朝氣蓬勃的電信工業(yè)——的標(biāo)準(zhǔn)之一。正如同電子郵件協(xié)議一樣,SIP將會(huì)變得越來越普及和大眾化… …SIP獨(dú)立與媒體傳統(tǒng)電話使用一種媒體編碼個(gè)師通訊(正如被我所熟知的時(shí)隙和PCM概念)?,F(xiàn)在,這種方式將被終結(jié)。我們的電話可以以不同的質(zhì)量保證和不同的編碼方法連接電視、連接攝像機(jī)、連接其他電話進(jìn)行通信。SIP具有媒體協(xié)商等功能。任何多媒體應(yīng)用(例如:游戲、遠(yuǎn)程教學(xué))都可以使用SIP來建立會(huì)話。SIP獨(dú)立于傳輸層SIP并不和任何的傳輸層緊密結(jié)合。這一構(gòu)思將使得SIP在第三代網(wǎng)絡(luò)中受到最小的互操作影響。無線電話的要求(例如漫游功能)同樣被關(guān)心。SIP完美的構(gòu)思,使得其適合作為新蜂窩電話時(shí)代的信令協(xié)議。SIP有很好的擴(kuò)展性在rfc2543中定義了6種類型的事務(wù)(INVITE,BYE,CANCEL… …)。這些事務(wù)被用于媒體協(xié)商、創(chuàng)建、修改和終結(jié)呼叫。許多其它的服務(wù)已經(jīng)提供這些方式(),但SIP以其為擴(kuò)展性為目的設(shè)計(jì)和事務(wù)模型重用(對(duì)于服務(wù)器是透明的,被用于使用新類型事務(wù)創(chuàng)建輔助服務(wù))。下面是可能的服務(wù)列表,其中的一些已經(jīng)被實(shí)現(xiàn)。短信,用于實(shí)時(shí)信息預(yù)定或通告,用于會(huì)議管理委托,用于呼叫轉(zhuǎn)移等管理SIP和最終用戶服務(wù) “SIP透明支持名字映射和重定向服務(wù),提供ISDN和智能網(wǎng)絡(luò)電話服務(wù)同樣的一些功能。這些特性也使得個(gè)人移動(dòng)成為可能?!眳⒖奸喿x:()SIP服務(wù)器被用于定位用戶和分發(fā)請(qǐng)求的用戶定位信息。這些途徑,使得最終用戶代理發(fā)起很少的請(qǐng)求,并能獲得多種多樣的服務(wù)。許多擴(kuò)展性在建議文檔中定義(查詢SIP相關(guān)的draft)。我們也可以增加個(gè)性化的電話功能并和現(xiàn)有已存在的服務(wù)器保持交互。第二章 SIP協(xié)議概述 本章目的并不是為了細(xì)致的描述rfc(我們必須通過閱讀rfc獲取協(xié)議細(xì)節(jié)),其緊緊提供快速、不完整的協(xié)議語法和行為概述。SIP語法SIP是一個(gè)基于utf8文本編碼格式的協(xié)議(這使其消息具有很好的可讀性,并易于調(diào)試)。SIP協(xié)議中描述了請(qǐng)求、地址(URL)、應(yīng)答和個(gè)個(gè)頭部字段的語法信息。整個(gè)語法信息以擴(kuò)展巴克斯范式的形式描述,可以在Columbia獲得。這些語法定義參考了Mail和HTTP的定義方式。SIP定義了6種請(qǐng)求的類型。最基礎(chǔ)的方法有:INVITE ACK CANCEL BYE INFO OPTIONS正如我們?cè)谡?qǐng)求的BNF定義中看到的(參考rfc2543第三章節(jié)),SIP不限定于在規(guī)范中已定義的簡短的方法列表,擴(kuò)展性被充分的考慮了。不限定于上面的列表,任何其他類型的請(qǐng)求都可以被oSIP處理。當(dāng)然這一切的一切,依賴于大家的通知和貢獻(xiàn)新的可能方法的樣例程序等等。目前的開發(fā)庫沒有太多的努力,以便明確的支持用于提供開發(fā)SIP電話的能力。INVITE sip:jacK@ SIP/Via: SIP/To: sip:jacK@From: sip:cha@CallID: 35778645354@CSeq: 1 INVITEContact: sip:cha@Contenttype: application/sdpContentlength: 267v=0o=user1 53655765 2353687637 IN IP4 s=Mbone Audioi=Discussion of Mbone Engineering Issuese=mbone@c=IN IP4 t=0 0m=audio 3456 RTP/AVP 0a=rtpmap:0 PCMU/8000 樣例21 INVITE請(qǐng)求消息內(nèi)容INVITE請(qǐng)求被用于初始化和定制會(huì)話?,F(xiàn)在。,其將被前轉(zhuǎn)到j(luò)ack的通訊設(shè)備,設(shè)備擁有真正IP地址。SIP事務(wù)SIP使用事物控制和管理會(huì)話。事務(wù)(INVITE,CANCEL,BYE… …)通常是當(dāng)前會(huì)話進(jìn)展的記憶體。一些其它的事物(SUBSCRIBE,NOTIFY… …)對(duì)會(huì)話來講并不必要。一個(gè)事物是由請(qǐng)求和應(yīng)答(一些的中間應(yīng)答和最終應(yīng)答)構(gòu)成。以下頭部字段:TO、From、CallID和Cseq被用于在一個(gè)事務(wù)中識(shí)別相關(guān)聯(lián)的消息。因?yàn)镾IP可以使用不可靠的傳輸層協(xié)議(在IP網(wǎng)絡(luò)中推薦使用UDP),SIP也定義了在一個(gè)事務(wù)中消息重傳的規(guī)則。UAC1 UAS2 jacks | INVITE |initiate a|| Bob39。s call | | Phone starts| 180 Ringing| ringing||| 180 Ringing|||| 200 OK |||| ACK |||樣例22 INVITE事務(wù)這是一個(gè)最基本的點(diǎn)對(duì)點(diǎn)的信令呼叫流程的展示。僅有兩個(gè)SIP用戶代理(UAC/UAS)之間進(jìn)行的呼叫過程。(重傳的情況沒有被展示)SIP會(huì)話事務(wù)(Transactions)被用戶代理用于控制會(huì)話。一個(gè)會(huì)話總是有INVITE消息發(fā)起的。SIP定義了一系列的應(yīng)答狀態(tài)碼。一個(gè)代理服務(wù)器可以應(yīng)答你一個(gè)非常知名的”404 User Not Found”(我們?cè)谑褂肏TTP的時(shí)候,也經(jīng)常遇到“ HTTP 404 未找到文件”)。錯(cuò)誤也分不同的等級(jí)。一個(gè)事物呼叫失敗了,但可能仍在嘗試新的定位,進(jìn)行新的事務(wù)呼叫。應(yīng)答3XX用于重定向機(jī)制;4XX、5XX、6XX應(yīng)答各自用于標(biāo)識(shí)終端錯(cuò)誤、服務(wù)器錯(cuò)誤和全局錯(cuò)誤。 BOB Jack () UA1 Redirect UA2 | REGISTER | . || . | 200 OK | . || . . . .later... . . . . . . . | REGISTER | . || . | 200 OK | . || . . .later... . . . | INVITE jack@ . || . |302 Moved temporarily . || . | ACK | . || . | INVITE jack@ | | audio | || | 180 Ringing | || | 180 Ringing | || | 200