3.1 SER System

 

3.1.1 SER是什麼?

    SER是SIP Express Router 的縮寫,它是由iptel.org所開發出來的一套open source軟體,是一個以Session Initiation Protocol (SIP RFC2543-bis)為基礎的VoIP伺服器。

 

3.1.2 SER的優勢

    以MySQL當資料庫,方便管理運用,利用Web site來當interface,分別為user interface與admin interface讓使用者與管理者能夠更快速且便利的操作、且具有彈性的plug-in模組,可以更輕易增加新的功能、應用,提供更先進且符合客戶要求的服務。iptel.org還有提供SER專屬討論區,並且有程式研發者進行維護,而且可以利用iptel.org的CVS Server來update最新的source code讓SER保持最少bug,更好的功能。

 

3.1.3 SER特性

    依據最新的標準,SIP Express Router (SER)支援registrar, proxy 和 redirect 模式。

系統平台:

    Sun/Solaris, PC/Linux

Support:

    IPv4 和 IPv6

Use Cases:

    接下來介紹SIP的use cases,SIP Express Router (SER)可以很容易發展成連繫各SIP元件的媒介,包括softphones、hardphones、PSTN gateways 或任何其它 SIP-compliant 裝置設備。

圖3.1 Use Cases

3.1.4 Module List:

 

acc module:用來記錄missed call,支援MySQL and radius module


auth module
:用來認證使用者的account和password,以MySQL為基礎


exec module
:用來允許script使用外部執令,例如:exec_uri(“ping   140.115.156.57”)

 

jabber module:允許Jabber 的使用者,做溝通


msilo module
:當使用者不在線上,用來存來文字模式的訊息


registrar/usrloc modules
:可支援multi domain


tm module
:用來做server回傳訊息的格式,例如 t_relay_to


vm module
:支援語音

 

3.1.5 其他預設method:

Example Action

Resulting URI

rewritehost("192.168.0.10") 重新改寫hostname的URI

sip:12345@192.168.10:6060

rewriteuri("sip:alice@foo.bar") 重新改寫整個URI

sip:alice@foo.bar

rewritehostport("192.168.0.10:3040")重新改寫hostname和port的URI

sip:12345@192.168.0.10:3040

rewriteuser("alice") 重新改寫URI使用者部分

sip:alice@foo.bar:6060

rewriteuserpass("alice:pw") 重新改寫URI使用者account和password的部分

sip:alice:pw@foo.bar:6060

rewriteport("1234") 只改寫URI的port部分

sip:12345@foo.bar:1234

prefix("9") 在使用者名稱插入字串

sip:912345@foo.bar:6060

strip(2) 移除URI的使用者前2個字元

sip:345@foo.bar:6060

表3.1 其它預設method

 

 

3.1.6 SER安裝步驟:

 

Supported architectures: Linux/i386, Linux/armv4l, FreeBSD/i386, OpenBSD/i386

Solaris/sparc64, NetBSD/sparc64

Requirements:

- gcc or icc : gcc >= 2.9x; 建議使用3.12

- GNU make version >= 3.79.

- sed and tr (used in the makefiles)

- GNU tar ("gtar" on Solaris) and gzip:如果使用SOURCE安裝

- GNU install or BSD install (on Solaris "ginstall") :如果使用make install來安裝

- libmysqlclient & libz (zlib) :使用mysql必須的lib

- libexpat

步驟:

Step1:編譯且安裝

cd /; tar zxvf <package_name>_os_arch.tar.gz

cd <package_name>_os_arch

make all

make install

Step2:設environment

export SIP_DOMAIN="myserver.foobar.com"

Step3:建立MySQL tables

/usr/sbin/ser_mysql.sh create

Step4:撰寫route script

    - loadmodule "/usr/lib/ser/modules/mysql.so"

    - loadmodule "/usr/lib/ser/modules/auth.so"

    - loadmodule "/usr/lib/ser/modules/auth_db.so"

    - modparam("usrloc", "db_mode", 2)

    - modparam("auth", "calculate_ha1", yes)

    - modparam("auth_db", "password_column", "password")

    -       if (!www_authorize("myserver.foobar.com", "subscriber")) {

        www_challenge("myserver.foobar.com", "0");

        break;

      }

