2014年11月21日 星期五

kamailio

沿革

Kamailio 是 GPL 開源的 SIP 伺服器,一開始叫作 SIP Express Router (SER),2005 另外分出為 OpenSER,2008 因商標問題改名為 kamailio (夏威夷話的談話、通話),不久後合併老東家 SER,之後釋出的第一個兩者相容版本是 v3.0.0。2014 三月釋出 v4.0.0,真正將兩者整合為一,並支援 WebSocket。

2017/02/27:釋出 v5.0.0

kamailio 跟 Asterisk 的不同

SIP 而言,他們的差別就是 SIP Proxy 跟 SIP PBX 的不同。在 SIP PBX,通話的兩端是分別跟 SIP PBX 通,SIP PBX 再把兩端搭起來,SIP PBX 等於是背對背的網路話機 (b2bua)。這個背對背的兩個網路話機之間可以做很多應用,例如錄音、DTMF 轉換、送待機音樂、IVR、會議的混音、協定轉換等。而 SIP Proxy 只是「媒人」,幫忙通話的兩端「牽線」,兩端「來電」之後的發展就不是媒人的事了。雖然 SIP PBX 也可以作 SIP Proxy 使用,但就一通電話而言,其實是將相關的兩通電話搭起來,使用了較多的資源。

kamailio 使用入門

在 Ubuntu 使用 kamailio
kamailio 簡易命令檔 (簡易 SIP proxy,讓 SIP 話機註冊後互撥,不用建立帳號)
kamailio 命令檔說明 

kamailio 除錯

  • kamailio -c:測試設定檔,並列出監聽的網路界面
  • kamailio -E:顯示 strerr

kamailio 應用

transaction 支援:使用 tm 模組
  • t_relay
Proxy
Outbound proxy
Location server/registrar
  • 使用 registrar 模組搭配 usrloc 模組
  • registrar 模組的 save() 函數
  • registrar 模組的 lookup() 函數 [連結]
Presence server
SIP load balancer
  • 使用 dispatcher 模組:從檔案或資料庫讀取目的,依照 round-robin、weight based load balancing、call load distribution、hashing over SIP message attributes 等規則轉送。
Call routing (Least Cost Routing)
Application server
SIP session border controller

使用資料庫
使用其它程式語言

參考來源

  1. http://www.slideshare.net/oej/kamailio-a-quick-introduction
  2. http://kamailio.org/docs/ser-getting-started/SER-GettingStarted.pdf
  3. http://www.kamailio.org/wiki/cookbooks/4.2.x/core
  4. http://kamailio.org/docs/modules/stable/

延伸閱讀

  • SIP Routing Done In Lua with Kamailio
  • /etc/kamailio/kamctlrc:kamdbctl 或 kamctl 用到的參數
  • kamctl MI (management interface) 可 start/stop、shared variables、建立 SIP 帳號、statistics
  • kamdbctl:建立資料庫
  • kamcmd:RPC 界面及 MI 功能、Select/Config variables、statistics
  • siremis:Web application、database 管理、statistics
  • kamialio 管理界面:MI、RPC、pipe、Json、XMLrpc
  • kamailio 4.2.x:corepseudo variables、及 transformation
  • kamailio 模組
    • dialplan:比對轉換規則
    • dmq:distributed message queue, 可跟其它 kamailio 間傳遞訊息,基於這個機制可發展其他應用,如 dmq_usrloc 跟 htable 用來同步資料。
    • exec: 透過環境變數 SIP_xxx 傳遞額外資訊來執行 shell 指令。
      • exec_dset(command):每行輸出成為 destination set
      • exec_msg(command)
      • exec_avp(command [, avplist]):每行輸出存為 avp
    • p_usrloc:使用多個位置資料庫
    • outbound
    • memcached:提供 pseudo-variables $mct(key), $mct(key=>expiry), $mcinc(key), $mcdec(key), $mctex(key) 存取外部伺服器程式 memcached 管理、存在記憶體的 distributed hash table。expire 或空間不足
    • rr:
      • loose_route
    • usrloc:

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...