Opensips(Kamailio)腳本執行過程與SIP協議的關係

這篇博文主要講我本身半年前第一次接觸Opensips時,對腳本中route塊和SIP消息相關性的疑惑,主要講route,onreply_route,failure_route三個類型。其餘的能夠直接參考官網的說明:編程

http://www.opensips.org/Documentation/Script-Routes-2-1編程語言

概況的講,opensips.cfg配置文件相似簡單的編程語言,能夠認爲route塊分爲主入口函數,設置的根據條件--SIP事務過程--的回調函數,執行的塊函數。函數

SIP消息分爲: SIP requests/SIP responses,其中SIP responses分爲正常消息和錯誤消息。根據SIP消息的事務類型:事務

            SIP請求---主入口函數--route塊ip

            SIP回覆---回覆調用函數---onreply_route塊get

             SIP錯誤回覆--設置的錯誤回調函數---failure_route塊回調函數

 

以下面:requests

  1.     route {
  2.                 #xxxxx代碼
  3.               route(relay);
  4.        }

   當SIP消息如:INVITE消息過來時,opensips會執行進入這個函數,最後執行route(relay),相似C語言裏面的調用。it

其中route[relay]的實現io

  1. route[relay] {
  2.  # for INVITEs enable some additional helper routes
  3.  if (is_method("INVITE")) {
  4.   t_on_branch("per_branch_ops");
  5.   t_on_reply("handle_nat");
  6.   #t_on_reply();
  7.   t_on_failure("missed_call");
  8. #XXXXX
  9.  }

其中: t_on_reply("handle_nat");和t_on_failure("missed_call");兩個語句分別設置了本次SIP事務的回調函數,SIP的回覆和錯誤回覆。這個是我最開始不能很好理解的地方。

兩個route塊的代碼以下,只作必定的參考。:

  1. onreply_route[handle_nat] {
  2.  xlog("incoming reply\n");
  3. }
  4.  
  5. failure_route[missed_call] {
  6.  if (t_was_cancelled()) {
  7.   exit;
  8.  }

這兩個route塊能夠設置判斷條件,加上你本身的邏輯去處理。

 

寫在後面這是半年前要寫的文章,一直沒空去寫,不少細節都忘了。

相關文章
相關標籤/搜索