zoukankan      html  css  js  c++  java
  • freeswitch dialplan学习总结

    Dialplan 是freeswitch 对一个呼入电话的路由查询。通过 show dialplan 命令可以查看到当前freeswitch可以支持的哪些 dialplan.

    常用的 dialplan 有 XML、LUA、inline等。

    XML Dialplan 主要由一系列xml配置文件组成,格式如下:

    [html] view plain copy
     
    1. <context name="mydialplan">  
    2.     <extension name="ext1">  
    3.         <condition field="xxx" expression="xxx">  
    4.              <action application="app" data="args"/>  
    5.         </condition>  
    6.     </extension>  
    7. </context>  


    更详细的配置可以参考 conf/dialplan/default.xml 文件。

    其中配置文件中的 name 字段是可以重复存在的, freeswitch并没有对该属性做检查,freeswitch 只在找到匹配的extension时,将其 action 记录到执行队列。注意:在dialplan的匹配过程中,并不会执行 action(带有inline属性的action除外,该类型的action会立即执行,一般用来设置一个变量值),需要等到dialplan结束时,才会进入执行阶段!

    对于dialplan解析何时结束,这是可控的。

    1、在extension 后面可以添加 continue 属性

           continue = "true" :表示不管该extension中是否有condition匹配,都继续执行dialplan

           continue = "false":表示如果该extension中有匹配的condition,那么就停止了dialplan。false是默认值

    2、在condition 后面可以添加 break 属性,break可以是下面几个值

           "on-false"  :表示在第一次匹配失败时停止(但继续处理其他的extension),这是默认配置

           "on-true"    :表示在第一次匹配成功时停止,不成功则继续路由该condition后面的其他 condition

           "always"    :不管是否匹配都停止该 extension 中的 condition 路由

           "never"       :不管是否匹配都继续该 extension 中的 condition 路由

    默认情况下,在没有任何 continue、break属性的时候,在找到 匹配后,就会结束dialplan.

    从上面两点可以看出,continue是用来限制是否继续下一个 extension; break 是用来限制是否继续下一个 condition

    有点特殊地方就是 break="on-false"的时候,如果该 conditon 没有被匹配,则结束后面的 condition, 然后跳到下一个 extension。看似 break 影响了 extension 的流程,其实这样是可以理解的,因为 break="on-false" 表示没有匹配到就退出,此时该extension 的最新匹配状态被标示为不匹配,如果extension没有被匹配,则默认会进入下一个extension.

    这里的extension最新状态特别说明一下,如下例子:

    [html] view plain copy
     
    1.  <extension name="test_dialplan">  
    2.    <condition field="destination_number" expression="7777" break="never">  
    3.   <action application="info"/>  
    4. </condition>  
    5.    <condition field="destination_number" expression="8888" break="on-false">  
    6.   <action application="info"/>  
    7. </condition>  
    8. <condition field="destination_number" expression="9999">  
    9.   <action application="info"/>  
    10. </condition>  
    11.  </extension>  


    当我们拨打 7777 时,第一个 condition 被匹配,但是 break='never" 则会继续下一个 condition,此时extension被标示为匹配状态。路由到第二个 condition时,发现不匹配,同时 break="on-false" 所以应该停止后面的 condition,结束该 extension, 并且将 extension 的匹配状态标示为不匹配,extension的匹配状态决定了是否进行下一个extension.

    可以看出,extension 的 匹配状态是最后一个 condition 的匹配状态!

  • 相关阅读:
    CocoStudio UI 编辑器的使用
    脚本AI与脚本引擎
    Android 开发问题集合
    cocos2d-x之 CCSpriteBatchNode 用法总结
    图解VS2010打包全过程
    如何写详细设计文档
    母函数(Generating function)详解 — TankyWoo
    【DP_区间DP专辑】 zeroclock
    【DP_概率DP专辑】【from zeroclock's blog】
    【DP_树形DP专辑】【from zeroclock's blog】
  • 原文地址:https://www.cnblogs.com/fire909090/p/6890618.html
Copyright © 2011-2022 走看看