[Serusers] Why SER query MySQL x times for the same thing?
Jan Janak
jan at iptel.org
Wed Nov 10 11:37:01 CET 2004
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 ?
Jan.
On 09-11 15:03, Rodrigo P. Telles wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> 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
> ============================================
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.0.7 (GNU/Linux)
>
> iD8DBQFBkPhEiLK8unYgEMQRArnLAKCCkhYncvM4jgOmenYhoOM94Sz+lwCeLaMe
> ugGOf/J334pWDu2U0b5U+AQ=
> =2krN
> -----END PGP SIGNATURE-----
> 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
More information about the sr-users
mailing list