Hi Ricardo,
The is a problem in your script. When you do diversion to GWs (h.323 /
pstn), do it for all requests, not only for INVITES. In this particular
case, the CANCEL must follow the same path as the INVITE.
Best regards,
Marian Dumitru
Ricardo Martinez wrote:
Hello list
Beside the BYE problem that i post in a past mail, i detected
another weird behaivor of SER. When i made a call from a registered
endpoint (64.76.148.242) to a PSTN-number through a PSTN-Gateway. The
destination devices keep ringing even if i send a CANCEL message. I don't
understand why. Here is the debug
U 64.76.148.242:5060 -> sersip.mydomain.com:5060
CANCEL sip:005622408196@sersip.mydomain.com SIP/2.0
Via: SIP/2.0/UDP 64.76.148.242:5060;branch=z9hG4bK1f42736da4462
From: <sip:5555832351@sersip.mydomain.com>;tag=1f42736da4
To: <sip:005622408196@sersip.mydomain.com>
Call-ID: 1f629d42-2d9e-73aa-826d-0002a400f1e9(a)64.76.148.242
CSeq: 462 CANCEL
Date: Wed, 01 Jun 2005 07:22:16 GMT
User-Agent: AddPac SIP Gateway
Content-Length: 0
Max-Forwards: 70
#
U sersip.mydomain.com:5060 -> 64.76.148.242:5060
SIP/2.0 404 Not Found IT!
Via: SIP/2.0/UDP 64.76.148.242:5060;branch=z9hG4bK1f42736da4462
From: <sip:5555832351@sersip.mydomain.com>;tag=1f42736da4
To:
<sip:005622408196@sersip.mydomain.com>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-
3932
Call-ID: 1f629d42-2d9e-73aa-826d-0002a400f1e9(a)64.76.148.242
CSeq: 462 CANCEL
Server: Sip EXpress router (0.8.14 (i386/linux))
Content-Length: 0
Warning:392 sersip.mydomain.com:5060 "Noisy feedback tells: pid=16760
req_src_ip=64.76.148.242 req_src_port=5060
in_uri=sip:005622408196@sersip.mydomain.com
out_uri=sip:005622408196@sersip.mydomain.com via_cnt==1"
It seems to be related with my past message. Can someone help me here, i'm
very confused. Here is my ser.cfg.
Thanks in advance.
#
# $Id: ser.cfg,v 1.21.2.2 2003/10/13 22:53:06 jiri Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
debug=0 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (cmd line: -E)
#Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
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"
fifo_mode=0666
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
#loadmodule "/usr/local//lib/ser/modules/mysql.so"
loadmodule "/usr/local//lib/ser/modules/sl.so"
loadmodule "/usr/local//lib/ser/modules/tm.so"
loadmodule "/usr/local//lib/ser/modules/rr.so"
loadmodule "/usr/local//lib/ser/modules/maxfwd.so"
loadmodule "/usr/local//lib/ser/modules/usrloc.so"
loadmodule "/usr/local//lib/ser/modules/registrar.so"
loadmodule "/usr/local//lib/ser/modules/textops.so"
loadmodule "/usr/local//lib/ser/modules/exec.so"
# Para trabajar con NAT
loadmodule "/usr/local//lib/ser/modules/mediaproxy.so"
loadmodule "/usr/local//lib/ser/modules/domain.so"
loadmodule "/usr/local//lib/ser/modules/dbtext.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
#loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/auth_radius.so"
loadmodule "/usr/local/lib/ser/modules/group_radius.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
# ----------------- setting module-specific parameters ---------------
# ----------------- setting module-specific parameters ---------------
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# module authorization
modparam("auth_radius","radius_config","/usr/local/etc/radiusclient/radiuscl
ient.conf")
modparam("auth_radius","service_type",15)
#module accounting
modparam("acc","radius_config","/usr/local/etc/radiusclient/radiusclient.con
f")
modparam("acc","log_level",1)
modparam("acc", "service_type", 15)
modparam("acc", "radius_flag", 1)
modparam("acc", "radius_missed_flag", 3)
modparam("acc", "failed_transactions", 1)
modparam("acc", "report_ack", 0)
#group radius
modparam("group_radius","radius_config","/usr/local/etc/radiusclient/radiusc
lient.conf")
modparam("group_radius", "use_domain", 1)
#module mediaproxy
modparam("mediaproxy", "natping_interval", 60)
modparam("mediaproxy", "mediaproxy_socket",
"/var/run/mediaproxy.sock")
#modparam("mediaproxy", "sip_asymmetrics",
"/usr/local/etc/ser/sip-asymmetrics-clients")
#modparam("mediaproxy", "rtp_asymmetrics",
"/usr/local/etc/ser/rtp-asymmetrics-clients")
modparam("registrar", "nat_flag", 5)
#module domain
modparam("domain", "db_url",
"/usr/local/etc/ser/domaintables")
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
# ------------------------- 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;
};
# subsequent messages withing a dialog should take the
# path determined by record-routing
record_route();
if (loose_route()) {
if (method=="BYE" || method=="CANCEL") {
log(1, "NAT: BYE o CANCEL recibido --> terminando la
sesion de media\n");
end_media_session();
setflag(1);
};
t_relay();
break;
};
# Maracamos las llamadas para accounting
setflag(1);
if (client_nat_test("1")) {
log(1, "NAT: Requerimiento de IP privada --> fixed contact
(en rutina principal)\n");
setflag(5);
force_rport();
fix_contact();
append_hf("P-hint: fixed NAT contact for request\r\n");
};
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
# Challenge/Response
if ( !radius_www_authorize("")) {
www_challenge("", "1");
break;
};
# Mandamos un mensaje de Log si es que un cliente NATEADO se
registro.
if (isflagset(5)) {
log(1, "NAT: Cliente NAT'eado registrado (dentro del
chequeo de REGISTER)\n");
};
save("location");
break;
}; # FIN DE CHEQUEO DE REGISTRO
# lookup("aliases");
# CHEQUEO EL INVITE DE LA LLAMADA A REALIZARSE SOLO SI ES DE MI
DOMINIO SIPPROXY.MAGENTA.CL
if (method=="INVITE" && search("^From:
<sip:.*@64.76.148.231>")) {
if ( !radius_proxy_authorize("")) {
proxy_challenge("", "1");
log (1, "LOG: Llamada no AUTORIZADA\n");
break;
};
};
if ( (uri=~"^sip:0.*@.*") ){
if (method=="INVITE") {
log(1,"FORWARDING : Llamada hacia plataforma
H.323\n");
route(3);
break;
};
};
# Llamadas hacia dominio H.323 (todo lo que comienza con 111, 777,
333 y 00xxxxxxxx)
if ( (uri=~"^sip:111.*@.*") | (uri=~"^sip:777.*@.*") |
(uri=~"^sip:333.*@.*") ){
if (method=="INVITE") {
log(1,"FORWARDING : Llamada hacia plataforma
H.323\n");
route(1);
break;
};
};
# Llamadas SIP locales
if (!lookup("location")) { #Usuarios que no estan en
"location"
database.
route(4);
break;
};
setflag(3);
# Manejo para llamadas NAT'das
if (method=="INVITE") {
log(1, "ROUTING: Reply processing (online user) enabled to
handle NAT'd resonses\n");
t_on_reply("1");
if ( (isflagset(5)) && (method=="INVITE" ||
method=="ACK") ) {
log(1, "NAT: Invite received --> enabling
media proxy (else del lookup 2do if)\n");
use_media_proxy();
append_hf("P-hint: request forced to media
proxy\r\n");
};
};
# Do it ? (Ricardo Martinez)
};
append_hf("P-hint: USRLOC\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
} /* end of initial routing logic */
#--------- Route 1 hacia SIPQUEST -------------------------------
route[1]
{
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
# Esta NATEADO?
if (isflagset(5)) {
log(1, "NAT: At least one participant NAT'd --> enable reply
processing (hacia GW)\n");
t_on_reply("1");
if (method=="INVITE") {
log(1, "NAT: Invite received --> enabling proxied
media session (hacia GW)\n");
setflag(1);
use_media_proxy();
};
};
rewritehostport("sipquest.mydomain.com:5060");
append_hf("P-hint: GATEWAY\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
}
#------- Route 3 : Trafico de Internet hacia la PSTN -------------------
route[3] {
setflag(1);
#Esta NETEADO?
if (isflagset(5)) {
log(1, "NAT: At least one participant NAT'd --> enable reply
processing (hacia GW)\n");
t_on_reply("1");
if (method=="INVITE") {
log(1, "NAT: Invite received --> enabling proxied
media session (hacia GW)\n");
#setflag(1);
use_media_proxy();
};
};
rewritehostport("gw1.mydomain.com:5060");
append_hf("P-hint: GATEWAY\r\n");
t_relay();
break;
}
#------ Route 4 : Llamadas a usuarios Off-line ------------------------
route[4] {
if (!t_newtran()) {
sl_reply_error();
};
if (!t_reply("404", "Not Found IT!")) {
sl_reply_error();
};
break;
}
# ---------------------------- Begin On-Reply Routes
--------------------------
onreply_route[1] {
# If we've got here, it's because we've previously passed through a
block
# which handles NAT requests and has set a t_on_reply condition. DB
03-08-2004
if (status =~ "(183)|(2[0-9][0-9])") {
if (client_nat_test("1") || isflagset(5)) {
log(1, "NAT: Reply from NAT'd client --> fixing contact
(onreply_route)\n");
fix_contact();
use_media_proxy();
setflag(5);
};
log(1, "NAT: NAT'd transaction answered --> enabling media proxy
(onreply_route)\n");
# use_media_proxy();
};
}
# ------------------------------ End On-Reply Routes
--------------------------
Ricardo.-
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers