opensips路由類型總結(更新中)


opensips的路由可以分為主路由和子路由,主路由是由opensips觸發的,子路由更像是編程語言里的函數調用

主路由可以分為以下幾種:

請求路由

請求路由是opensips中最重要的一種路由類型,也是opensips的路由腳本中必須有的一種路由類型,當opensips接收到從網絡發送過來的SIP請求的時候,觸發請求路由(請求路由只處理opensips接收到的請求,不處理返回)

示例:

route{

	if (is_method("INVITE"))   xlog("L_INFO", "<sc>: $rm $ru, $fU to $tU");	
	
	if (is_method("REGISTER")) xlog("L_INFO", "<sc>: $rm $ru, $fU from $si:$sp, expires $(hdr(Expires))");
	
	if (is_method("OPTIONS")) {
		sl_send_reply("200", "OK");
		exit;
	}
	
	# per request sanity checks
	route(CHECK_SANITY);
	
	# nat detection
	route(NAT_DETECT);
	
	# handle requests within sip dialogs
	if (has_totag()) {
	  route(WITHINDLG);
	}

分支路由

分支路由在SIP請求離開opensips時做處理,不能夠做一些信號操作(結束請求,轉發請求或者是drop請求),但是可以檢查和修改和刪除SIP請求。

分支路由主要的應用場景在fork SIP請求,比如,當你有一個SIP請求,可以在這里把它變成多個SIP請求(比如說一鍵多呼的場景,客戶端發起一個invate,opensips可以把它變成多個invate發送出去)

在請求路由中設置一個 t_on_branch("分支路由名稱"),這相當於設置了一個鈎子,當SIP請求離開opensips的時候相應的分支路由會被觸發。

可以設置多個t_on_branch,但是只有一個會被執行,后邊的鈎子會覆蓋前邊的。

失敗路由

當SIP請求返回的狀態碼大於200時,觸發失敗路由,在失敗路由中,可以選擇把失敗的狀態碼返回給客戶端,或者重新發送請求,也可以修改SIP的狀態碼,然后返回給客戶端。

響應路由

當opensips接收到響應的時候,觸發響應路由,包括1xx - 6xx的所有相應。

本地路由

有一些請求是opensisp自己發出的,並不是opensips從網絡上接收到的請求,比如多方通話的場景下,由opensips發送給多個客戶端的BYE消息,這些場景下觸發本地路由的執行

啟動路由

opensips啟動的時候,做一些操作,並不涉及SIP消息的接收和處理

定時器路由

定時執行一些操作,不涉及SIP消息的接收和處理

事件路由

特定的事件發生的時候觸發的路由,不涉及SIP消息的接收和處理

錯誤路由

用來捕獲運行時錯誤,比如解析SIP時出錯等

error_route {
   xlog("$rm from $si:$sp  - error level=$(err.level),
     info=$(err.info)\n");
        sl_send_reply("$err.rcode", "$err.rreason");
        exit;
 }

總結

使用矩陣圖類來總結以上的路由類型:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM