Below is my current code and my calls are just getting 100 trying -- your call is important to us even between to locally registered extension. Any guidance as to how to simplify troubleshooting this routing?<br><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("CANCEL"))<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("Route");<br> if (is_method("INVITE|SUBSCRIBE")<div id=":1y4">
)<br>
record_route();<br><br> # account only INVITEs<br> if (is_method("INVITE"))<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("484","Address Incomplete");<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("nat=yes")) {<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("INVITE")) {<br> #t_on_branch("BRANCH_ONE");<br>
t_on_reply("REPLY_ONE");<br> t_on_failure("FAIL_ONE");<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=>$si)!=$null)<br> {<br> # ip is already blocked<br>
xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");<br> exit;<br> }<br> if (!pike_check_req())<br> {<br> xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");<br>
$sht(ipban=>$si) = 1;<br> exit;<br> }<br> }<br>#!endif<br><br> if (!mf_process_maxfwd_header("10")) {<br> sl_send_reply("483","Too Many Hops");<br>
exit;<br> }<br><br> if(!sanity_check("1511", "7"))<br> {<br> xlog("Malformed SIP message from $si:$sp\n");<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("BYE")) {<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("SUBSCRIBE") && uri == myself) {<br> # in-dialog subscribe requests<br>
route(PRESENCE);<br> exit;<br> }<br> if ( is_method("ACK") ) {<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("404","Not here");<br> }<br> exit;<br>
}<br>}<br><br># Handle SIP registrations<br>route[REGISTRAR] {<br> if (is_method("REGISTER"))<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("location"))<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("dbaliases");<br>#!endif<br>
<br> if (!lookup("location")) {<br> switch ($rc) {<br> case -1:<br> case -3:<br> t_newtran();<br> t_reply("404", "Not Found");<br>
exit;<br> case -2:<br> sl_send_reply("405", "Method Not Allowed");<br> exit;<br> }<br>
}<br><br> # when routing via usrloc, log the missed calls also<br> if (is_method("INVITE"))<br> {<br> setflag(FLT_ACCMISSED);<br> }<br>}<br><br># Presence server route<br>
route[PRESENCE] {<br> if(!is_method("PUBLISH|SUBSCRIBE"))<br> return;<br><br>#!ifdef WITH_PRESENCE<br> if (!t_newtran())<br> {<br> sl_reply_error();<br> exit;<br>
};<br><br> if(is_method("PUBLISH"))<br> {<br> handle_publish();<br> t_release();<br> }<br> else<br> if( is_method("SUBSCRIBE"))<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("PUBLISH") || $rU==$null)<br>
{<br> sl_send_reply("404", "Not here");<br> exit;<br> }<br> return;<br>}<br><br># Authentication route<br>route[AUTH] {<br>#!ifdef WITH_AUTH<br> if (is_method("REGISTER"))<br>
{<br> # authenticate the REGISTER requests (uncomment to enable auth)<br> if (!www_authorize("$td", "subscriber"))<br> {<br> www_challenge("$td", "0");<br>
exit;<br> }<br><br> if ($au!=$tU)<br> {<br> sl_send_reply("403","Forbidden auth ID");<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("$fd", "subscriber")) {<br> proxy_challenge("$fd", "0");<br> exit;<br> }<br>
if (is_method("PUBLISH"))<br> {<br> if ($au!=$tU) {<br> sl_send_reply("403","Forbidden auth ID");<br>
exit;<br> }<br> } else {<br> if ($au!=$fU) {<br> sl_send_reply("403","Forbidden auth ID");<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("403","Not relaying");<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("19")) {<br> if (method=="REGISTER") {<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("BYE")) {<br> unforce_rtp_proxy();<br> } else if (is_method("INVITE")){<br> force_rtp_proxy();<br> }<br> if (!has_totag()) add_rr_param(";nat=yes");<br>
#!endif<br> return;<br>}<br><br># Routing to foreign domains<br>route[SIPOUT] {<br> if (!uri==myself)<br> {<br> append_hf("P-hint: outbound\r\n");<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> && $sp==$sel(cfg_get.freeswitch.bindport))<br>
return 1;<br> return -1;<br>}<br><br>route[FSDISPATCH] {<br> if(!is_method("INVITE"))<br> return;<br> if(route(FSINBOUND))<br> return;<br><br> # dial number selection<br>
switch($rU) {<br> case /"^41$":<br> # 41 - voicebox menu<br> # allow only authenticated users<br> if($au==$null)<br> {<br>
sl_send_reply("403", "Not allowed");<br> exit;<br> }<br> $rU = "vm-" + $au;<br> break;<br>
case /"^441[0-9][0-9]$":<br> # starting with 44 folowed by 1XY - direct call to voice box<br> strip(2);<br> route(FSVBOX);<br>
break;<br> case /"^433[01][0-9][0-9]$":<br> # starting with 433 folowed by (0|1)XY - conference<br> strip(2);<br> break;<br>
case /"^45[0-9]+$":<br> strip(2);<br> break;<br> default:<br> # offline - send to voicebox<br> if (!registered("location"))<br>
{<br> route(FSVBOX);<br> exit;<br> }<br> # online - do bridging<br> prefix("kb-");<br>
if(is_method("INVITE"))<br> {<br> # in case of failure - re-route to FreeSWITCH VoiceMail<br> t_on_failure("FAIL_FSVBOX");<br>
}<br> }<br> route(FSRELAY);<br> exit;<br>}<br><br>route[FSVBOX] {<br> if(!($rU=~"^1[0-9][0-9]+$"))<br> return;<br> prefix("vb-");<br>
route(FSRELAY);<br>}<br><br># Send to FreeSWITCH<br>route[FSRELAY] {<br> $du = "sip:" + $sel(cfg_get.freeswitch.bindip) + ":"<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("INVITE")<br> && (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("486|408")) {<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("dispatcher", "db_url", "mysql://openser:password@localhost/openser")<br>
<br>route{<br> if ( !mf_process_maxfwd_header("10") )<br> {<br> sl_send_reply("483","To Many Hops");<br> drop();<br> };<br><br> ds_select_dst("1", "0");<br>
<br> forward();<br> # t_relay();<br>}<br>#!endif</div>