• 沒有找到結果。

3. 開發環境

3.1. jSIP

3.1.1. jSIP Class

jSIP提供非常多的類別給程式設計師使用,不過有許多類別已封裝至 主要類別之下,如用來建立Socket的UDPMessageSocket類別就是包裝在 SipClient之下,諸如此類的類別並不需要程式設計師來進行使用,因此底 下就列出使用jSIP開發應用程式時必須要考慮到的幾項主要類別:

1、SipClient:為jSIP在進行訊息收送的核心類別。該類別被建立後,

應用程式即可具備UAC及UAS的基本功能。由於該類別兼具了發 送與接收訊息的能力,因此有關於使用者的使用狀況、UAS相關 參數以及已接收到的呼叫資訊都會集中並儲存在該類別中。

SipClient可以隨時根據該類別中所儲存的各項參數來做出相對的 回應訊息。

2、SipCall:用來建立呼叫的Call-ID(可自定或隨機)以及存放有關 於每一個SipCall的處理狀況,該類別的物件被建立的狀況有二 種,第一種為使用者欲發送訊息時建立;第二種則為接收到請求 時建立,而且每一個被建立的SipCall物件皆會存放在SipClient 中,藉以提供SipClient檢查並處理陸續收到的訊息。

3、SipTransaction:為SipCall物件的呼叫訊息處理類別。主要的功能 為建立欲發送的SIP訊息欄位資訊,該類別會根據使用者欲建立的 訊息或UAS欲傳送回應訊息的型式來產生對應的請求或回應的訊 息內文。

4、SipUri:負責剖析使用者所輸入的URI,除了確認URI是否有誤外,

也會將URI內的資訊進行分類處理(如”@”前為帳號名稱,後為主 機位址等處理),如果一切無誤則該類別會交由SipTransaction進 行與URI有關的處理。

5、SipCallMember:負責處理使用者欲發送的請求以及呼叫的狀況。

該類別在建構時須加入SipCall以及SipUri兩個類別的物件,亦即要 瞭解該呼叫的傳送對象以及Call-ID,如此就可以根據URI來決定 欲傳送的對象以及Call-ID來做後續處理的對應,有關於後續處理 方面,比如當B接收到A所發送的INVITE後,則A後續發送的訊息 則可以透過Call-ID的識別來進行對應的處理。

6、SipUser:設定使用者的相關參數,如使用者的名稱、主機位址以 及存放使用者已登錄的伺服器資訊。

7、SipRegister:該類別用於建立欲連線登錄伺服器的相關資訊,比 如登錄伺服器位址以及使用者的帳號密碼。登錄資訊建立完成後 會交由SipTransaction進行REGISTER訊息的建立,最後再發送。

8、SipStatus:用來存放狀態碼。透過該類別可以取得各種回應碼所 對應的說明字串,如100=Trying、200=OK。如果SIP的規格書提 供回應碼的擴充或修改,程式開發人員可以透過該類別來進行資 訊的修改或更新。

9、Sip:該類別定義各種請求所代表的整數值,用於幫助程式的撰寫 及識別。另外也包含有一些基本狀態的取得,如:取得使用者的 網路位址及UA所開啟的埠號。

10、SipHeader:存放所有SIP相關的訊息標頭資訊。使用者可以透過 該類別取得訊息標頭的代號或是字串名稱。

11 、 SipMessage : 為 存 放 SIP 訊 息 內 容 的 類 別 , 底 下 還 包 含 有 SipRequestMessage以及SipResponseMessage兩個子類別,透過該 類別可以很容易地進行SIP標頭訊息的安插及擷取。

12、SdpMessage:處理與SDP相關的資訊,可以用來建立SDP訊息內 文或是剖析SIP訊息中所夾帶的SDP。

以上提供的類別已將SIP的多項規則及參數封裝至各個類別中,因此 當程式開發人員在進行SIP相關的應用程式開發時,只要透過jSIP的類別 以及類別中的函式使用即可。在開發上,使用jSIP不僅可以節省許多時 間,也讓程式開發人員對SIP的各項規則能有更具體的瞭解。

相關文件