3.1 SER System

 

3.1.1 SER是什麼?

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

 

3.1.2 SER的優勢

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

 

3.1.3 SER特性

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

系統平台:

    Sun/Solaris, PC/Linux

Support

    IPv4 IPv6

Use Cases

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

3.1 Use Cases

3.1.4 Module List

 

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


auth module
:用來認證使用者的accountpassword,以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") 重新改寫hostnameURI

sip:12345@192.168.10:6060

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

sip:alice@foo.bar

rewritehostport("192.168.0.10:3040")重新改寫hostnameportURI

sip:12345@192.168.0.10:3040

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

sip:alice@foo.bar:6060

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

sip:alice:pw@foo.bar:6060

rewriteport("1234") 只改寫URIport部分

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撰寫

    SERweb 介面

使用者 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傳送即時訊息給其它人。

*          看是否有storedmessagevoicemail

Ø          利用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是什麼

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

 

3.3.2 SEMS 功能、機制:

  • Voicemail: 錄下callermessage並且傳送wav檔到使用者的e-mail
  • Conferencing: 可讓多人talkconference 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傳送INVITEProxy ServerProxy Server回覆100 Trying,並且forward INVITECalleeCallee回覆100 TryingProxy,並且回覆180 RingingProxy,表示Callee的電話聲響起,Proxy forward 180 TryingCaller,同時,如果Callee接起,則會傳送200 OKProxyProxy Server 繼續forward 200 OKCaller,最後Caller回覆ACKCallee,則建立起連線。

Media流程:Proxy forward INVITECallee時,如果Callee不在線上的話,則會回傳404 not foundCaller,這個時候,我讓Proxy假裝使用者回傳200 OKCaller,並且去啟動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:聽下一則留言

 

 

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

3.18 進行conference