下面是一個簡易的 stateless proxy,含免認證 REGISTRAR,可給 SIP 話機註冊後互撥,不用建立帳號。
#!KAMAILIO
# 載入模組
loadmodule "sl.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
# 處理 SIP 請求,預設是丟棄
route {
# REGISTER 則 save() 執行 SIP 註冊動作後結束。
if (method=="REGISTER") {
if (!save("location"))
sl_reply_error();
exit;
}
# 其它則 lookup() 查是否有註冊。
if (!lookup("location")) {
# 查詢失敗,回 404 等之後結束。
switch ($rc) {
case -1:
# 查不到
case -3:
# 內部錯誤
sl_send_reply("404", "Not Found");
exit;
case -2:
# 有查到,但 Method 不支援
sl_send_reply("405", "Method Not Allowed");
exit;
}
}
# 如有查到會置換 uri,呼叫內建函數 forward() 將封包轉送。
forward();
}
# SIP 回應預設依 Via 轉送,所以不需要回應處理區塊。
載入的模組說明- sl:stateless replier,提供 sl_send_reply(code, reason) 及 sl_send_error() 等回覆 SIP status code 的函數。
- sl_send_reply(code, reason):送 SIP 回覆
- sl_send_error():依據錯誤碼送 SIP 回覆
- sl_forward_reply([ code [, reason ] ]):轉送 SIP 回覆,可更改 code 或 reason
- send_reply(code, reason):取決是否是在 tm 的 transaction 中而 stateful 或 stateless 送 SIP 回覆。
- usrloc:提供 location database 給 registrar 等其它模組使用
- registrar:使用 usrloc database 來提供 SIP 註冊功能,這裡用到下列兩個函數
- save(domain[, flag[, uri]]):儲存註冊資料到 usrloc database,並回 200 OK
- lookup(domain[, uri]):查詢 usrloc database 取代 uri
- 如果 INVITE 收到多個不同 To tag 的回應會怎樣?可以怎樣處理?
- kamailio 簡介及目錄 (本站)
沒有留言:
張貼留言