<?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="primary_sip_out" 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="(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;user=phone"/>
      <param name="sip.out.from.displayName" expr="&quot;%2&quot;"/>
      <param name="sip.out.from.uri" expr="sip:%1@GW_HOST_IP:GW_SIP_PORT"/>
      <param name="sip.out.to.displayName" expr="&quot;%0&quot;"/>
      <param name="sip.out.to.uri" expr="sip:%0@localhost:5060"/>
      <param name="sip.out.transport" expr="udp"/>
    </out_leg>
  </rule>

  <!-- SIP OUT TO sip:dnis@localhost:5060 -->
  <rule name="primary_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;user=phone"/>
      <param name="sip.out.from.displayName" expr="&quot;anonymous&quot;"/>
      <param name="sip.out.from.uri"
             expr="sip:anonymous@GW_HOST_IP:GW_SIP_PORT"/>
      <param name="sip.out.to.displayName" expr="&quot;%0&quot;"/>
      <param name="sip.out.to.uri" expr="sip:%0@localhost:5060"/>
      <param name="sip.out.transport" expr="udp"/>
    </out_leg>
  </rule>

  
  <rule name="dnis_5279" outbound_interface="pstn" qvalue="0.1">
    <condition param="transfer" expr="false"/>
    <condition param="pstn.in.channelName" expr=".*"/>
    <condition param="pstn.in.ani" expr="(.*)"/>
	  <condition param="pstn.in.dnis" expr="5279"/>
    <condition param="pstn.in.callerName" expr="([0-9a-zA-Z]+)"/>
    <out_leg name="" media_type="sendrecv">
	  <param name="pstn.out.phoneNumber" expr="0"/> 
      <param name="pstn.out.channelGroup" expr="5279"/>
      <param name="pstn.out.cpa.enable" expr="false"/>
      <param name="pstn.out.ani" expr="%0"/>
    </out_leg>
  </rule>
  
    <rule name="dnis_5283" outbound_interface="pstn" qvalue="0.1">
    <condition param="transfer" expr="false"/>
    <condition param="pstn.in.channelName" expr=".*"/>
    <condition param="pstn.in.ani" expr="(.*)"/>
	  <condition param="pstn.in.dnis" expr="5283"/>
    <condition param="pstn.in.callerName" expr="([0-9a-zA-Z]+)"/>
    <out_leg name="" media_type="sendrecv">
	  <param name="pstn.out.phoneNumber" expr="0"/> 
      <param name="pstn.out.channelGroup" expr="5283"/>
      <param name="pstn.out.cpa.enable" expr="false"/>
      <param name="pstn.out.ani" expr="%0"/>
    </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>


  <!--
    Analog routing rules:
    Before the Quick Setup, this routing rule contains the token
    XX_FXS_PHONE_NUMBERS_XX that will be replaced at the end of the Quick
    Setup by the string xxx|yyy|zzz|... where xxx, yyy and zzz are the phone
    numbers of the Analog interfaces that were chosen by the user. When adding
    analog interfaces from the PSTN config tab or when the phone numbers of some
    interfaces are changed, the user will need to add/modify them directly in
    this routing rule.
  -->
  <rule name="default_analog_fxs_pstn_out" outbound_interface="pstn" qvalue="0.1">
    <condition param="transfer" expr="false"/>
    <condition param="sip.in.requestUri.canonical" expr="sip:[\+]?(?:1)?(5279|5283)@"/>
    <out_leg name="" media_type="sendrecv">
      <!--The channel group associated to an analog line has for name the-->
      <!--phone number of that interface-->
      <param name="pstn.out.channelGroup" expr="%0"/>
      <param name="pstn.out.phoneNumber" expr="%0"/>
    </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;user=phone"/>
      <!-- echoing "from" fields of the REFER request -->
      <param name="sip.out.from.uri" expr="%1"/>
      <param name="sip.out.transport" expr="udp"/>
    </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;user=phone"/>
      <param name="sip.out.header.Replaces" expr="%1;to-tag=%2;from-tag=%3"/>
      <param name="sip.out.from.uri" expr="%4"/>
      <param name="sip.out.transport" expr="udp"/>
    </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="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>
