<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>Re-routing to same device in failure_route</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<P><FONT SIZE=2 FACE="Arial">Hi Group,</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> Cisco 5300 -----> SER ----> Xten softphone-A ----> Failed call with error code >400 -------> try to route to Xten softphone A(same as previous)</FONT></P>
<P><FONT SIZE=2 FACE="Arial"> I am trying to route calls to softphones in such way that, if call failed by some reason (>400), trying to route second time to the same soft phone using append_brach() and t_relay() like below. But, soft phone is unable process INVITE message for some reason. But, if I forward failed call different soft phone, call was successful.</FONT></P>
<BR>
<P><FONT SIZE=2 FACE="Arial">Am I doing any thing wrong in config ???</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">Thanks for your help in advance.</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">Regards,</FONT>
<BR><FONT SIZE=2 FACE="Arial">Karun</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">##########################################################################################</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
<BR><FONT SIZE=2 FACE="Arial"># $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
<BR><FONT SIZE=2 FACE="Arial"># simple quick-start config script</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># ----------- global configuration parameters ------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">#debug=9 # debug level (cmd line: -dddddddddd)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#fork=yes</FONT>
<BR><FONT SIZE=2 FACE="Arial">#log_stderror=no # (cmd line: -E)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">/* Uncomment these lines to enter debugging mode</FONT>
<BR><FONT SIZE=2 FACE="Arial">debug=7</FONT>
<BR><FONT SIZE=2 FACE="Arial">fork=no</FONT>
<BR><FONT SIZE=2 FACE="Arial">log_stderror=yes</FONT>
<BR><FONT SIZE=2 FACE="Arial">*/</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">check_via=no # (cmd. line: -v)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#dns=no # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#rev_dns=no # (cmd. line: -R)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">dns=no # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Arial">rev_dns=no # (cmd. line: -R)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#port=5060</FONT>
<BR><FONT SIZE=2 FACE="Arial">#children=4</FONT>
<BR><FONT SIZE=2 FACE="Arial">fifo="/tmp/ser_fifo"</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">#alias=voip.cafe.bevocal.com</FONT>
<BR><FONT SIZE=2 FACE="Arial">#alias=66.77.14.238</FONT>
<BR><FONT SIZE=2 FACE="Arial">alias=209.233.189.177</FONT>
<BR><FONT SIZE=2 FACE="Arial">alias=voice.engca.bevocal.com</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Arial"># ------------------ module loading ----------------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># Uncomment this if you want to use SQL database</FONT>
<BR><FONT SIZE=2 FACE="Arial">#loadmodule "/usr/lib/ser/modules/mysql.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/sl.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/tm.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/rr.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/maxfwd.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/usrloc.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/registrar.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/exec.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">loadmodule "/usr/lib/ser/modules/textops.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">#loadmodule "/usr/lib/ser/modules/acc.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">#modparam("acc", "log_level", 2)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("acc", "log_flag", 1)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("acc", "report_cancels", 1)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("acc", "failed_transactions", 1)</FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Arial"># Uncomment this if you want digest authentication</FONT>
<BR><FONT SIZE=2 FACE="Arial"># mysql.so must be loaded !</FONT>
<BR><FONT SIZE=2 FACE="Arial">#loadmodule "/usr/lib/ser/modules/auth.so"</FONT>
<BR><FONT SIZE=2 FACE="Arial">#loadmodule "/usr/lib/ser/modules/auth_db.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># ----------------- setting module-specific parameters ---------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># -- usrloc params --</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">modparam("usrloc", "db_mode", 0)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># Uncomment this if you want to use SQL database</FONT>
<BR><FONT SIZE=2 FACE="Arial"># for persistent storage and comment the previous line</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("usrloc", "db_mode", 2)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># -- auth params --</FONT>
<BR><FONT SIZE=2 FACE="Arial"># Uncomment if you are using auth module</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("auth_db", "calculate_ha1", yes)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
<BR><FONT SIZE=2 FACE="Arial"># If you set "calculate_ha1" parameter to yes (which true in this config),</FONT>
<BR><FONT SIZE=2 FACE="Arial"># uncomment also the following parameter)</FONT>
<BR><FONT SIZE=2 FACE="Arial">#</FONT>
<BR><FONT SIZE=2 FACE="Arial">#modparam("auth_db", "password_column", "password")</FONT>
<BR><FONT SIZE=2 FACE="Arial"># -- rr params --</FONT>
<BR><FONT SIZE=2 FACE="Arial"># add value to ;lr param to make some broken UAs happy</FONT>
<BR><FONT SIZE=2 FACE="Arial">modparam("rr", "enable_full_lr", 1)</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># ------------------------- request routing logic -------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"># main routing logic</FONT>
<BR><FONT SIZE=2 FACE="Arial">route{</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> # initial sanity checks -- messages with</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # max_forwards==0, or excessively long requests</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (!mf_process_maxfwd_header("10"))</FONT>
<BR><FONT SIZE=2 FACE="Arial"> {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> sl_send_reply("483","Too Many Hops");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if ( msg:len > max_len ) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> sl_send_reply("513", "Message too big");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> # we record-route all messages -- to make sure that</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # subsequent messages will go through our proxy; that's</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # particularly good if upstream and downstream entities</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # use different transport protocol</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # record_route();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # loose-route processing</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (loose_route()) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t_relay();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # if the request is for other domain use UsrLoc</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # (in case, it does not work, use the following command</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # with proper names and addresses in it)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (uri==myself)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (method=="REGISTER")</FONT>
<BR><FONT SIZE=2 FACE="Arial"> {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> save("location");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> if(method=="INVITE")</FONT>
<BR><FONT SIZE=2 FACE="Arial"> {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> log(1,"about lookup in route zero");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (!lookup("location")) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> log(1,"lookup failed :SIP request from config");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> sl_send_reply("404", "Not Found");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t_on_failure("5");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> # forward to current uri now; use stateful forwarding; that</FONT>
<BR><FONT SIZE=2 FACE="Arial"> # works reliably even if we forward from TCP to UDP</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (!t_relay()) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> sl_reply_error();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">failure_route[5] {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> log(1,"Inside failure_route five");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> revert_uri();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> append_branch();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (!lookup("location")) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> log(1,"lookup failed :SIP request from config");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> t_reply("404", "Not Found");</FONT>
<BR><FONT SIZE=2 FACE="Arial"> break;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
<BR><FONT SIZE=2 FACE="Arial"> if (!t_relay()) {</FONT>
<BR><FONT SIZE=2 FACE="Arial"> sl_reply_error();</FONT>
<BR><FONT SIZE=2 FACE="Arial"> };</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">######################################################################################</FONT>
</P>
</BODY>
</HTML>