My calls are not making it to the dispatcher and I am not sure what I am doing wrong. Can anyone see what I need to modify so that my calls can be distributed to my free switch boxes via the dispatcher module?<br><br>cat /usr/local/etc/kamailio/kamailio.cfg<br>
<br>#!KAMAILIO<br><br>#!define WITH_MYSQL<br>#!define WITH_AUTH<br>#!define WITH_USRLOCDB<br>#!define WITH_FREESWITCH<br>#!define WITH_ANTIFLOOD<br>#!define WITH_DISPATCHER<br><br>#!ifdef ACCDB_COMMENT<br>  ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>
  ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>
  ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT &#39;&#39;;<br>
  ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT &#39;&#39;;<br>  ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT &#39;&#39;;<br>
#!endif<br><br>####### Defined Values #########<br><br># *** Value defines - IDs used later in config<br>#!ifdef WITH_MYSQL<br># - database URL - used to connect to database server by modules such<br>#       as: auth_db, acc, usrloc, a.s.o.<br>
#!define DBURL &quot;mysql://openser:password@localhost/openser&quot;<br>#!endif<br>#!ifdef WITH_MULTIDOMAIN<br># - the value for &#39;use_domain&#39; parameters<br>#!define MULTIDOMAIN 1<br>#!else<br>#!define MULTIDOMAIN 0<br>
#!endif<br><br># - flags<br>#   FLT_ - per transaction (message) flags<br>#       FLB_ - per branch flags<br>#!define FLT_ACC 1<br>#!define FLT_ACCMISSED 2<br>#!define FLT_ACCFAILED 3<br>#!define FLT_NATS 5<br><br>#!define FLB_NATB 6<br>
#!define FLB_NATSIPPING 7<br><br>####### Global Parameters #########<br><br>#!ifdef WITH_DEBUG<br>debug=4<br>log_stderror=yes<br>#!else<br>debug=2<br>log_stderror=no<br>#!endif<br><br>memdbg=5<br>memlog=5<br><br>log_facility=LOG_LOCAL0<br>
<br>fork=yes<br>children=4<br><br>/* uncomment the next line to disable TCP (default on) */<br>#disable_tcp=yes<br><br>/* uncomment the next line to disable the auto discovery of local aliases<br>   based on reverse DNS on IPs (default on) */<br>
#auto_aliases=no<br><br>/* add local domain aliases */<br>#alias=&quot;<a href="http://sip.mydomain.com">sip.mydomain.com</a>&quot;<br><br>/* uncomment and configure the following line if you want Kamailio to<br>   bind on a specific interface/port/proto (default bind on all available) */<br>
#listen=udp:<a href="http://10.0.0.10:5060">10.0.0.10:5060</a><br><br>/* port to listen to<br> * - can be specified more than once if needed to listen on many ports */<br>port=5060<br><br>#!ifdef WITH_TLS<br>enable_tls=yes<br>
#!endif<br><br>#!ifdef WITH_FREESWITCH<br>freeswitch.bindip = &quot;127.0.0.1&quot; desc &quot;FreeSWITCH IP Address&quot;<br>freeswitch.bindport = &quot;5090&quot; desc &quot;FreeSWITCH Port&quot;<br>#!endif<br><br><br>####### Modules Section ########<br>
<br># set paths to location of modules<br>#!ifdef LOCAL_TEST_RUN<br>mpath=&quot;modules_k:modules&quot;<br>#!else<br>mpath=&quot;/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/&quot;<br>#!endif<br><br>
#!ifdef WITH_MYSQL<br>loadmodule &quot;db_mysql.so&quot;<br>#!endif<br><br>loadmodule &quot;mi_fifo.so&quot;<br>loadmodule &quot;kex.so&quot;<br>loadmodule &quot;tm.so&quot;<br>loadmodule &quot;tmx.so&quot;<br>loadmodule &quot;sl.so&quot;<br>
loadmodule &quot;rr.so&quot;<br>loadmodule &quot;pv.so&quot;<br>loadmodule &quot;maxfwd.so&quot;<br>loadmodule &quot;usrloc.so&quot;<br>loadmodule &quot;registrar.so&quot;<br>loadmodule &quot;textops.so&quot;<br>loadmodule &quot;siputils.so&quot;<br>
loadmodule &quot;xlog.so&quot;<br>loadmodule &quot;sanity.so&quot;<br>loadmodule &quot;ctl.so&quot;<br>loadmodule &quot;mi_rpc.so&quot;<br>loadmodule &quot;acc.so&quot;<br>loadmodule &quot;dispatcher.so&quot;<br># loadmodule &quot;modules/tm/tm.so&quot;<br>
<br>#!ifdef WITH_AUTH<br>loadmodule &quot;auth.so&quot;<br>loadmodule &quot;auth_db.so&quot;<br>#!ifdef WITH_IPAUTH<br>loadmodule &quot;permissions.so&quot;<br>#!endif<br>#!endif<br><br>#!ifdef WITH_ALIASDB<br>loadmodule &quot;alias_db.so&quot;<br>
#!endif<br><br>#!ifdef WITH_MULTIDOMAIN<br>loadmodule &quot;domain.so&quot;<br>#!endif<br><br>#!ifdef WITH_PRESENCE<br>loadmodule &quot;presence.so&quot;<br>loadmodule &quot;presence_xml.so&quot;<br>#!endif<br><br>#!ifdef WITH_NAT<br>
loadmodule &quot;nathelper.so&quot;<br>loadmodule &quot;rtpproxy.so&quot;<br>#!endif<br><br>#!ifdef WITH_TLS<br>loadmodule &quot;tls.so&quot;<br>#!endif<br><br>#!ifdef WITH_ANTIFLOOD<br>loadmodule &quot;htable.so&quot;<br>
loadmodule &quot;pike.so&quot;<br>#!endif<br><br>#!ifdef WITH_XMLRPC<br>loadmodule &quot;xmlrpc.so&quot;<br>#!endif<br><br># ----------------- setting module-specific parameters ---------------<br><br><br># ----- mi_fifo params -----<br>
modparam(&quot;mi_fifo&quot;, &quot;fifo_name&quot;, &quot;/tmp/kamailio_fifo&quot;)<br><br><br># ----- tm params -----<br># auto-discard branches from previous serial forking leg<br>modparam(&quot;tm&quot;, &quot;failure_reply_mode&quot;, 3)<br>
# default retransmission timeout: 30sec<br>modparam(&quot;tm&quot;, &quot;fr_timer&quot;, 30000)<br># default invite retransmission timeout after 1xx: 120sec<br>modparam(&quot;tm&quot;, &quot;fr_inv_timer&quot;, 120000)<br>
<br><br># ----- rr params -----<br># add value to ;lr param to cope with most of the UAs<br>modparam(&quot;rr&quot;, &quot;enable_full_lr&quot;, 1)<br># do not append from tag to the RR (no need for this script)<br>modparam(&quot;rr&quot;, &quot;append_fromtag&quot;, 0)<br>
<br><br># ----- registrar params -----<br>modparam(&quot;registrar&quot;, &quot;method_filtering&quot;, 1)<br>/* uncomment the next line to disable parallel forking via location */<br># modparam(&quot;registrar&quot;, &quot;append_branches&quot;, 0)<br>
/* uncomment the next line not to allow more than 10 contacts per AOR */<br>#modparam(&quot;registrar&quot;, &quot;max_contacts&quot;, 10)<br><br><br># ----- acc params -----<br>/* what special events should be accounted ? */<br>
modparam(&quot;acc&quot;, &quot;early_media&quot;, 0)<br>modparam(&quot;acc&quot;, &quot;report_ack&quot;, 0)<br>modparam(&quot;acc&quot;, &quot;report_cancels&quot;, 0)<br>/* by default ww do not adjust the direct of the sequential requests.<br>
   if you enable this parameter, be sure the enable &quot;append_fromtag&quot;<br>   in &quot;rr&quot; module */<br>modparam(&quot;acc&quot;, &quot;detect_direction&quot;, 0)<br>/* account triggers (flags) */<br>modparam(&quot;acc&quot;, &quot;log_flag&quot;, FLT_ACC)<br>
