B2B在FreeSwitch中的呼叫流程

假设 1003 呼叫 1002

1003 向FS发送inivte消息:

sofia模块收到sip消息后,回调 sofia_event_callback() 进入 sofia_handle_sip_i_invite() 为 1003 建立 sessionchannel ,进入 1003 的channel状态机。依次执行:1003 的 CS_INIT --> 1003 的 CS_ROUTING --> 1003 的 CS_EXECUTE。

在 CS_EXECUTE 状态下,FreeSwitch 会执行针对于 1003 设定的Applications,当然是通过 dialplan 里的 xml 配置文件获取相应APP。

对于B2B情况,1003 此时会执行一系列的 set 和 hash,如下:

    <extension name="Local_Extension">
      <condition field="destination_number" expression="^(10[01][0-9])$">
        <action application="set" data="dialed_ext=$1"/>
        <action application="export" data="dialed_ext=$1"/>
      </condition>
      <condition field="destination_number" expression="^${caller_id_number}$">
        <action application="set" data="voicemail_authorized=${sip_authorized}"/>
        <action application="answer"/>
        <action application="sleep" data="1000"/>
        <action application="voicemail" data="check default $${domain} ${dialed_ext}"/>
        <!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
        <anti-action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
        <anti-action application="bind_meta_app" data="2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
        <anti-action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
        <anti-action application="set" data="transfer_ringback=${us-ring}"/>
        <anti-action application="set" data="call_timeout=30"/>
        <!-- <anti-action application="set" data="sip_exclude_contact=${network_addr}"/> -->
        <anti-action application="set" data="hangup_after_bridge=true"/>
        <!--<anti-action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> -->
        <anti-action application="set" data="continue_on_fail=true"/>
        <anti-action application="db" data="insert/call_return/${dialed_ext}/${caller_id_number}"/>
        <anti-action application="db" data="insert/last_dial_ext/${dialed_ext}/${uuid}"/>
        <anti-action application="bridge" data="user/${dialed_ext}@$${domain}"/>
        <anti-action application="answer"/>
        <!--<anti-action application="send_display" data="Voicemail for ${dialed_ext}"/>-->
        <anti-action application="sleep" data="1000"/>
        <anti-action application="voicemail" data="default $${domain} ${dialed_ext}"/>
      </condition>

    </extension>

最后会执行 bridge 和 answer ,其中 bridge 又调用 switch_ivr_originate() ,最终调用 sofia_outgoing_channel() 为1002(即b_leg建立 session 和 channel ,并启动 1002 session 的状态线程。而 answer 则是对1003做出应答。 

当为 1002 建立了状态循环线程后,1002同样会进入:

1)1002 的 CS_INIT:在这里 freeswitch 会调用 1002 的终端 endpoint_interface 的 init 状态函数——sofia_on_init(),继而调用sofia_glue_do_invite(session/*1002的session*/),在 sofia_glue_on_invite() 里,FS 向 1002 发送 invite 消息。

(2)1002的CS_ROUTING。

(3)1002的CS_EXECUTE:由于是 b-leg,execute 状态里不再有 application 了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值