[Serusers] failure route and ERROR: t_should_relay: status rewrite by UAS: stored: 408, received: 487

Jim Burwell jimb at jsbc.cc
Sat Dec 20 02:39:18 CET 2003


I've found that the whole system works better when you don't use 
failure_route() to do "time out" style voicemail. 

I have a test setup where I just add a call to Asterisk immediately if 
the user is registered (has location entry) with a special prefix that 
gets matched in the * extensions.conf file, and causes * to simply wait 
for X seconds before answering.  If the calee phone(s) is answered, SER 
cancels the call to * and any other phones registered to the user.  If 
no phones are answered, * answers and sends the call to voicemail.

For whatever reason, this approach seems more stable so far, and seems 
more compatible with more phones, etc, than the failure_route approach.  
For instance, if you have a locations entry that points a user to 
another user, or more than one user (e.g. mainline at domain.com -> 
receptionist at domain.com -> receptionist@<phone-IP:port>), SER seems to 
get confused and sends a CANCEL to the voicemail system you've just 
triggered the INVITE to in your failure_route.  When doing it the other 
way, it doesn't seem to have this problem. 

As for mapping user names to numeric extensions in Asterisk, I wrote an 
AGI script which does this by reverse-mapping the username to aliases in 
the SER script.  It requires that your users have numerical extensions 
assigned in the SER aliases database (e.g. 1234 -> joe at domain.com).  If 
there are multiple #s mapped to the user, it just returns the lowest 
one.  Not sure if I can give this out though, since I wrote it for a client.

- Jim


Alan Crosswell wrote:

> I'm trying to do failure route to voicemail (which is working) but 
> this error is logged:
>
> ERROR: t_should_relay: status rewrite by UAS: stored: 408, received: 487
>
> I googled this and see that this came up last in October 
> (http://lists.iptel.org/pipermail/serusers/2003-October/002921.html) 
> but I don't see any evidence of a solution in the thread.
>
> I suspect mine is the same problem as I have two UAs registered so the 
> initial dset is two places and then the append_branch on timeout is 
> just the voicemail uri.
>
> BTW, I am doing this with asterisk for the usual DTMF access reasons 
> (altough I haven't yet figured out how to map sip:alan at columbia.edu to 
> DTMF.  Maybe I'll have to give up and do numeric mailboxes:-(
> I am rewriting with a prefix of "vm*u" before punting over to asterisk 
> which has
> exten => _vm*u.,1,Wait,1
> exten => _vm*u.,2,Voicemail(${EXTEN:3})   
> exten => _vm*u.,3,Goto(#,1)
>
> Any pointers would be appreciated.  My not-yet-complete ser.cfg is 
> attached (not yet punting voicemail for unregistered subscribers; just 
> registered subscribers who time out the invite).
>
> /a
>
>------------------------------------------------------------------------
>
>#
># $Id: ser.cfg,v 1.21.2.1 2003/07/30 16:46:18 andrei Exp $
>#
># simple quick-start config script
>#
>
># ----------- global configuration parameters ------------------------
>
>debug=2         # debug level (cmd line: -dddddddddd)
>fork=yes
>log_stderror=no	# (cmd line: -E)
>#listen=128.59.39.127
>
>check_via=yes	# (cmd. line: -v)
>dns=no           # (cmd. line: -r)
>rev_dns=no      # (cmd. line: -R)
>port=5060
>children=4
>fifo="/tmp/ser_fifo"
>alias="columbia.edu"
># ------------------ module loading ----------------------------------
>
># Uncomment this if you want to use SQL database
>loadmodule "/usr/lib/ser/modules/mysql.so"
>loadmodule "/usr/lib/ser/modules/acc.so"
>loadmodule "/usr/lib/ser/modules/sl.so"
>loadmodule "/usr/lib/ser/modules/tm.so"
>loadmodule "/usr/lib/ser/modules/rr.so"
>loadmodule "/usr/lib/ser/modules/maxfwd.so"
>loadmodule "/usr/lib/ser/modules/usrloc.so"
>loadmodule "/usr/lib/ser/modules/registrar.so"
>
># Uncomment this if you want digest authentication
># mysql.so must be loaded !
>loadmodule "/usr/lib/ser/modules/auth.so"
>loadmodule "/usr/lib/ser/modules/auth_db.so"
>
>loadmodule "/usr/lib/ser/modules/exec.so"
>
># ----------------- setting module-specific parameters ---------------
># -- transaction timers --
>modparam("tm", "fr_inv_timer", 15 )
>modparam("tm", "fr_timer", 10 )
>
># -- usrloc params --
>#
>modparam("usrloc", "db_mode", 2)
>modparam("usrloc", "timer_interval", 10)
>
># -- auth params --
>modparam("auth_db", "calculate_ha1", yes)
>modparam("auth_db", "password_column", "password")
>
># -- rr params --
># add value to ;lr param to make some broken UAs happy
>modparam("rr", "enable_full_lr", 1)
>
># -- acc params --
>modparam("acc", "log_level", 1)
>modparam("acc", "log_flag", 1 )
>modparam("acc", "log_missed_flag", 2)
># -------------------------  request routing logic -------------------
>
># main routing logic
>
>route{
>
>        /* ********* ROUTINE CHECKS  ********************************** */
>	# initial sanity checks -- messages with
>	# max_forwards==0, or excessively long requests
>	if (!mf_process_maxfwd_header("10")) {
>		sl_send_reply("483","Too Many Hops");
>		break;
>	};
>	if (msg:len > max_len ) {
>		sl_send_reply("513", "Message too big");
>		break;
>	};
>
>	lookup("aliases");
>
>	# we record-route all messages -- to make sure that
>	# subsequent messages will go through our proxy; that's
>	# particularly good if upstream and downstream entities
>	# use different transport protocol
>	record_route();	
>	
>	# loose-route processing
>	if (loose_route()) {
>		t_relay();
>		break;
>	};
>
>	setflag(2);
>
>	# if the request is for other domain use UsrLoc
>	# (in case, it does not work, use the following command
>	# with proper names and addresses in it)
>	if (uri=~"^sip:(.+@)?columbia.edu") {
>
>		if (method=="REGISTER") {
>			log(1, "REGISTER received\n");
>			if (!www_authorize("columbia.edu", "subscriber")) {
>				www_challenge("columbia.edu", "0");
>				break;
>			};
>
>			save("location");
>			break;
>		}; 
>
>
>/* ********** Dial out to PSTN logic ************* */ 
>
>
>                # 5 Digit dialing, interior calls
>                if (uri=~"^sip:[1347][0-9]{4}@columbia\.edu") {
>                        rewritehostport("128.59.59.242:5060");
>                        log(1,"5 digit expression match");
>                        route(2);
>                        break;
>                };
>
>
>		# 10 Digit dialing with outlide line
>		if (uri=~"^sip:931[0-9]{10}@columbia\.edu") {
>	        	if(!(src_ip=="128.59.59.242") 
>			& !(proxy_authorize("columbia.edu","subscriber"))) {
>			proxy_challenge("columbia.edu", "1");
>			break;
>
>		} else {
>                        rewritehostport("128.59.59.242:5060");
>                        log(1," 93 Outside line with 10 digit expression match");
>                        route(2);
>                        break;
>		};
>                };
>
>/* voicemail access */
>		if (uri=~"^sip:\*86 at columbia\.edu" 
>		    |uri=~"^sip:vm at columbia\.edu" 
>		    |uri=~"^sip:voicemail at columbia\.edu") {
>			route(3);
>			break;
>		};
>
>		# native SIP destinations are handled using our USRLOC DB
>		if (!lookup("location")) {
>			if (!exec_dset("/etc/ser/sipldap")) {
>				sl_send_reply("404", "Not Found");
>				break;
>			} else {
>	                        log(1," sipldap call");
>			};
>		}; #!lookup
>
>	}; 
>
>	if (method == "INVITE") {
>	        t_on_failure("1");
>	};
>	# forward to current uri now; use stateful forwarding; that
>	# works reliably even if we forward from TCP to UDP
>	if (!t_relay()) {
>		sl_reply_error();
>	}; 
>	
>}
>
>route[2] {       
>        log(1,"route[2]:SIP-to-PSTN call routed");
>        if (!t_relay()) {
>                sl_reply_error();
>        };
>}
># ---- voicemail user access ----
>route[3] {
>	rewritehostport("127.0.0.1:5069");
>	log(1,"voicemail access");
>        if (!t_relay()) {
>                sl_reply_error();
>        };
>}
># ------------- handling of unregistered user ------------------
>route[4] {
>
>	log(1,"route[4]: user not registered");
>        # non-Voip -- just send "off-line"
>        if (!(method == "INVITE" || method == "ACK" || method == "CANCEL")) {
>                sl_send_reply("404", "Not Found");
>                break;
>        };
>
>        # not voicemail subscriber
>#        if (!isflagset(4)) { 
>#                sl_send_reply("404", "Not Found and no voicemail turned on");
>#               break;
>#       };
>
>        # forward to voicemail now
>	prefix("vm*u");
>        rewritehostport("127.0.0.1:5069");
>        t_relay_to_udp("127.0.0.1", "5069");
>}
>failure_route[1] {
>	# transfer to asterisk voicemail with uMAILBOX for unavailable.
>	# sip:USER at columbia.edu -> sip:vm*uUSER at 127.0.0.1:5069
>        t_on_failure("2");
>	prefix("vm*u");
>        rewritehostport("127.0.0.1:5069");
>	append_branch();
>	log(1,"redirection to voicemail\n");
>	t_relay();
>}
>
>failure_route[2] {
>	# forwarding failed (voicemail down?)
>	log(1,"voicemail failed\n");
>	t_reply("500","Weasels have eaten voicemail again");
>}
>
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Serusers mailing list
>serusers at lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers
>  
>

-- 
+---------------------------------------------------------------------------+
|         Jim Burwell - Sr. Systems/Network/Security Engineer, JSBC         |
+---------------------------------------------------------------------------+
| "I never let my schooling get in the way of my education." - Mark Twain   |
| "UNIX was never designed to keep people from doing stupid things, because |
|  that policy would also keep them from doing clever things." - Doug Gwyn  |
| "Cool is only three letters away from Fool" - Mike Muir, Suicyco          |
| "..Government in its best state is but a necessary evil; in its worst     |
|  state an intolerable one.." - Thomas Paine, "Common Sense" (1776)        |
+---------------------------------------------------------------------------+
|   Email:  jimb at jsbc.cc                              ICQ UIN:  1695089     |
+---------------------------------------------------------------------------+
|  Reply problems ?  Turn off the "sign" function in email prog.  Blame MS. |
+---------------------------------------------------------------------------+

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20031219/cfe390c5/attachment.htm>


More information about the sr-users mailing list