modparam(&quot;acc&quot;, &quot;log_missed_flag&quot;, FLT_ACCMISSED)<br>modparam(&quot;acc&quot;, &quot;log_extra&quot;,<br>        &quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&quot;)<br>modparam(&quot;acc&quot;, &quot;failed_transaction_flag&quot;, FLT_ACCFAILED)<br>
/* enhanced DB accounting */<br>#!ifdef WITH_ACCDB<br>modparam(&quot;acc&quot;, &quot;db_flag&quot;, FLT_ACC)<br>modparam(&quot;acc&quot;, &quot;db_missed_flag&quot;, FLT_ACCMISSED)<br>modparam(&quot;acc&quot;, &quot;db_url&quot;, DBURL)<br>
modparam(&quot;acc&quot;, &quot;db_extra&quot;,<br>        &quot;src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd&quot;)<br>#!endif<br><br><br># ----- usrloc params -----<br>/* enable DB persistency for location entries */<br>
#!ifdef WITH_USRLOCDB<br>modparam(&quot;usrloc&quot;, &quot;db_url&quot;, DBURL)<br>modparam(&quot;usrloc&quot;, &quot;db_mode&quot;, 2)<br>modparam(&quot;usrloc&quot;, &quot;use_domain&quot;, MULTIDOMAIN)<br>#!endif<br><br>
<br># ----- auth_db params -----<br>#!ifdef WITH_AUTH<br>modparam(&quot;auth_db&quot;, &quot;db_url&quot;, DBURL)<br>modparam(&quot;auth_db&quot;, &quot;calculate_ha1&quot;, yes)<br>modparam(&quot;auth_db&quot;, &quot;password_column&quot;, &quot;password&quot;)<br>
modparam(&quot;auth_db&quot;, &quot;load_credentials&quot;, &quot;&quot;)<br>modparam(&quot;auth_db&quot;, &quot;use_domain&quot;, MULTIDOMAIN)<br><br># ----- permissions params -----<br>#!ifdef WITH_IPAUTH<br>modparam(&quot;permissions&quot;, &quot;db_url&quot;, DBURL)<br>
modparam(&quot;permissions&quot;, &quot;db_mode&quot;, 1)<br>#!endif<br><br>#!endif<br><br><br># ----- alias_db params -----<br>#!ifdef WITH_ALIASDB<br>modparam(&quot;alias_db&quot;, &quot;db_url&quot;, DBURL)<br>modparam(&quot;alias_db&quot;, &quot;use_domain&quot;, MULTIDOMAIN)<br>
#!endif<br><br><br># ----- domain params -----<br>#!ifdef WITH_MULTIDOMAIN<br>modparam(&quot;domain&quot;, &quot;db_url&quot;, DBURL)<br># use caching<br>modparam(&quot;domain&quot;, &quot;db_mode&quot;, 1)<br># register callback to match myself condition with domains list<br>
modparam(&quot;domain&quot;, &quot;register_myself&quot;, 1)<br>#!endif<br><br><br>#!ifdef WITH_PRESENCE<br># ----- presence params -----<br>modparam(&quot;presence&quot;, &quot;db_url&quot;, DBURL)<br><br># ----- presence_xml params -----<br>
modparam(&quot;presence_xml&quot;, &quot;db_url&quot;, DBURL)<br>modparam(&quot;presence_xml&quot;, &quot;force_active&quot;, 1)<br>#!endif<br><br><br>#!ifdef WITH_NAT<br># ----- rtpproxy params -----<br>modparam(&quot;rtpproxy&quot;, &quot;rtpproxy_sock&quot;, &quot;udp:<a href="http://127.0.0.1:7722">127.0.0.1:7722</a>&quot;)<br>
<br># ----- nathelper params -----<br>modparam(&quot;nathelper&quot;, &quot;natping_interval&quot;, 30)<br>modparam(&quot;nathelper&quot;, &quot;ping_nated_only&quot;, 1)<br>modparam(&quot;nathelper&quot;, &quot;sipping_bflag&quot;, FLB_NATSIPPING)<br>
modparam(&quot;nathelper&quot;, &quot;sipping_from&quot;, &quot;<a href="mailto:sip%3Apinger@kamailio.org">sip:pinger@kamailio.org</a>&quot;)<br><br># params needed for NAT traversal in other modules<br>modparam(&quot;nathelper|registrar&quot;, &quot;received_avp&quot;, &quot;$avp(RECEIVED)&quot;)<br>
modparam(&quot;usrloc&quot;, &quot;nat_bflag&quot;, FLB_NATB)<br>#!endif<br><br><br>#!ifdef WITH_TLS<br># ----- tls params -----<br>modparam(&quot;tls&quot;, &quot;config&quot;, &quot;/usr/local/etc/kamailio/tls.cfg&quot;)<br>
#!endif<br><br>#!ifdef WITH_ANTIFLOOD<br># ----- pike params -----<br>modparam(&quot;pike&quot;, &quot;sampling_time_unit&quot;, 2)<br>modparam(&quot;pike&quot;, &quot;reqs_density_per_unit&quot;, 16)<br>modparam(&quot;pike&quot;, &quot;remove_latency&quot;, 4)<br>
<br># ----- htable params -----<br># ip ban htable with autoexpire after 5 minutes<br>modparam(&quot;htable&quot;, &quot;htable&quot;, &quot;ipban=&gt;size=8;autoexpire=300;&quot;)<br>#!endif<br><br>#!ifdef WITH_XMLRPC<br>
# ----- xmlrpc params -----<br>modparam(&quot;xmlrpc&quot;, &quot;route&quot;, &quot;XMLRPC&quot;);<br>modparam(&quot;xmlrpc&quot;, &quot;url_match&quot;, &quot;^/RPC&quot;)<br>#!endif<br><br>####### Routing Logic ########<br>
<br><br># Main SIP request routing logic<br># - processing of any incoming SIP request starts with this route<br>route {<br><br>        # per request initial checks<br>        route(REQINIT);<br><br>        # NAT detection<br>
        route(NAT);<br><br>        # handle requests within SIP dialogs<br>        route(WITHINDLG);<br><br>        ### only initial requests (no To tag)<br><br>        # CANCEL processing<br>        if (is_method(&quot;CANCEL&quot;))<br>
        {<br>                if (t_check_trans())<br>                        t_relay();<br>                exit;<br>        }<br><br>        t_check_trans();<br><br>        # authentication<br>        route(AUTH);<br><br>
        # record routing for dialog forming requests (in case they are routed)<br>        # - remove preloaded route headers<br>        remove_hf(&quot;Route&quot;);<br>        if (is_method(&quot;INVITE|SUBSCRIBE&quot;))<br>
                record_route();<br><br>        # account only INVITEs<br>        if (is_method(&quot;INVITE&quot;))<br>        {<br>                setflag(FLT_ACC); # do accounting<br>        }<br><br>        # dispatch requests to foreign domains<br>
        route(SIPOUT);<br><br>        ### requests for my local domains<br><br>        # handle presence related requests<br>        route(PRESENCE);<br><br>        # handle registrations<br>        route(REGISTRAR);<br><br>
        if ($rU==$null)<br>        {<br>                # request with no Username in RURI<br>                sl_send_reply(&quot;484&quot;,&quot;Address Incomplete&quot;);<br>                exit;<br>        }<br><br><br>
        #!ifdef WITH_FREESWITCH<br>        # save callee ID<br>        $avp(callee) = $rU;<br>        route(FSDISPATCH);<br>        #!endif<br><br>        # user location service<br>        route(LOCATION);<br><br>        route(RELAY);<br>
}<br><br><br>route[RELAY] {<br>#!ifdef WITH_NAT<br>        if (check_route_param(&quot;nat=yes&quot;)) {<br>                setbflag(FLB_NATB);<br>        }<br>        if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) {<br>
                route(RTPPROXY);<br>        }<br>#!endif<br><br>#!ifdef WITH_CFGSAMPLES<br>        /* example how to enable some additional event routes */<br>        if (is_method(&quot;INVITE&quot;)) {<br>                #t_on_branch(&quot;BRANCH_ONE&quot;);<br>
                t_on_reply(&quot;REPLY_ONE&quot;);<br>                t_on_failure(&quot;FAIL_ONE&quot;);<br>        }<br>#!endif<br><br>        if (!t_relay()) {<br>                sl_reply_error();<br>        }<br>        exit;<br>
}<br><br># Per SIP request initial checks<br>route[REQINIT] {<br>#!ifdef WITH_ANTIFLOOD<br>        # flood dection from same IP and traffic ban for a while<br>        # be sure you exclude checking trusted peers, such as pstn gateways<br>
        # - local host excluded (e.g., loop to self)<br>        if(src_ip!=myself)<br>        {<br>                if($sht(ipban=&gt;$si)!=$null)<br>                {<br>                        # ip is already blocked<br>
                        xdbg(&quot;request from blocked IP - $rm from $fu (IP:$si:$sp)\n&quot;);<br>                        exit;<br>                }<br>                if (!pike_check_req())<br>                {<br>                        xlog(&quot;L_ALERT&quot;,&quot;ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n&quot;);<br>
                        $sht(ipban=&gt;$si) = 1;<br>                        exit;<br>                }<br>        }<br>#!endif<br><br>        if (!mf_process_maxfwd_header(&quot;10&quot;)) {<br>                sl_send_reply(&quot;483&quot;,&quot;Too Many Hops&quot;);<br>
                exit;<br>        }<br><br>        if(!sanity_check(&quot;1511&quot;, &quot;7&quot;))<br>        {<br>                xlog(&quot;Malformed SIP message from $si:$sp\n&quot;);<br>                exit;<br>        }<br>
}<br><br># Handle requests within SIP dialogs<br>route[WITHINDLG] {<br>        if (has_totag()) {<br>                # sequential request withing a dialog should<br>                # take the path determined by record-routing<br>
                if (loose_route()) {<br>                        if (is_method(&quot;BYE&quot;)) {<br>                                setflag(FLT_ACC); # do accounting ...<br>                                setflag(FLT_ACCFAILED); # ... even if the transaction fails<br>
                        }<br>                        route(RELAY);<br>                } else {<br>                        if (is_method(&quot;SUBSCRIBE&quot;) &amp;&amp; uri == myself) {<br>                                # in-dialog subscribe requests<br>
                                route(PRESENCE);<br>                                exit;<br>                        }<br>                        if ( is_method(&quot;ACK&quot;) ) {<br>                                if ( t_check_trans() ) {<br>
                                        # no loose-route, but stateful ACK;<br>                                        # must be an ACK after a 487<br>                                        # or e.g. 404 from upstream server<br>
                                        t_relay();<br>                                        exit;<br>                                } else {<br>                                        # ACK without matching transaction ... ignore and discard<br>
                                        exit;<br>                                }<br>                        }<br>                        sl_send_reply(&quot;404&quot;,&quot;Not here&quot;);<br>                }<br>                exit;<br>
        }<br>}<br><br># Handle SIP registrations<br>route[REGISTRAR] {<br>        if (is_method(&quot;REGISTER&quot;))<br>        {<br>                if(isflagset(FLT_NATS))<br>                {<br>                        setbflag(FLB_NATB);<br>
                        # uncomment next line to do SIP NAT pinging<br>                        ## setbflag(FLB_NATSIPPING);<br>                }<br>                if (!save(&quot;location&quot;))<br>                        sl_reply_error();<br>
