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(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers