opensips实战教程(三):路由脚本介绍与实战

目录

前言

1、路由脚本opensips.cfg结构简介         

2、脚本路由逻辑介绍与实战应用

    2.1 route路由和子路由实战:将用户信息存储到redis

    2.2 onreply_route请求响应路由:将呼叫状态上报

    2.3 其他路由类型介绍

3、在脚本中调用自己编写的函数

 

 

前言

 

        OpenSIPS支持强大的路由配置,路由语法就像一个小型的脚本语言。OpenSIPS的业务逻辑都由脚本来实现,结合不同模块提供的功能,脚本可以对会话中的逻辑做丰富的自定义路由,只需要更改opensips.cfg脚本。(由于订阅号中编辑展示代码不方便,所以下面都使用截图的方式展示)

 

1、路由脚本opensips.cfg结构简介

 

OpenSIPS路由脚本配置主要分为三个部分:全局参数,模块配置,路由逻辑。

 

全局参数主要包含监听端口,日志配置等全局配置,下面是部分参数:

 

 

模块配置配置需要加载的模块,以及该模块的配置项。前面说过OpenSIPS是模块化设计的,模块需要配置才会加载。如果脚本中包含了某个模块export出来的函数,但是模块又没有在配置文件中配置加载,OpenSIPSs启动时就会在解析脚本时报错。下面是OpenSIPS关键模块usrloc加载配置:

 

路由逻辑OpenSIPS支持强大的路由配置,其中又分为主路由(route)和子路由(route[“name”]),已及branch_route,failure_route,onreply_route,error_route, local_route,startup_route,timer_route,event_route。所有请求事件都从主路由(route)开始,主路由中可以嵌入多个子路由和设置其他类型路由。下面着重介绍路由脚本的路由逻辑。

 

2、路由逻辑介绍与实战应用

 

有些路由不是很常用,这里就不详细说明了,这里详细介绍两个route(及route子路由),onreply_route路由。

 

 

2.1 route路由和子路由实战:将用户信息存储到redis

route路由是OpenSIPS脚本的主路由,所有外部请求处理都会从脚本route开始执行。而route支持将某个路由逻辑分块,在顺序执行路由时,像函数一样调用,这里称之为子路由。子路由不是必需的,只是为了路由逻辑更加清晰。子路由与其它类型路由的不同之处是,其它路由都是当某个条件触发时才会执行。

route路由和子路由实战应用

当用户注册到OpenSIPS的时候,如果想将用户注册的信息存储到redis,供VOIP系统的其他组件使用,可以在主路由中增加对REGISTER请求进行处理,这里加入了一个子路由,使逻辑更清晰。在子路由中保存注册用户信息到redis中:

 

route(register)子路由:

 

    OpenSIPS脚本路由还支持很多操作,这里不多做介绍,后续章节将会看到更多路由脚本配置的例子。

 

2.2 onreply_route请求响应路由实战:将呼叫状态上报

onreply_route是在请求响应时的路由块,使用方法是调用t_on_reply("name"),name为该响应路由块的名称,路由脚本中可以设置多个不同的onreply_route。仅当某个请求设置了之后才会生效。如果外部请求在route主路由中没有执行到t_on_reply(" my_route"),该请求的后续响应是不会路由到onreply_route[my_route]{}路由块的。如果使用onreply_route{}不指定路由名称,则是默认响应路由,所有请求在收到响应时都会路由到这里。

onreply_route路由实战应用

OpenSIPS通常作为一个VOIP系统中的一个组成部分,可能为一个信令代理中间件,也有可能作为一个注册代理。如果作为一个注册代理,势必会有很多SIP终端注册在OpenSIPS。如果VOIP系统中的其它组件想要获得注册在OpenSIPS上的终端的状态,如空闲、响铃、通话中等的状态,可以通过在响应路由中将状态上报,简单实现的话可以将状态保存到redis,复杂实现可以开发一个模块,实现状态推送。后续的篇章中将会介绍OpenSIPS模块开发实例,敬请期待。

这里我们为了展示onreply_route的用法,出于简单易懂,逻辑清晰考虑,直接将状态保存到redis中,如果需要查询某个SIP终端的状态,可以通过redis查询。

 

 

 

2.3 其他路由类型简介

 

failure_route:如果一个请求在route路由中路由时调用了t_on_failure("name");,该请求返回失败后会路由到failure_route[name]这里,可以在这里对失败做相应的处理。

branch_route:当请求有分支请求时会,可以调用t_on_branch("route_name")设置路由。

error_route:当请求解析失败或脚本异常等系统错误时会路由到error_route。

示例:大印出错信息

error_route {

    sl_send_reply("$err.rcode", "$err.rreason");

    exit;

}

local_route:在脚本中调用TM模块(传输模块)的函数发起请求时,会路由到local_route。

startup_route:只有当OpenSIPS启动时才会执行的路由,且只会执行一次,不处理请求消息。

示例:OpenSIPS启动时打印一行绿色高亮的日志“opensips start running”。

startup_route {

axlog("$C(xg) opensips start running $C(xx) \n");

}

timer_route:就类似一个定时器,定时执行脚本中的操作。可以设置多个定时器,同样也不处理请求消息。

示例:每隔300秒从数据库中获取数据

timer_route[gw_update, 300] {

   avp_db_query("select gwlist where ruleid==1",$avp(i:100));

   $shv(i:100) =$avp(i:100);

}

event_route:当订阅的事件发生时,路由到event_route。

 

  OpenSIPS路由脚本还支持很多全局变量,支持声明变量等,如上文中$var(expire_value)就是。具体可以参考文末的文档路径。

 

3、在脚本中调用添加自己编写的函数

 

如果你想在路由脚本中调用自己编写的函数(如上面例子中的cache_raw_query函数),或者添加自定义的脚本全局变量(如上面例子中的$au变量)都是不难实现的,这需要编写拓展模块和修改OpenSIPS的源码,而这又是一大块内容了。后续章节将会讲到OpenSIPS模块开发和增加脚本变量的代码实现。

 

        路由配置是使用OpenSIPS处理业务的基础,掌握语法和使用方式是必要。再结合OpenSIPS提供的众多可拓展的功能模块,组合起来就可以实现很多复杂的业务和提供可靠的服务。

 

(全文完)

 

OpenSIPS实战(一):OpenSIPS使用简介

OpenSIPS实战(二):日志文件配置

 

更多参考官方文档

http://www.opensips.org/Documentation/Script-Routes-2-3

http://www.opensips.org/Documentation/Script-Operators-2-3

http://www.opensips.org/Documentation/Script-CoreVar-2-3

http://www.opensips.org/html/docs/modules/2.3.x/cachedb_redis.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值