<br>                exit;<br>        }<br>}<br><br># USER location service<br>route[LOCATION] {<br><br>#!ifdef WITH_ALIASDB<br>        # search in DB-based aliases<br>        alias_db_lookup(&quot;dbaliases&quot;);<br>#!endif<br>
<br>        if (!lookup(&quot;location&quot;)) {<br>                switch ($rc) {<br>                        case -1:<br>                        case -3:<br>                                t_newtran();<br>                                t_reply(&quot;404&quot;, &quot;Not Found&quot;);<br>
                                exit;<br>                        case -2:<br>                                sl_send_reply(&quot;405&quot;, &quot;Method Not Allowed&quot;);<br>                                exit;<br>                }<br>
        }<br><br>        # when routing via usrloc, log the missed calls also<br>        if (is_method(&quot;INVITE&quot;))<br>        {<br>                setflag(FLT_ACCMISSED);<br>        }<br>}<br><br># Presence server route<br>
route[PRESENCE] {<br>        if(!is_method(&quot;PUBLISH|SUBSCRIBE&quot;))<br>                return;<br><br>#!ifdef WITH_PRESENCE<br>        if (!t_newtran())<br>        {<br>                sl_reply_error();<br>                exit;<br>
        };<br><br>        if(is_method(&quot;PUBLISH&quot;))<br>        {<br>                handle_publish();<br>                t_release();<br>        }<br>        else<br>        if( is_method(&quot;SUBSCRIBE&quot;))<br>
        {<br>                handle_subscribe();<br>                t_release();<br>        }<br>        exit;<br>#!endif<br><br>        # if presence enabled, this part will not be executed<br>        if (is_method(&quot;PUBLISH&quot;) || $rU==$null)<br>
        {<br>                sl_send_reply(&quot;404&quot;, &quot;Not here&quot;);<br>                exit;<br>        }<br>        return;<br>}<br><br># Authentication route<br>route[AUTH] {<br>#!ifdef WITH_AUTH<br>        if (is_method(&quot;REGISTER&quot;))<br>
        {<br>                # authenticate the REGISTER requests (uncomment to enable auth)<br>                if (!www_authorize(&quot;$td&quot;, &quot;subscriber&quot;))<br>                {<br>                        www_challenge(&quot;$td&quot;, &quot;0&quot;);<br>
                        exit;<br>                }<br><br>                if ($au!=$tU)<br>                {<br>                        sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<br>                        exit;<br>
                }<br>        } else {<br><br>#!ifdef WITH_FREESWITCH<br>        if(route(FSINBOUND))<br>                return;<br>#!endif<br><br>#!ifdef WITH_IPAUTH<br>                if(allow_source_address())<br>                {<br>
                        # source IP allowed<br>                        return;<br>                }<br>#!endif<br><br>                # authenticate if from local subscriber<br>                if (from_uri==myself)<br>                {<br>
                        if (!proxy_authorize(&quot;$fd&quot;, &quot;subscriber&quot;)) {<br>                                proxy_challenge(&quot;$fd&quot;, &quot;0&quot;);<br>                                exit;<br>                        }<br>
                        if (is_method(&quot;PUBLISH&quot;))<br>                        {<br>                                if ($au!=$tU) {<br>                                        sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<br>
                                        exit;<br>                                }<br>                        } else {<br>                                if ($au!=$fU) {<br>                                        sl_send_reply(&quot;403&quot;,&quot;Forbidden auth ID&quot;);<br>
                                        exit;<br>                                }<br>                        }<br><br>                        consume_credentials();<br>                        # caller authenticated<br>                } else {<br>
                        # caller is not local subscriber, then check if it calls<br>                        # a local destination, otherwise deny, not an open relay here<br>                        if (!uri==myself)<br>                        {<br>
                                sl_send_reply(&quot;403&quot;,&quot;Not relaying&quot;);<br>                                exit;<br>                        }<br>                }<br>        }<br>#!endif<br>        return;<br>
}<br><br># Caller NAT detection route<br>route[NAT] {<br>#!ifdef WITH_NAT<br>        force_rport();<br>        if (nat_uac_test(&quot;19&quot;)) {<br>                if (method==&quot;REGISTER&quot;) {<br>                        fix_nated_register();<br>
                } else {<br>                        fix_nated_contact();<br>                }<br>                setflag(FLT_NATS);<br>        }<br>#!endif<br>        return;<br>}<br><br># RTPProxy control<br>route[RTPPROXY] {<br>
