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

Jiri Kuthan jiri at iptel.org
Fri Sep 26 18:51:14 CEST 2003


Yes, I will post about it. I hope overnext week (I travel the next one).

Cheers,

-jiri

At 06:08 PM 9/26/2003, Steve Dolloff wrote:
>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

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




More information about the sr-users mailing list