Opensips(Kamailio)脚本执行过程与SIP协议的关系

原创
2016/11/29 20:08
阅读数 837

这篇博文主要讲我自己半年前第一次接触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块

            SIP回复---回复调用函数---onreply_route块

             SIP错误回复--设置的错误回调函数---failure_route块

 

如下面:

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

   当SIP消息如:INVITE消息过来时,opensips会执行进入这个函数,最后执行route(relay),类似C语言里面的调用。

其中route[relay]的实现

  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块可以设置判断条件,加上你自己的逻辑去处理。

 

写在后面这是半年前要写的文章,一直没空去写,很多细节都忘了。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部