#!ifdef WITH_NAT<br>        if (is_method(&quot;BYE&quot;)) {<br>                unforce_rtp_proxy();<br>        } else if (is_method(&quot;INVITE&quot;)){<br>                force_rtp_proxy();<br>        }<br>        if (!has_totag()) add_rr_param(&quot;;nat=yes&quot;);<br>
#!endif<br>        return;<br>}<br><br># Routing to foreign domains<br>route[SIPOUT] {<br>        if (!uri==myself)<br>        {<br>                append_hf(&quot;P-hint: outbound\r\n&quot;);<br>                route(RELAY);<br>
        }<br>}<br><br><br>#!ifdef WITH_FREESWITCH<br># FreeSWITCH routing blocks<br>route[FSINBOUND] {<br>        if($si== $sel(cfg_get.freeswitch.bindip)<br>                        &amp;&amp; $sp==$sel(cfg_get.freeswitch.bindport))<br>
                return 1;<br>        return -1;<br>}<br><br>route[FSDISPATCH] {<br>        if(!is_method(&quot;INVITE&quot;))<br>                return;<br>        if(route(FSINBOUND))<br>                return;<br><br>        # dial number selection<br>
        switch($rU) {<br>                case /&quot;^41$&quot;:<br>                        # 41 - voicebox menu<br>                        # allow only authenticated users<br>                        if($au==$null)<br>                        {<br>
                                sl_send_reply(&quot;403&quot;, &quot;Not allowed&quot;);<br>                                exit;<br>                        }<br>                        $rU = &quot;vm-&quot; + $au;<br>                break;<br>
                case /&quot;^441[0-9][0-9]$&quot;:<br>                        # starting with 44 folowed by 1XY - direct call to voice box<br>                        strip(2);<br>                        route(FSVBOX);<br>
                break;<br>                case /&quot;^433[01][0-9][0-9]$&quot;:<br>                        # starting with 433 folowed by (0|1)XY - conference<br>                        strip(2);<br>                break;<br>
                case /&quot;^45[0-9]+$&quot;:<br>                        strip(2);<br>                break;<br>                default:<br>                        # offline - send to voicebox<br>                        if (!registered(&quot;location&quot;))<br>
                        {<br>                                route(FSVBOX);<br>                                exit;<br>                        }<br>                        # online - do bridging<br>                        prefix(&quot;kb-&quot;);<br>
                        if(is_method(&quot;INVITE&quot;))<br>                        {<br>                                # in case of failure - re-route to FreeSWITCH VoiceMail<br>                                t_on_failure(&quot;FAIL_FSVBOX&quot;);<br>
                        }<br>        }<br>        route(FSRELAY);<br>        exit;<br>}<br><br>route[FSVBOX] {<br>        if(!($rU=~&quot;^1[0-9][0-9]+$&quot;))<br>                return;<br>        prefix(&quot;vb-&quot;);<br>
        route(FSRELAY);<br>}<br><br># Send to FreeSWITCH<br>route[FSRELAY] {<br>        $du = &quot;sip:&quot; + $sel(cfg_get.freeswitch.bindip) + &quot;:&quot;<br>                        + $sel(cfg_get.freeswitch.bindport);<br>
        if($var(newbranch)==1)<br>        {<br>                append_branch();<br>                $var(newbranch) = 0;<br>        }<br>        route(RELAY);<br>        exit;<br>}<br><br>#!endif<br><br><br>#!ifdef WITH_FREESWITCH<br>
failure_route[FAIL_FSVBOX] {<br>#!ifdef WITH_NAT<br>        if (is_method(&quot;INVITE&quot;)<br>                        &amp;&amp; (isbflagset(FLB_NATB) || isflagset(FLT_NATS))) {<br>                unforce_rtp_proxy();<br>
        }<br>#!endif<br><br>        if (t_is_canceled()) {<br>                exit;<br>        }<br><br>        if (t_check_status(&quot;486|408&quot;)) {<br>                # re-route to FreeSWITCH VoiceMail<br>                $rU = $avp(callee);<br>
                $var(newbranch) = 1;<br>                route(FSVBOX);<br>        }<br>}<br>#!endif<br><br># sample config file for dispatcher module<br><br>#!ifdef WITH_DISPATCHER<br><br>modparam(&quot;dispatcher&quot;, &quot;db_url&quot;, &quot;mysql://openser:password@localhost/openser&quot;)<br>
<br>route{<br>        if ( !mf_process_maxfwd_header(&quot;10&quot;) )<br>        {<br>                sl_send_reply(&quot;483&quot;,&quot;To Many Hops&quot;);<br>                drop();<br>        };<br><br>        ds_select_dst(&quot;1&quot;, &quot;0&quot;);<br>
<br>        forward();<br>        # t_relay();<br>}<br>#!endif<br><br>