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块

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

 

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

转载于:https://my.oschina.net/andywang1988/blog/796388

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然!我可以给你提供一些关于OpenSIPS(Open SIP Server)的教程。 1. 开始使用OpenSIPS - 首先,你需要安装OpenSIPS。你可以从官方网站上下载最新的稳定版本,并按照它们的安装指南进行安装。 - 一旦安装完成,你可以通过在命令行中输入“opensipsctl start”来启动OpenSIPS。 - 接下来,你可以配置OpenSIPS以满足你的需求。配置文件位于/etc/opensips/目录下。你可以编辑这些文件来定义路由规则、处理脚本和其他功能。 - 完成配置后,你可以使用“opensipsctl start”命令重新启动OpenSIPS以加载新的配置。 2. OpenSIPS 路由 - OpenSIPS的主要功能之一是路由。通过配置路由规则,你可以决定如何处理传入和传出的SIP请求。 - 在配置文件中,你可以使用“route”关键字定义路由规则。例如,你可以定义一个基本的路由规则来处理所有传入的INVITE请求: ``` route{ if (is_method("INVITE")) { # 在这里处理INVITE请求 } } ``` - 你可以在路由规则中使用OpenSIPS的函数和变量来处理请求并制定下一步的行为。 3. OpenSIPS 脚本语言 - OpenSIPS使用自己的脚本语言来处理SIP请求和响应。这个脚本语言是基于类C语法的。 - 你可以在路由规则中使用脚本语言来执行各种操作,例如:修改请求、添加头部、发送请求等。 - 你可以参考OpenSIPS官方文档中的脚本语言指南,以了解更多关于它的详细信息。 4. OpenSIPS 模块 - OpenSIPS通过模块来扩展其功能。模块提供了各种功能,例如:认证、媒体处理、数据库集成等。 - 你可以使用OpenSIPS的模块管理工具来查看已安装的模块和加载/卸载模块。例如,你可以使用以下命令查看已加载的模块: ``` opensipsctl module ``` 这只是OpenSIPS的一些基础知识和指导,希望对你有所帮助!如果你对特定主题有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值