Tuesday, June 17, 2003

Session Initiation Protocol

就 VoIP 網路而言, SIP是一個非常有彈性而且功能強大的通訊協定, SIP 能夠更有力的支援許多智慧型的電話網路服務及各種使用者平台,並且能夠快速而有效的發展許多先進的功能。

這次是要實作 SIP protocol 的 redirect server 。我決定讓它能夠支援 multi-user ,每次由 user end 那 send 出的 request 都會在 server 上由個別的 Thread 處理。

我將整個架構切割成 SipStack, SipProvider, SipListener 等三個 class 或 interface 。

  • SipStack 將底層 network protocol 封裝起來,供 SipProvider 使用。
  • SipProvider 則提供基本的 SIP message 傳遞及分送。並將收到訊息後的對應動作委託給SipListener 處理。
  • SipListener 是一個 interface ,用來傾聽 SipProvider 送來的 event ,並處理。

此外, SipHeader 被設計來剖析 SIP message 的 header。

最後, RedirectServer 則 implements 了 SipListener 這個介面。 RedirectServer 也處理了所有關於 SIP redirect server 的高階協定。

由於要支援 multi-thread ,且軟體以 OO設計,再加上此 SIP 是 application layer 的 protocol ,所以決定以 Java 語言實作。

若只滿足於達到作業的功能要求,程式部分還滿單純的。唯之前並未真正接觸過網路程式設計,所以費了一翻功夫在相關程式寫法的摸索。

此外,我還為本程式立下 reusable 和 extendable 的目標。所以在分析及設計上費了一番功夫。

這個 SIP AP 的底層是採用 UDP 協定。原則上,在目前設計的架構下我們可以很容易地切換到 TCP 。也可以很容易地改寫成其他 SIP AP 。

沒力氣再掰下去了,有興趣的話,這裡也附上原始碼。請自行參照。

Tags: [] [] [] [] [] []

2 comments:

Anonymous said...

對不起 前一篇的post是我留的
您的redirectserver是否很像
台大資工逄教授的homework#2呢
(如以下的網址)
http://voip.csie.org/voip2006/
我不是台大的 但我的指導老師希望我們能遵照homework#2以C程式來完成
您給的程式是java 若是很類似逄教授的homework 我們倒是可以好好的來trace您的程式
sip的觀念不難 難在這些call message如何封裝在socket的datagram以及解析
希望您給我們一些指導

York said...

To Anonymous,

不好意思,
由於年代久遠,我已經不記得了。
再加上公事繁忙,無法抽空再複習自己的 code 了。
請見諒 =.="