<?xml version="1.0" encoding="utf-8"?>

<routing_rules>



 <!-- 

    RULES

      All rules are evaluated: on multiple matches, the rule with the higher 

      qvalue is selected. Element names and attributes are case-sensitive.

      %0 to %9 refers to atoms matched (between parenthesis) in conditions 

      above (similar to $1 - $9 backtracking in perl)

  -->



 

  <!-- DEFAULT ROUTING RULES -->

  <!-- SIP OUT TO sip:dnis@localhost:5060 -->

  <rule name="default_sip_out_1" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="pstn.in.channelName" expr=".*\)ai1"/>

    <condition param="pstn.in.dnis" expr="(.*)"/>

    <condition param="pstn.in.ani" expr="(.*)"/>

    <condition param="pstn.in.callerName" expr="(.*)"/>

    <condition param="pstn.in.ani.presentationIndicator" expr="(allowed|^$)"/>

    <out_leg name="" media_type="sendrecv">

      <!-- To modify the target SIP destination, just change the value below -->

     <!-- <param name="sip.out.requestUri" expr="sip:%0@localhost:5060"/>-->

      <param name="sip.out.requestUri" expr="sip:10000@127.0.0.1:5060"/>

      <param name="sip.out.from.uri" expr="sip:%1@GW_HOST_IP:GW_SIP_PORT"/>

      <param name="sip.out.from.displayName" expr="%2"/>

      <param name="sip.out.transport" expr="udp"/>

      <param name="sip.out.to.uri" expr="sip:%0@127.0.0.1:5060"/>

    </out_leg>

  </rule>
  
    <rule name="default_sip_out_2" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="pstn.in.channelName" expr=".*\)ai2"/>

    <condition param="pstn.in.dnis" expr="(.*)"/>

    <condition param="pstn.in.ani" expr="(.*)"/>

    <condition param="pstn.in.callerName" expr="(.*)"/>

    <condition param="pstn.in.ani.presentationIndicator" expr="(allowed|^$)"/>

    <out_leg name="" media_type="sendrecv">

      <!-- To modify the target SIP destination, just change the value below -->

     <!-- <param name="sip.out.requestUri" expr="sip:%0@localhost:5060"/>-->

      <param name="sip.out.requestUri" expr="sip:10001@127.0.0.1:5060"/>

      <param name="sip.out.from.uri" expr="sip:%1@GW_HOST_IP:GW_SIP_PORT"/>

      <param name="sip.out.from.displayName" expr="%2"/>

      <param name="sip.out.transport" expr="udp"/>

      <param name="sip.out.to.uri" expr="sip:%0@127.0.0.1:5060"/>

    </out_leg>

  </rule>
  
      <rule name="default_sip_out_3" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="pstn.in.channelName" expr=".*\)ai3"/>

    <condition param="pstn.in.dnis" expr="(.*)"/>

    <condition param="pstn.in.ani" expr="(.*)"/>

    <condition param="pstn.in.callerName" expr="(.*)"/>

    <condition param="pstn.in.ani.presentationIndicator" expr="(allowed|^$)"/>

    <out_leg name="" media_type="sendrecv">

      <!-- To modify the target SIP destination, just change the value below -->

     <!-- <param name="sip.out.requestUri" expr="sip:%0@localhost:5060"/>-->

      <param name="sip.out.requestUri" expr="sip:10002@127.0.0.1:5060"/>

      <param name="sip.out.from.uri" expr="sip:%1@GW_HOST_IP:GW_SIP_PORT"/>

      <param name="sip.out.from.displayName" expr="%2"/>

      <param name="sip.out.transport" expr="udp"/>

      <param name="sip.out.to.uri" expr="sip:%0@127.0.0.1:5060"/>

    </out_leg>

  </rule>
  
      <rule name="default_sip_out_4" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="pstn.in.channelName" expr=".*\)ai4"/>

    <condition param="pstn.in.dnis" expr="(.*)"/>

    <condition param="pstn.in.ani" expr="(.*)"/>

    <condition param="pstn.in.callerName" expr="(.*)"/>

    <condition param="pstn.in.ani.presentationIndicator" expr="(allowed|^$)"/>

    <out_leg name="" media_type="sendrecv">

      <!-- To modify the target SIP destination, just change the value below -->

     <!-- <param name="sip.out.requestUri" expr="sip:%0@localhost:5060"/>-->

      <param name="sip.out.requestUri" expr="sip:10003@127.0.0.1:5060"/>

      <param name="sip.out.from.uri" expr="sip:%1@GW_HOST_IP:GW_SIP_PORT"/>

      <param name="sip.out.from.displayName" expr="%2"/>

      <param name="sip.out.transport" expr="udp"/>

      <param name="sip.out.to.uri" expr="sip:%0@127.0.0.1:5060"/>

    </out_leg>

  </rule>

	

	<!-- SIP OUT TO sip:dnis@localhost:5060 -->

  <rule name="default_sip_out_restricted" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="pstn.in.channelName" expr=".*"/>

    <condition param="pstn.in.dnis" expr="(.*)"/>

    <condition param="pstn.in.ani" expr="(.*)"/>

    <condition param="pstn.in.callerName" expr="(.*)"/>

    <condition param="pstn.in.ani.presentationIndicator" expr="restricted"/>

    <out_leg name="" media_type="sendrecv">

      <!-- To modify the target SIP destination, just change the value below -->

      <param name="sip.out.requestUri" expr="sip:%0@localhost:5060"/>

      <param name="sip.out.from.uri" expr="sip:anonymous@GW_HOST_IP:GW_SIP_PORT"/>

      <param name="sip.out.from.displayName" expr="anonymous"/>

      <param name="sip.out.transport" expr="udp"/>

    </out_leg>

  </rule>





  <!-- PSTN OUT  with caller name and caller id transmission. 

  The caller name and caller-id will be transmitted only for isdn channels-->

  <rule name="default_pstn_out_with_caller_name" outbound_interface="pstn" 

        qvalue="0.01">

    <condition param="transfer" expr="false"/>

    <condition param="sip.in.requestUri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <condition param="sip.in.from.displayName" expr="(.*)"/>

    <condition param="sip.in.from.uri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/> 

      <param name="pstn.out.callerName" expr="%1"/>

      <param name="pstn.out.ani" expr="%2"/>

      <param name="pstn.out.ani.type" expr="0"/> 

      <param name="pstn.out.ani.numberingPlan" expr="1"/>



      <!-- Optional ISDN parameters -->

      <!-- <param name="pstn.out.ani.presentationIndicator" expr="0"/> -->

      <!-- <param name="pstn.out.ani.screeningIndicator" expr="0"/> -->

      

      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>

  </rule>



  <!-- PSTN OUT -->

  <rule name="default_pstn_out" outbound_interface="pstn" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="sip.in.requestUri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/> 



      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>

  </rule>



  

  <!-- PSTN OUT for Xten softphones (X-Lite/X-Pro)  with caller name and caller id transmission. T

  he caller name and caller-id will be transmitted only for isdn channels-->

  <!-- PSTN OUT  with caller name and caller id transmission. 

  The caller name and caller-id will be transmitted only for isdn channels-->

  <rule name="pstn_out_xten_with_caller_name" outbound_interface="pstn" 

        qvalue="0.01">

    <condition param="transfer" expr="false"/>

    <condition param="sip.in.requestUri.canonical" expr="sip:GW_HOST_IP:GW_SIP_PORT"/>

    <condition param="sip.in.to.uri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <condition param="sip.in.from.displayName" expr="(.*)"/>

    <condition param="sip.in.from.uri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/> 

      <param name="pstn.out.callerName" expr="%1"/>

      <param name="pstn.out.ani" expr="%2"/>

      <param name="pstn.out.ani.type" expr="0"/> 

      <param name="pstn.out.ani.numberingPlan" expr="1"/> 

      

      <!-- Optional ISDN parameters -->

      <!-- <param name="pstn.out.ani.presentationIndicator" expr="0"/> -->

      <!-- <param name="pstn.out.ani.screeningIndicator" expr="0"/> -->

            

      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>

  </rule>



  <!-- PSTN OUT for Xten softphones (X-Lite/X-Pro) -->

  <rule name="pstn_out_xten" outbound_interface="pstn" qvalue="0.001">

    <condition param="transfer" expr="false"/>

    <condition param="sip.in.requestUri.canonical" expr="sip:GW_HOST_IP:GW_SIP_PORT"/>

    <condition param="sip.in.to.uri.canonical" expr="sip:([\+]?[-\*\#\d]+)@"/>

    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/> 



      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>

  </rule>





  <rule name="redirect_to_sip" outbound_interface="sip" qvalue="0.1">



    <condition param="sip.in.redirect.Contact" expr="(.*)"/>



    <out_leg name="" media_type="sendrecv">

      <param name="sip.out.redirect.Contact" expr="%0"/>

    </out_leg>



  </rule>

  <rule name="redirect_to_pstn" outbound_interface="pstn" qvalue="0.2">



    <condition param="sip.in.redirect.Contact" 

               expr="^Contact:.*sip:([\+]?[-\*\#\d]+)@GW_HOST_IP:GW_SIP_PORT"/>



    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/>

      

      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>



  </rule>



  <!-- SIP to SIP transfer, results in a SIP bridged transfer on the gateway if

       transfer target is the gateway and no other transfer rule matches -->

  <rule name="sip_to_sip_transfer" outbound_interface="sip" qvalue="0.001">

    <condition param="transfer" expr="true"/>

    <condition param="sip.in.referTo" expr="(?U)(.*)(?:;|\?|$)"/>

    <condition param="sip.in.from.uri" expr="(.*)"/>

    <out_leg name="" media_type="sendrecv">

      <param name="sip.out.requestUri" expr="%0"/>

      <!-- echoing "from" fields of the REFER request -->

      <param name="sip.out.from.uri" expr="%1"/>

    </out_leg>

  </rule>



  <!-- Transfers -->

  

  <!-- REFER with Replaces parameter -->

  <rule name="refer_with_replaces" outbound_interface="sip" qvalue="1">

    <condition param="transfer" expr="true"/>

    <condition param="sip.in.referTo" expr="(.*)\?"/>

    <condition param="sip.in.referTo" expr="(?i)replaces=(?U)(.*)(?:;|$)"/>

    <condition param="sip.in.referTo" expr="(?i)to-tag=(?U)(.*)(?:;|$)"/>

    <condition param="sip.in.referTo" expr="(?i)from-tag=(?U)(.*)(?:;|$)"/>

    <condition param="sip.in.from.uri" expr="(.*)"/>

    <out_leg name="" media_type="sendrecv">

      <param name="sip.out.requestUri" expr="%0"/> 

      <param name="sip.out.header.Replaces" expr="%1;to-tag=%2;from-tag=%3"/>

      <param name="sip.out.from.uri" expr="%4"/>

    </out_leg>

  </rule>





  <!-- PSTN (Internal audio switch) bridge -->

  <rule name="default_pstn_bridge_transfer" outbound_interface="pstn" 

      qvalue="0.01">

    <condition param="transfer" expr="true"/>

    <condition param="sip.in.referTo.canonical" 

               expr="sip:([\+]?[-\*\#\d]+)@GW_HOST_IP:GW_SIP_PORT"/>



    <out_leg name="" media_type="sendrecv">

      <param name="pstn.out.channelGroup" expr="default"/>

      <param name="pstn.out.phoneNumber" expr="%0"/> 

      <param name="pstn.out.phoneNumber.type" expr="0"/> 

      <param name="pstn.out.phoneNumber.numberingPlan" expr="1"/> 

      <param name="pstn.out.transfer.type" expr="2channel-bridged"/> 

      <param name="pstn.out.transfer.supervision" expr="connect"/>

      <param name="pstn.out.transfer.timeoutMs" expr="30000"/>

      <param name="netborder.gw.ringTimeoutMs" expr="0"/>

      <param name="netborder.gw.connectionTimeoutMs" expr="0"/>

      

      <!-- 4ESS/5ESS ISDN specific parameters -->

      <!-- <param name="pstn.out.networkSpecific.feature" expr="6"/> -->

      <!-- <param name="pstn.out.networkSpecific.service" expr="3"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification"  expr="ATT"/> -->

      <!-- <param name="pstn.out.networkSpecific.identification.type" expr="1"/> -->

      <!--<param name="pstn.out.networkSpecific.identification.plan" expr="7"/> -->

    </out_leg>

  </rule>





</routing_rules>

