Jamin,
I acknowledge the problem. It is in ser, more exactly it's a collision with one special feature that allows ser to work properly even with implementations that remove parameters from Route header fields.
I need to investigate more, I am not sure yet whether we should change the behaviour of ser or ask snom to change their preloaded route set.
Anyway, it's Christmas time now so I will get back to your problem later, thanks for your patience.
Jan.
On 18-12 16:37, Jamin W. Collins wrote:
On Thu, Dec 18, 2003 at 10:58:22PM +0100, Jan Janak wrote:
I looked at the attached dumps. First of all, 0.8.10 and 0.8.12 handle record routing differently. 0.8.10 implements strict routing while 0.8.12 implements loose routing.
The bug is in your script. Because 0.8.12 implements loose routing, the Request-URI will contain the Contact of the callee. The Contact contains the number of the callee -- 5803932.
So, should I be checking a different variable? If so, which? I didn't find anything about this in the Admin Guide.
In your script you are searching for numbers beginning with 580 and rewrite the hostname to a gateway. ACK and BYE will also contain the number in the Request-URI -- see above, but they don't contain the IP of your server in the Request-URI -- the IP of the callee is there.
But you don't check this and rewrite anyway.
The proper solution would be to search for numbers beginning with 580 inside the if (uri==myself) condition.
I've moved the search inside the if (uri==myself) condition as you suggested. However, this has not (as I suspected) changed the behavior of the routing. The 580XXXX calls still do not get routed to the gateway as they did in 0.8.10. In the attached ngrep output you can see a call to sip:5803932@172.21.30.53 starting at 2003/12/18 17:15:44.976502. However this request makes it past the 580XXXX check and is routed instead to 172.21.30.10, which is not what I would expect. Is there still something wrong with the new config? Am I checking the wrong variable?
BTW, all searches and rewrites of Request-URI should be inside uri==myself condition -- the condition will be true only for requests establishing a dialog.
The Request-URI of requests WITHIN a dialog (BYE, ACK) must not be changed.
In addition to that 0.8.10 and 0.8.12 configs are different. Your config for 0.8.10 doesn't use record routing while the config for 0.8.12 does.
I am aware that they are slightly different. I used the 0.8.12 default config as a starting point and attempted to translate the working 0.8.10 configuration to the 0.8.12 syntax.
-- Jamin W. Collins
Linux is not The Answer. Yes is the answer. Linux is The Question. - Neo
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
debug=3 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 fifo="/tmp/ser_fifo"
# proxy server IP listen="172.21.30.53"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.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"
# ----------------- setting module-specific parameters ---------------
# persistent user registrations modparam("usrloc", "db_mode", 2) modparam("registrar", "default_expires", 172800) modparam("tm", "fr_inv_timer", 5 ) modparam("tm", "fr_timer", 5 )
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
# ------------------------- request routing logic -------------------
# main routing logic
route{
# 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; }; # 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; }; # 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==myself) { if (method=="REGISTER") { save("location"); log(1, "Registration request."); break; }; # check for 911 calls if (uri=~"^sip:911@.*") { log(1, "911 Call"); rewritehost("172.21.30.51"); t_relay(); break; }; # pass local calls off to the gateway if (uri=~"^sip:580[0-9][0-9][0-9][0-9]@") { log(1, "Local call sent to gateway"); rewritehost("172.21.30.51"); t_relay(); break; }; # native SIP destinations are handled using our USRLOC DB if (!lookup("location")) { log(1, "Location lookup failure."); if ((src_ip==172.21.30.10) || (src_ip==172.21.30.12)) { log(1, "Request from IC server trying to go back
to IC server."); sl_reply_error(); } else { rewritehost("172.21.30.10"); log (1, "Sending request to the first server."); t_on_failure ("1"); t_relay(); }; break;
}; }; # 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(); };
}
failure_route[1]{ rewritehost("172.21.30.12"); log(1, "Sending request to the second server."); t_on_failure("2"); append_branch(); t_relay(); }
failure_route[2]{ rewritehost("172.22.30.51"); log(1, "Sending request to the gateway."); append_branch(); t_relay(); }
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers