[Serusers] voicemail question - dial plan example - pstngateway example

Steve Dolloff sdolloff at noc.dls.net
Fri Sep 26 18:08:58 CEST 2003


Jiri,

That would be great.  When this is done, would you be able to post an
example of the multiple calls so we don't have to bug you about it
again?

------------------------------------------------------------------------
---

If you want failure_route to be evoked only for some calls, then
set t_on_failure_route for such. You already do so in your script,
don't you?

There is other problem though -- the failure_route logic for VM should
be different
from that in route block -- you can't create transaction state two times
(first time with t_relay, second time with t_newtran). SER will
certainly
complain with some error message in your logs.

I will introduce some new command which hides details of transaction
processing
from script writers and can be used from both route[] and
failure_route[].
(I didn't think of it before since I used voicemail on some other
machine
 than proxy server.)

-jiri

> 
>Thanks,
>G.
>
>
>Do you Yahoo!?
><http://shopping.yahoo.com/?__yltc=s%3A150000443%2Cd%3A22708228%2Cslk%3
Atext%2Csec%3Amail>The New Yahoo! Shopping - with improved product
search 
>#
># $Id: ser.cfg,v 1.20 2003/05/31 21:12:19 jiri 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=8
>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"
>sip_warning=no
>#
># ------------------ 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/vm.so"
>loadmodule "/usr/local/lib/ser/modules/pa.so"
>loadmodule "/usr/local/lib/ser/modules/msilo.so"
>loadmodule "/usr/local/lib/ser/modules/acc.so"
>loadmodule "/usr/local/lib/ser/modules/textops.so"
>#
>#loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>#loadmodule "/usr/local/lib/ser/modules/uri.so"
>#loadmodule "/usr/local/lib/ser/modules/group.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"
>#
># ----------------- setting module-specific parameters ---------------
>#
># -- 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")
>#
>#
>modparam("acc", "log_level", 1)
>modparam("acc", "log_flag", 2)
>modparam("acc", "log_missed_flag", 2)
>modparam("acc", "log_fmt", "fimos")
>#
>#modparam("tm", "fr_inv_timer", 35)  #INVITE timeout
>#modparam("tm", "fr_timer", 30)  #negative INVITE replay or no 
>                                #final reply for a request for ACK
>#
>modparam("voicemail", "db_url", "sql://ser:heslo@localhost/ser")
>#
>#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
>#modparam("acc", "db_flag", 2)
>#modparam("acc", "db_missed_flag", 2)
>#
># -------------------------  request routing logic -------------------
>#
># main routing logic
>#
>alias=10.10.10.49               #sip server IP address
>alias=jiffypop                  #sip server name
>alias=mydomain.com              #sip domain/realm       
>alias=jiffypop.mydomain.com     #sip server FQDN
>#
>route{
>        log(1,"entering main route");
>        #prevent strangers from claiming to belong to our domain;
>        #if sender claims to be in our domain in From header field,
>        #better authenticate him
>        # code not inserted yet :)
>
>        # 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 (len_gt( 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;
>        };
>        
>        setflag(2);     #set flag for accounting
>        
>        # 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") {
>                        # digest authentication
>                        log(1,"request for registration");
>                        if (!www_authorize("mydomain.com",
"subscriber")) {
>                                www_challenge("mydomain.com", "0");
>                                break;
>                        };
>                        save("location");
>                        break;
>                };
>
>/* ********** Dial out to PSTN logic ************* */           
>
>                #forward numerical 7 digit requests to gateway
>
if(uri=~"^sip:[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
>#
append_hf("Remote-Party-ID:<sip:6508466600 at mydomain.com>;party=calling;i
d-type=subscriber;privacy=off;screen=no;\r\n");
>                        rewritehostport("10.10.10.5:5060");
>                        log(1,"7 digit expression match");      
>                        route(2);
>                        break;    
>
>                };
>                # strip 650 and forward to GW is user dials 650 before
phone no.
>
if(uri=~"^sip:650[0-9]{7}@(mydomain\.com|10\.10\.10\.49)"){
>                        strip(3);
>                        rewritehostport("10.10.10.5:5060");
>                        log(1,"650 area code dialed, 650 stripped");
>                        route(2);
>                        break;
>                        
>                };
>                #forward numerical 10 digit requests to gateway, append
a 1 first
>
if(uri=~"^sip:[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
>                        prefix("1");
>                        rewritehostport("10.10.10.5:5060");    
>                        log(1,"10 digit expression match, prefix 1");
>                        route(2);
>                        break;
>                };
>                #forward numerical 11 digit requests that start with a
1 to GW
>
if(uri=~"^sip:1[0-9]{10}@(mydomain\.com|10\.10\.10\.49)"){
>                        rewritehostport("10.10.10.5:5060");
>                        log(1,"10 digit exp match w/leading 1");
>                        route(2);
>                        break;
>                };
>                #forward international N digit requests to gateway
>
if(uri=~"^sip:011[0-9]+@(mydomain\.com|10\.10\.10\.49)"){
>                        rewritehostport("10.10.10.5:5060");    
>                        log(1,"international expression match");
>                        route(2);
>                        break;
>                };
>
>/* ********** VOICEMAIL logic ************* */
>
>                if (uri=~"^sip:voicemail\+@"){
>                        t_newtran();
>                        t_reply("100", "Trying -- just a second");
>                        if(!vm("/tmp/am_fifo","announcement")){
>                                t_reply("500", "SEMS error");
>                        };
>                        log(1,"sip:voicemail uri match");
>                        break;
>                };
>/*  ****** Find Aliases and Locations of users ********* */
>
># It is very important to lookup "aliases" before looking up
"locations"
>
>                if(!lookup("aliases")){
>                        log(1,"Couldn't find any matching alias");
>                        sl_send_reply("404", "User does not exist");
>                        break;
>                };
>
>                if(!lookup("location")) {
>                        log(1,"unable to locate user");
>                        route(3);
>                        break;
>                };
>
>        };
>
>
>        # forward to current uri now; use stateful forwarding; that
>        # works reliably even if we forward from TCP to UDP
>        t_on_failure("1");
>        if (!t_relay()) {
>                sl_reply_error();
>        };
>        log(1,"eof");
>}
>
>route[2]{       
>        log(1,"route[2]:SIP-to-PSTN call routed");
>        if(!t_relay()){
>                sl_reply_error();
>        };
>}
>
>route[3]{
>        log(1,"route[3]: voicemail processing");
>        if(method=="INVITE" || method=="ACK"){
>                log(1,"1st if entered in route[3] *vm*");
>                t_newtran();
>                t_reply("100","Trying -- just a second");
>                if(!vm("/tmp/am_fifo","voicemail")){  # "announcement"
was replaced with "voicemail"
>                        log(1,"vm module called and failed");
>                        t_reply("500", "SEMS error");
>                };      
>                break;
>        };
>        log(1,"end of route[3], 1st if check not entered");
>}
>
>failure_route[1]{
>        log(1,"failure_route[1]:jump to vm processing");
>        route(3);
>#       break;
>}
>
>_______________________________________________
>Serusers mailing list
>serusers at lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers

--
Jiri Kuthan            http://iptel.org/~jiri/ 

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




More information about the sr-users mailing list