[Serusers] Why SER query MySQL x times for the same thing?

Rodrigo P. Telles telles at devel-it.com.br
Wed Nov 10 12:12:39 CET 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jan,

Jan Janak wrote:
| The configuration file seems to be OK, you have just one is_user_in
| function call in the file and the SIP message dumps show only one INVITE
| message coming to SER -- that means SER will query the database for the
| group membership only once.
|
| Is there possibly any other traffic (INVITE messages) than can trigger
| the query at the same time ?

No, there isn't because I did this tests in a non production Linux box with
only that 2 UAC's registered (1919 and 2020).

Thanks in advance.

|
|   Jan.
|
| On 09-11 15:03, Rodrigo P. Telles wrote:
|
| Hi Jan,
|
| Thanks for your answer!
| See the attached files (ser.cfg and ngrep dump).
| PS: Of corse I did some modifications in that files just to protect our
| Network.
| If you want the original files I can send to your personal e-mail.
|
| Thanks again.
|
| Jan Janak wrote:
| | Could you send the whole config file and also SIP message dumps ?
| |
| |   Jan.
| |
| | On 08-11 18:18, Rodrigo P. Telles wrote:
| |
| |>Hi folks,
| |>
| |>I've been having litle troubles with SER.
| |>When I offhook my BT100 and called another phone, I saw in
| |>my log file that SER query the MySQL 3 or more times for the same
| |>thing (in this case, about group membership) and the same for log
| messages.
| |>I tried to flag the action but it doens't work.
| |>
| |>I think that the real problem is that I'm missing some thing
| |>in my configuration or I just didn't understand the call flow in SER.
| |>any ideas?
| |>
| |>I'm sending part of my ser.cfg, I hope it helps.
| |>===================================
| |>record_route();
| |>
| |>if (method=="INVITE" && !isflagset(11)) {
| |>~                        log(1, "Voicemail is enable? ");
| |>~                        if (is_user_in("To", "voicemail")) {
| |>~                                log(1, "Yes\n");
| |>~                                setflag(8);
| |>~                                t_on_failure("1");
| |>~                        } else {
| |>~                                log(1, "No\n");
| |>~                        }
| |>
| |>~                        # native SIP destinations are handled using our
| USRLOC DB
| |>~                        if (!lookup("location")) {
| |>~                                #sl_send_reply("404", "Not Found");
| |>~                                if (uri=~"sip:[0-9]{4,6}@") {
| |>~                                        if (!radius_proxy_authorize(""))
| {
| |>~                                                proxy_challenge("", "0");
| |>~                                                sl_send_reply("403",
| "That's not
| |>your home");
| |>~                                                break;
| |>~                                        };
| |>~                                        rewriteuser("901");
| |>~                                        rewritehostport("x.y.z.w:5060");
| |>~                                        log(1, "Not found\n");
| |>~                                        t_relay();
| |>~                                        break;
| |>~                                } else {
| |>~                                        route(1);
| |>~                                        break;
| |>~                                };
| |>~                        };
| |>~                        setflag(11);
| |>};
| |>=========================================
| |>Thanks in advance.
| |>
| |>--
| |>============================================
| |>Rodrigo P. Telles <telles at devel-it.com.br>
| |>Project Manager
| |>Devel-IT - http://www.devel-it.com.br
| |>TDKOM Group
| |>============================================
| |>
| |>_______________________________________________
| |>Serusers mailing list
| |>serusers at lists.iptel.org
| |>http://lists.iptel.org/mailman/listinfo/serusers
| |>
| |
| |
| |
|
| --
| ============================================
| Rodrigo P. Telles <telles at devel-it.com.br>
| Gerente de Projetos
| Devel-IT - http://www.devel-it.com.br
| Grupo TDKOM
| ============================================

interface: eth0 (200.xxx.yyy.www/255.255.255.x)
filter: ip and ( port 5060 )
match: 1919
#####
U 192.168.0.91:44863 -> 192.168.0.65:5060
~  INVITE sip:2020 at ser.server.net SIP/2.0..Via: SIP/2.0/UDP
10.0.0.2:44863;branch=z9hG4bKc2c125fc7680ccf0..Fr
~  om: "Telles 2" <sip:1919 at ser.server.net>;tag=ef9d331f5bca723c..To:
<sip:2020 at ser.server.net>..Contact: <sip:19
~  19 at 10.0.0.2:44863>..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385
INVITE..User-Agent: Grandstream BT
~  100 1.0.5.11..Max-Forwards: 70..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Ty
~  pe: application/sdp..Content-Length: 394....v=0..o=1919@ 8000 8000 IN IP4
10.0.0.2..s=SIP Call..c=IN IP4 1
~  72.16.22.2..t=0 0..m=audio 20390 RTP/AVP 99 18 4 0 8 9 2 15 101..a=rtpmap:99
iLBC/8000..a=fmtp:99 mode=20..a
~  =rtpmap:18 G729/8000..a=rtpmap:4 G723/8000..a=rtpmap:0 PCMU/8000..a=rtpmap:8
PCMA/8000..a=rtpmap:9 G722/8000
~  ..a=rtpmap:2 G726-32/8000..a=rtpmap:15 G728/8000..a=ptime:20..a=rtpmap:101
telephone-event/8000..a=fmtp:101
~  0-11..

#
U 192.168.0.65:5060 -> 192.168.0.91:44863
~  SIP/2.0 100 trying -- your call is important to us..Via: SIP/2.0/UDP
10.0.0.2:44863;branch=z9hG4bKc2c125f
~  c7680ccf0;rport=44863;received=192.168.0.91..From: "Telles 2"
<sip:1919 at ser.server.net>;tag=ef9d331f5bca723
~  c..To: <sip:2020 at ser.server.net>..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq:
33385 INVITE..Server: Sip EXpr
~  ess router (0.8.14 (i386/linux))..Content-Length: 0..Warning: 392
192.168.0.65:5060 "Noisy feedback tells:
~    pid=20180 req_src_ip=192.168.0.91 req_src_port=44863
in_uri=sip:2020 at ser.server.net out_uri=sip:2020 at 192.
~  168.0.87:5060 via_cnt==1"....

#
U 192.168.0.65:5060 -> 192.168.0.87:5060
~  INVITE sip:2020 at 192.168.0.87:5060 SIP/2.0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr
~  =on>..Via: SIP/2.0/UDP 192.168.0.65;branch=z9hG4bK54.23f86f66.0..Via:
SIP/2.0/UDP 10.0.0.2:44863;rport=
~  44863;received=192.168.0.91;branch=z9hG4bKc2c125fc7680ccf0..From: "Telles 2"
<sip:1919 at ser.server.net>;tag=
~  ef9d331f5bca723c..To: <sip:2020 at ser.server.net>..Contact:
<sip:1919 at 192.168.0.91:44863>..Call-ID: e0b16e3a3
~  d427e23 at 10.0.0.2..CSeq: 33385 INVITE..User-Agent: Grandstream BT100
1.0.5.11..Max-Forwards: 69..Allow: IN
~  VITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type:
application/sdp..Content-Length: 397.
~  .P-hint: fixed NAT contact for request..P-hint: request forced to
mediaproxy....v=0..o=1919@ 8000 8000 IN IP4
~   10.0.0.2..s=SIP Call..c=IN IP4 192.168.0.67..t=0 0..m=audio 35566 RTP/AVP 99
18 4 0 8 9 2 15 101..a=rt
~  pmap:99 iLBC/8000..a=fmtp:99 mode=20..a=rtpmap:18 G729/8000..a=rtpmap:4
G723/8000..a=rtpmap:0 PCMU/8000..a=r
~  tpmap:8 PCMA/8000..a=rtpmap:9 G722/8000..a=rtpmap:2 G726-32/8000..a=rtpmap:15
G728/8000..a=ptime:20..a=rtpma
~  p:101 telephone-event/8000..a=fmtp:101 0-11..

#
U 192.168.0.87:5060 -> 192.168.0.65:5060
~  SIP/2.0 100 Trying..To: <sip:2020 at ser.server.net>..From: "Telles 2"
<sip:1919 at ser.server.net>;tag=ef9d331f5bca
~  723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385 INVITE..Via: SIP/2.0/UDP
192.168.0.65;branch=z9hG
~  4bK54.23f86f66.0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=44863;received=192.168.0.91;branch=z9hG4bKc2c12
~  5fc7680ccf0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..Server: Sipura/SPA2000-2.0
~  .10(e)..Content-Length: 0....

#
U 192.168.0.87:5060 -> 192.168.0.65:5060
~  SIP/2.0 180 Ringing..To:
<sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From: "Telles 2"
<sip:1919 at ser.serv
~  er.net>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385
INVITE..Via: SIP/2.0/UDP 19
~  2.168.65;branch=z9hG4bK54.23f86f66.0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=44863;received=192.168.
~  0.91;branch=z9hG4bKc2c125fc7680ccf0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..Se
~  rver: Sipura/SPA2000-2.0.10(e)..Content-Length: 0....

#
U 192.168.0.65:5060 -> 192.168.0.91:44863
~  SIP/2.0 180 Ringing..To:
<sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From: "Telles 2"
<sip:1919 at ser.serv
~  er.net>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385
INVITE..Via: SIP/2.0/UDP 10

.0.0.2:44863;rport=44863;received=192.168.0.91;branch=z9hG4bKc2c125fc7680ccf0..Record-Route:
<sip:2020@
~  192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..Server:
Sipura/SPA2000-2.0.10(e)..Content-Length: 0....
##
U 192.168.0.87:5060 -> 192.168.0.65:5060
~  SIP/2.0 200 OK..To: <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From:
"Telles 2" <sip:1919 at ser.server.ne
~  t>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385
INVITE..Via: SIP/2.0/UDP 192.168
~  .0.65;branch=z9hG4bK54.23f86f66.0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=44863;received=192.168.0.91;
~  branch=z9hG4bKc2c125fc7680ccf0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..Contact
~  : Someone NET <sip:2020 at 192.168.0.87:5060>..Server:
Sipura/SPA2000-2.0.10(e)..Content-Length: 244..Allo
~  w: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER..Supported:
x-sipura..Content-Type: application/sd
~  p....v=0..o=- 10523026 10523026 IN IP4 192.168.0.87..s=-..c=IN IP4
192.168.0.87..t=0 0..m=audio 16408 RT
~  P/AVP 18 100 101..a=rtpmap:18 G729a/8000..a=rtpmap:100 NSE/8000..a=rtpmap:101
telephone-event/8000..a=fmtp:1
~  01 0-15..a=ptime:30..a=sendrecv..

#
U 192.168.0.65:5060 -> 192.168.0.91:44863
~  SIP/2.0 200 OK..To: <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From:
"Telles 2" <sip:1919 at ser.server.ne
~  t>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385
INVITE..Via: SIP/2.0/UDP 10.0.

0.2:44863;rport=44863;received=192.168.0.91;branch=z9hG4bKc2c125fc7680ccf0..Record-Route:
<sip:2020 at 192.1
~  68.0.65;ftag=ef9d331f5bca723c;lr=on>..Contact: Someone NET
<sip:2020 at 192.168.0.87:5060>..Server: Sipu
~  ra/SPA2000-2.0.10(e)..Content-Length: 244..Allow: ACK, BYE, CANCEL, INFO,
INVITE, NOTIFY, OPTIONS, REFER..Su
~  pported: x-sipura..Content-Type: application/sdp..P-hint: response forced to
mediaproxy....v=0..o=- 10523026
~   10523026 IN IP4 192.168.0.87..s=-..c=IN IP4 192.168.0.67..t=0 0..m=audio
35566 RTP/AVP 18 100 101..a=rt
~  pmap:18 G729a/8000..a=rtpmap:100 NSE/8000..a=rtpmap:101
telephone-event/8000..a=fmtp:101 0-15..a=ptime:30..a
~  =sendrecv..

#
U 192.168.0.91:44863 -> 192.168.0.65:5060
~  ACK sip:2020 at 192.168.0.87:5060 SIP/2.0..Via: SIP/2.0/UDP
10.0.0.2:44863;branch=z9hG4bK7246a42746efbbc5.
~  .Route: <sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..From: "Telles 2"
<sip:1919 at ser.server.net>;tag
~  =ef9d331f5bca723c..To:
<sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..Contact: <sip:1919 at 10.0.0.2:44863
~  >..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33385 ACK..User-Agent:
Grandstream BT100 1.0.5.11..Max-Forwa
~  rds: 70..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length: 0....

#
U 192.168.0.65:5060 -> 192.168.0.87:5060
~  ACK sip:2020 at 192.168.0.87:5060 SIP/2.0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on
~  >..Via: SIP/2.0/UDP 192.168.0.65;branch=0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=44863;received=192.168
~  .0.91;branch=z9hG4bK7246a42746efbbc5..From: "Telles 2"
<sip:1919 at ser.server.net>;tag=ef9d331f5bca723c..To:
~  <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..Contact:
<sip:1919 at 192.168.0.91:44863>..Call-ID: e0b16e3a
~  3d427e23 at 10.0.0.2..CSeq: 33385 ACK..User-Agent: Grandstream BT100
1.0.5.11..Max-Forwards: 69..Allow: INVI
~  TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length:
0..P-hint: fixed NAT contact for requ
~  est....

######
U 192.168.0.91:44863 -> 192.168.0.65:5060
~  BYE sip:2020 at 192.168.0.87:5060 SIP/2.0..Via: SIP/2.0/UDP
10.0.0.2:44863;branch=z9hG4bK63b83d2965c75b38.
~  .Route: <sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..From: "Telles 2"
<sip:1919 at ser.server.net>;tag
~  =ef9d331f5bca723c..To:
<sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..Contact: <sip:1919 at 10.0.0.2:44863
~  >..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33386 BYE..User-Agent:
Grandstream BT100 1.0.5.11..Max-Forwa
~  rds: 70..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length: 0....

#
U 192.168.0.65:5060 -> 192.168.0.87:5060
~  BYE sip:2020 at 192.168.0.87:5060 SIP/2.0..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on
~  >..Via: SIP/2.0/UDP 192.168.0.65;branch=z9hG4bK24.615e1d66.0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=448
~  63;received=192.168.0.91;branch=z9hG4bK63b83d2965c75b38..From: "Telles 2"
<sip:1919 at ser.server.net>;tag=ef9
~  d331f5bca723c..To: <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..Contact:
<sip:1919 at 192.168.0.91:44863>
~  ..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33386 BYE..User-Agent: Grandstream
BT100 1.0.5.11..Max-Forwar
~  ds: 69..Allow:
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Length:
0..P-hint: fixed N
~  AT contact for request....

#
U 192.168.0.87:5060 -> 192.168.0.65:5060
~  SIP/2.0 200 OK..To: <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From:
"Telles 2" <sip:1919 at sip.server.ne
~  t>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33386
BYE..Via: SIP/2.0/UDP 192.168.
~  0.65;branch=z9hG4bK24.615e1d66.0..Via: SIP/2.0/UDP
10.0.0.2:44863;rport=44863;received=192.168.0.91;bra
~  nch=z9hG4bK63b83d2965c75b38..Record-Route:
<sip:2020 at 192.168.0.65;ftag=ef9d331f5bca723c;lr=on>..Server: Si
~  pura/SPA2000-2.0.10(e)..Content-Length: 0....

#
U 192.168.0.65:5060 -> 192.168.0.91:44863
~  SIP/2.0 200 OK..To: <sip:2020 at ser.server.net>;tag=3033786eec83f67bi0..From:
"Telles 2" <sip:1919 at sip.server.ne
~  t>;tag=ef9d331f5bca723c..Call-ID: e0b16e3a3d427e23 at 10.0.0.2..CSeq: 33386
BYE..Via: SIP/2.0/UDP 10.0.0.

2:44863;rport=44863;received=192.168.0.91;branch=z9hG4bK63b83d2965c75b38..Record-Route:
<sip:2020 at 192.168.
~  0.65;ftag=ef9d331f5bca723c;lr=on>..Server:
Sipura/SPA2000-2.0.10(e)..Content-Length: 0....
#


# ----------- global configuration parameters ------------------------

debug=1
listen=x.y.z.w
fork=yes
log_stderror=no

check_via=no	# (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
port=5060
children=10
fifo="/tmp/ser_fifo"
fifo_mode=438 # 666

# ------------------ 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"

# Uncomment this if you want digest authentication
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_radius.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"

loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
# ----------------- setting module-specific parameters ---------------
# configuracao do DB (somente usrloc, domain e group)
modparam("domain|group|usrloc", "db_url", "sql://user:pass@a.b.c.d/ser")

# TM params - timeouts
modparam("tm", "fr_inv_timer", 40 )
modparam("tm", "fr_timer", 30 )

# radius
modparam("auth_radius", "service_type", 15)
modparam("auth_radius", "radius_config",
"/usr/local/etc/radiusclient/radiusclient.conf")

# Accounting
modparam("acc", "radius_flag", 1)
modparam("acc", "report_ack", 0)
modparam("acc", "radius_missed_flag", 2)

# -- usrloc params --

#modparam("usrloc", "db_mode",   0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)

# -- auth params --
# Uncomment if you are using auth module
#
#modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
#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)

modparam("registrar", "nat_flag", 6)
modparam("mediaproxy", "natping_interval", 30) # Ping interval 30 s
# -------------------------  request routing logic -------------------

# main routing logic

route{
	# Loga todas as transacoes
	xlog("L_ALERT", "SER [%ci:%rm] from [%is:%fu] to [%tu]\n");

	xlog("L_ALERT","SER [%ci] -------------------------------------------\n");
	xlog("L_ALERT","SER [%ci] entering main loop\n");

	if (method=="REGISTER" || !search("^Record-Route:")) {
		# Testa se o registro vem de um cliente atraz de NAT e seta a flag 5
		if (client_nat_test("7")) {
			xlog("L_ALERT","SER [%ci] src address different than via header->NAT
detected\n");
			xlog("L_ALERT","SER [%ci] force_rport, fix_contact and setflag(5)\n");
			#try NAT traversal, works only if the client is symmetrical
			force_rport();
			fix_contact();
			append_hf("P-hint: fixed NAT contact for request\r\n");
			# flag 5 indicates that incoming request is from NATed client
			setflag(5);
		};
	};

	if (method == "BYE" || method == "CANCEL") {
		xlog("L_ALERT","SER [%ci] closing media_session\n");
		end_media_session();
	};

	# 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;
	};

	# accounting
	if (method=="INVITE" || method=="BYE" || method=="CANCEL") {
		setflag(1);
		setflag(2);
	};

	# 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") {
			xlog("L_ALERT","SER [%ci] analyzing REGISTER request\n");
			if (!radius_www_authorize("")) {
				www_challenge("", "0");
				break;
			};

			if (isflagset(5)) {
				#register from nated client, save nat_flag=6
				#in location table
				xlog("L_ALERT","SER [%ci] REGISTER from nated client\n");
				setflag(6);
			};
			if (!save("location")) {
				xlog("L_ALERT","SER [%ci] save location error\n");
				sl_reply_error();
			};
			break;
		};

		xlog("L_ALERT","SER [%ci] -------------------------------------------\n");
		xlog("L_ALERT","SER [%ci] entering route[1] - relaying SIP message\n");
		if ((isflagset(5)) || (isflagset(6))) {
			xlog("L_ALERT", "SER [%ci] at least one of the participants is
NATed->record_route\n");
			record_route();
			xlog("L_ALERT","SER [%ci]     -->setting up reply processing
- ->onreply_route[1]");
			t_on_reply("1");
			if (method=="INVITE") {
				xlog("L_ALERT", "SER [%ci]     INVITE request-->use_media_proxy, set
NATED-INVITE flag(7)");
				use_media_proxy();
				append_hf("P-hint: request forced to mediaproxy\r\n");
				setflag(7);
			};
		};

		if (method=="INVITE" && !isflagset(11)) {
				xlog("L_ALERT","SER [%ci] Voicemail is enable for %tu? ");
				if (is_user_in("To", "voicemail")) {
					xlog("L_ALERT","SER [%ci] Yes\n");
					setflag(8);
					t_on_failure("1");
				} else {
					xlog("L_ALERT", "SER [%ci] No\n");
				};

			###lookup("aliases");

			# native SIP destinations are handled using our USRLOC DB
			if (!lookup("location")) {
				#sl_send_reply("404", "Not Found");
				if (uri=~"sip:[0-9]{4,6}@") {
					if (!radius_proxy_authorize("")) {
						proxy_challenge("", "0");
						sl_send_reply("403", "That's not your home");
						break;
					};
					# voicemail OK
					if ( isflagset(8) ) {
						prefix("u");
						xlog("L_ALERT","SER [%ci] Redirecting to Voicemail\n");
					} else {
						rewriteuser("404");
						xlog("L_ALERT","SER [%ci->%tu] Not found\n");
					};
					rewritehostport("b.c.d.a:5060");
					t_relay();
					break;
				} else {
					route(1);
					break;
				};
			};
			setflag(11);
		};
	};


	# forward to current uri now; use stateful forwarding; that
	# works reliably even if we forward from TCP to UDP
	xlog("L_ALERT","SER [%ci] relaying message ...\n");
	if (!t_relay()) {
		xlog("L_ALERT","SER [%ci] t_relay error occured\n");
		sl_reply_error();
	};

}

route[1] {
	if (method=="INVITE") {
		if (!radius_proxy_authorize("")) {
			proxy_challenge("", "0");
			sl_send_reply("403", "That's not your home");
			break;
		};
		if (uri=~"sip:8[0-9]{2}@") {
			rewritehostport("b.c.d.a:5060");
			xlog("L_ALERT","SER [%ci] Redirecting to b.c.d.a:5060\n");
			t_relay();
			break;
		} else if (uri=~"sip:7[0-9]{2}@") {
			rewritehostport("b.c.d.a:5060");
			xlog("L_ALERT","SER [%ci] Redirecting to b.c.d.a:5060\n");
			t_relay();
			break;
		} else {
			route(2);
			###sl_send_reply("404", "Not Found");
			break;
		};
	}
}

route[2] {
	if (method=="INVITE") {
		if (!radius_proxy_authorize("")) {
			proxy_challenge("", "0");
			sl_send_reply("403", "That's not your home");
			break;
		};
		if (uri=~"sip:50[0-9]+@") {
			rewritehostport("1.2.3.4:5060");
			xlog("L_ALERT","SER [%ci] Redirecting to 1.2.3.4:5060\n");
			t_relay();
			break;
		} else if (uri=~"sip:60[0-9]+@") {
			rewritehostport("2.3.4.5:5060");
			xlog("L_ALERT","SER [%ci] Redirecting to 2.3.4.5:5060\n");
			t_relay();
			break;
		} else {
			sl_send_reply("404", "Not Found");
			break;
		};
	}
}

#all incoming replies for t_on_reply(1) transactions enter here
onreply_route[1] {
	xlog("L_ALERT","SER [%ci] -------------------------------------------\n");
	xlog("L_ALERT","SER [%ci] onreply_route[1] entered\n");

	if (isflagset(6)) {
		xlog("L_ALERT","SER [%ci] transaction was sent to a NATED client -> fix nated
contact\n");
		fix_contact();
		append_hf("P-hint: fixed NAT contact for response\r\n");
	}

	if ( (status=~"100") ) {
		xlog("L_ALERT","SER [%ci] status 100 received\n");
	};

	if ( (status=~"180") ) {
		xlog("L_ALERT","SER [%ci] status 180 received\n");
	};

	if ( (status=~"202") ) {
		xlog("L_ALERT","SER [%ci] status 202 received\n");
	};

	if ( (status=~"200" || status=~"183") ) {
		xlog("L_ALERT","SER [%ci] status 200 or 183");
		if ( isflagset(7) ) {
			xlog("L_ALERT","SER [%ci] marked(7) as NATED-INVITE -> use_media_proxy \n");
			use_media_proxy();
			append_hf("P-hint: response forced to mediaproxy\r\n");
		};
	};
}

failure_route[1] {
	if ( isflagset(8) ) {
		if(t_check_status("486")){
			prefix("b");
		} else {
			prefix("u");
		};
		xlog("L_ALERT","SER [%ci] Redirecting to Voicemail\n");
		rewritehostport("a.b.c.d:5060");
		append_branch();
		t_relay();
		break;
	};
}


_______________________________________________
Serusers mailing list
serusers at lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers





- --
============================================
Rodrigo P. Telles <telles at devel-it.com.br>
Gerente de Projetos
Devel-IT - http://www.devel-it.com.br
Grupo TDKOM
============================================
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQFBkfeniLK8unYgEMQRAtw3AJ9/J7T2gSESInKlTpgzDdIpp6XGXACffWwY
E1XMQFXAZWF1ZmZniMwS/8o=
=j8WO
-----END PGP SIGNATURE-----




More information about the sr-users mailing list