Step5:重新啟動server

/usr/local/bin/serctl restart

 

SER伺服器行程

圖3.2 SER伺服器行程

 

SER伺服器運作狀態

圖3.3 SER伺服器運作狀態

 

 

 

 

 

 

測試:利用UA互傳訊息及對話

圖3.4 訊息傳遞

3.1.7 DataBase(MySQL)

圖3.5 DataBase

 

3.2 SERWEB -利用PHP+MySQL撰寫

    SER的web 介面

使用者 http://140.115.156.57/user_interface/

管理者 http://140.115.156.57/admin/

3.2.1 網頁架構

圖3.6 網頁架構圖

3.2.2 SERWEB功能、機制

*          向server註冊新的使用者

Ø          新的使用者可以藉由這個頁面,註冊屬於自己的帳號、密碼,註冊完畢後,會收到一封認證信來啟動帳號。

*          使用者管理自己的帳號

Ø          使用者可以任意的修改自己的密碼、信箱、以及國家…等。

*          好友名單

Ø          編輯自己的好友名單,當自己的好友登入SIP Server時,會顯示Online。

*          看是否有missed calls

Ø          當有未接的Call時,會顯示出來

*          傳送即時訊息

Ø          可以利用Web傳送即時訊息給其它人。

*          看是否有stored的message和voicemail

Ø          利用Web傳送即時訊息時,如果Callee不在,則會被儲存下來

*          Server的監督管理

Ø          系統管理者專屬,可查看Server運作。

 

我的帳號è允許使用者改變自己的喜好和修改註冊資料。

圖3.7 我的帳號

 

電話簿è可以看到每個使用者的上線與否,如果使用者登入,將會顯示“on line”,如果使用者未登入,則顯示 “offline” ,如果使用者並不屬於這個server 的administrative domain,則是出現“non-local”。

 

圖3.8 電話簿

 

 

 

 

 

 

即時訊息è可以傳送即時訊息給on-line 或 off-line 的使用者,如果是On-line的使用者:如下圖所示,接收訊息。

圖3.9 傳送即時訊息

圖3.10 UA接收訊息

 

 

訊息儲存è如果是Off-line的使用者,將會把訊息儲存到message store裡。

圖3.11 傳送到Off-line User

 

訊息儲存è使用者可以看到所有儲存在message store的訊息。

圖3.12 訊息儲存

 

3.3 SEMS System

3.3.1 SEMS是什麼

    SEMS是SIP Express Media Server 是一個free且extensible的多媒體伺服器,可針對VoIP系統提供voice的service,利用它與SER (SIP Express Router)搭配,形成full-featured IP telephony 系統。

 

3.3.2 SEMS 功能、機制:

  • Voicemail: 錄下caller的message並且傳送wav檔到使用者的e-mail
  • Conferencing: 可讓多人talk在conference room.
  • Echo: 測試模組可測試自己的voice.
  • Interactive voice response: 互動式語音應答系統.

3.3.3 SIP with SEMS設計動機:

SIP server 與media server做搭配:

利用SIP可以傳送即時訊息、也可以透過語音來傳送,但是如果使用者不在線上,又有急緊事情想要聯絡,卻無法留下訊息,造成不便,靈機一動,想到SIP的應用跟手機電話很相似,所以就仿照手機的語音信箱,想要實作出SIP專用的留言系統。

圖3.13 SEMS流程圖

3.3.4 流程圖解說:

原始流程:一般Caller呼叫某一Callee時,流程如黑色箭頭所示,Caller傳送INVITE給Proxy Server,Proxy Server回覆100 Trying,並且forward INVITE給Callee,Callee回覆100 Trying給Proxy,並且回覆180 Ringing給Proxy,表示Callee的電話聲響起,Proxy forward 180 Trying給Caller,同時,如果Callee接起,則會傳送200 OK給Proxy,Proxy Server 繼續forward 200 OK給Caller,最後Caller回覆ACK給Callee,則建立起連線。

Media流程:在Proxy forward INVITE給Callee時,如果Callee不在線上的話,則會回傳404 not found給Caller,這個時候,我讓Proxy假裝使用者回傳200 OK給Caller,並且去啟動Media Server,開始錄音,當Caller傳送BYE時,結束錄音。

 

3.3.5 SEMS安裝步驟:

 

Requirements:

    Ser version >= 0.8.12: SIP Epress Router

步驟:

Step1:下載SEMS透過CVS

export CVSROOT=:pserver:anonymous@cvs.berlios.de:/cvsroot/sems

cvs co -r ser_rel_0_8_12 answer_machine

Step2:編譯並且安裝

cd /usr/local/src/answer_machine/

make all

make install

Step3:修改configuration

vi /etc/sems/sems.conf

Step4:設立environment

export LD_ASSUME_KERNEL=2.4.1

Step5重新啟動SER

/usr/local/bin/serctl restart

Step6:重新啟動SEMS

/usr/local/bin/sems –E –D 0

 

IVR module安裝步驟:

 

Requirements:

Ser version >= 0.8.12: SIP Epress Router

SEMS

Python version>=2.2.3

步驟:

Step1:下載source透過CVS

cp -r answer_machine answer_machine_backup

   cd answer_machine

wget http://developer.berlios.de/patch/download.php?id=140 -O  AmAudio.formatlock.patch

    patch -p0  <AmAudio.formatlock.patch

    cd plug-in

    rm -rf ivr

    cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/semsivr co ivr

    cvs -d:pserver:anonymous@cvs.berlios.de:/cvsroot/semsivr co -r HEAD ivr

Step2:自訂Makefile

    ls /usr/include/python2.3/Python.h

   ls /usr/include/python2.2/Python.h

   ls /usr/local/include/python2.3/Python.h

   ls /usr/local/include/python2.2/Python.h

    vi ivr/Makefile

Step3:編輯且安裝

    cd ivr

   make

   cd ../..

   make install

Step4:撰寫自己的python script(片段)

if  callee == "message" :

   if os.path.isdir(messages_path + caller):

      for files in os.listdir(messages_path + caller):

         while x > 0:

            if x > 3:

               x=ivr.playAndDetect(wav_path + "ivr_instruction.wav",60000)

            if x == 1:

               # listen message

               ivr.play(messages_path + caller + "/" + files)

               x=100

            if x == 2:

               # delete message

               os.remove(messages_path + caller + "/" + files)

               x=1

               ivr.play(wav_path + "ivr_next_message.wav")

               break

            if x == 3:

               # listen next message

               x=1

               ivr.play(wav_path + "ivr_next_message.wav")

               break

   # no new messages

   if x > 0:

      ivr.play(wav_path + "ivr_no_messages.wav")

# if user is not user of mailbox

# user can left message

else :

   print "play invitation"

   ivr.play(wav_path + "ivr_invitation.wav")

   print "record message"

   if os.path.isdir(messages_path + callee) != True:

      os.mkdir(messages_path + callee)

   ivr.record(messages_path + callee + "/" + callee + str(ivr.getTime()) + ".wav", 60)

Step5重新啟動SEMS

/usr/local/bin/SEMS

 

 

 

3.4 操作

當Caller call任一Callee,如果這個Callee沒有登入,則會進入Voice System並且進行留言,可留言30秒(預設)。

圖3.14 進入Voice System

 

SEMS Server Status :

圖3.15 SEMS Server Status

 

如果想聽留言,則call “message”,會進入互動式語音應答系統

 

圖3.16 聽留言訊息

 

圖3.17 互動式語音應答系統

    按1:聽留言

    按2:刪除留言

    按3:聽下一則留言

 

 

如果想進行conference,call”onference”,可允許多個使用者同時talk

圖3.18 進行conference