首页 > 其他 > 详细

opensips路由类型总结(更新中)

时间:2020-03-22 00:56:39      阅读:291      评论:0      收藏:0      [点我收藏+]

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

总结

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

技术分享图片

opensips路由类型总结(更新中)

原文:https://www.cnblogs.com/jiaoyiping/p/12543395.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!