posts - 145,comments - 23,views - 73万

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;
 }

总结

使用矩阵图类来总结以上的路由类型:

posted on   梦中彩虹  阅读(2166)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2015-03-21 Lucene中最简单的索引和搜索示例
2015-03-21 准备写一些博客文章
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示