[Serusers] problem in calling voicemail!!

Meidiana Ten gotcha_em at yahoo.com
Wed Feb 28 10:10:58 CET 2007


Hi..
Thanx for the solution
It really works well
But now I face another problem
Really need your help..
I configure SER for voicemail usage
I'm using eyebeam as the UA. To check voicemail, I set
it to call 113, and to send voicemail, it will call
114 based on the SER script.
But it failed to forward to voicemail even the icon
"send to voicemail" has appeared on the eyebeam.
Below is my ser.cfg and ser_sems.cfg
Please check it for me and tell me what's wrong.

ser.cfg:

debug=9
fork=yes
log_stderror=yes

listen=202.95.149.2       # put your server IP address
here
port=5060
children=4

dns=no
rev_dns=no

fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"
fifo_mode=0666

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/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/permissions.so"
loadmodule "/usr/local/lib/ser/modules/msilo.so"

modparam("auth_db|permissions|uri_db|usrloc","db_url",
"mysql://ser:heslo@localhost/ser")
modparam("auth_db|uri_db|usrloc", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "rtpproxy_sock",
"/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

modparam("tm", "fr_inv_timer", 27)
modparam("tm", "fr_inv_timer_avp", "inv_timeout")

modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")

modparam("tm", "fr_timer", 10 )
modparam("tm", "fr_inv_timer", 15 )
modparam("tm", "wt_timer", 10 )

modparam("msilo", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("msilo", "db_table", "silo")
modparam("msilo","registrar","sip:registrar at pcr.ac.id")
modparam("msilo","expire_time",259200)
modparam("msilo","check_time",30)
modparam("msilo","clean_period",5)

alias="pcr.ac.id"
route {
        #
-----------------------------------------------------------------
        # Sanity Check Section
        #
-----------------------------------------------------------------

        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                break;
        };

        if (msg:len > max_len) {
                sl_send_reply("513", "Message
Overflow");
                break;
        };

        #
-----------------------------------------------------------------
        # Record Route Section
        #
-----------------------------------------------------------------

        if (method!="REGISTER") {
                record_route();
        };

        if (method=="BYE" || method=="CANCEL") {
                unforce_rtp_proxy();
        }

        #
-----------------------------------------------------------------
        # Loose Route Section
        #
-----------------------------------------------------------------

        if (loose_route()) {
                if (has_totag() && (method=="INVITE"
|| method=="ACK")) {
                        if (nat_uac_test("19")) {
                                setflag(6);
                                force_rport();
                                fix_nated_contact();
                        };
                    force_rtp_proxy("l");
                };
                route(1);
                break;
        };

        #
-----------------------------------------------------------------
        # Offline Message Store Section
        #
-----------------------------------------------------------------
	if (is_from_local()) {   
        	if (method=="REGISTER") {
            save("location");
            log("REGISTER received -> dumping messages
with MSILO\n");

            # MSILO - dumping user's offline messages
            if (m_dump())
            {
                log("MSILO: offline messages dumped -
if they were\n");
            }else{
                log("MSILO: no offline messages
dumped\n");
            };
            break;
        };

        # domestic SIP destinations are handled using
our USRLOC DB

        if(!lookup("location"))
        {
            if (! t_newtran())
               {
                sl_reply_error();
                break;
               };
            # we do not care about anything else but
MESSAGEs
            if (!method=="MESSAGE")
            {
                if (!t_reply("404", "Not found"))
                {
                    sl_reply_error();
                };
                break;
            };
            log("MESSAGE received -> storing using
MSILO\n");
            # MSILO - storing as offline message
            if (m_store("0"))
            {
                log("MSILO: offline message
stored\n");
                if (!t_reply("202", "Accepted"))
                {
                    sl_reply_error();
                };
            }else{
                log("MSILO: offline message NOT
stored\n");
                if (!t_reply("503", "Service
Unavailable"))
                {
                    sl_reply_error();
                };
            };
            break;
        };
        # if the downstream UA does not support
MESSAGE requests
        # go to failure_route[1]
        t_on_failure("1");
        t_relay();
        break;
    };
 	# forward to current uri now; use stateful
forwarding that
        # works reliably even if we forward from TCP
to UDP
        if (!t_relay()) {
                sl_reply_error();
        };

       #
-----------------------------------------------------------------
        # Call Type Processing Section
        #
-----------------------------------------------------------------

        if (uri!=myself) {
                        route(5);
                        route(1);
                        break;
        };

        if (uri==myself) {
                if (method=="ACK") {
                        route(6);
                        break;
                } else if (method=="CANCEL") {
                        route(3);
                        break;
                } else if (method=="INVITE") {
                        route(3);
                        break;
                } else  if (method=="REGISTER") {
                        route(2);
                        break;
                };
                lookup("aliases");
                if (uri!=myself) {
                        route(5);
                        route(1);
                        break;
                };

                if (!lookup("location")) {
                        sl_send_reply("404", "User Not
Found");
                        break;
                };
        };
        route(1);
}

failure_route[1] {
    # forwarding failed -- check if the request was a
MESSAGE
    if (!method=="MESSAGE")
    {
        break;
    };

    log(1,"MSILO:the downstream UA doesn't support
MESSAGEs\n");
    # we have changed the R-URI with the contact
address, ignore it now
    if (m_store("1"))
    {
        log("MSILO: offline message stored\n");
        t_reply("202", "Accepted");
    }else{
        log("MSILO: offline message NOT stored\n");
        t_reply("503", "Service Unavailable");
    };
}

route[1] {

        #
-----------------------------------------------------------------
        # Default Message Handler
        #
-----------------------------------------------------------------

        t_on_reply("1");
        if (!t_relay()) {
                if (method=="INVITE" && isflagset(6))
{
                  unforce_rtp_proxy();
                };
                sl_reply_error();
        };
}

route[2] {

        #
-----------------------------------------------------------------
        # REGISTER Message Handler
        #
----------------------------------------------------------------

        if (!search("^Contact:\ +\*") &&
nat_uac_test("19")) {
                setflag(6);
                fix_nated_register();
                force_rport();
        };
        sl_send_reply("100", "Trying");

        if (!www_authorize("pcr.ac.id","subscriber"))
{
                www_challenge("pcr.ac.id","0");
                break;
        };

        if (!check_to()) {
                sl_send_reply("401", "Unauthorized");
                break;
        };
        consume_credentials();
        if (!save("location")) {
                sl_reply_error();
        };
}

route[3] {

        #
-----------------------------------------------------------------
        # CANCEL and INVITE Message Handler
        #
-----------------------------------------------------------------

        if (!allow_trusted() && nat_uac_test("19")) {
                 setflag(6);
        }
        lookup("aliases");
        if (method=="INVITE" && !allow_trusted())
        {
                if
(!proxy_authorize("pcr.ac.id","subscriber")) {
                       
proxy_challenge("pcr.ac.id","0");
                        break;
                } else if (!check_from()) {
                        sl_send_reply("403", "Use
From=ID");
                        break;
                };
                consume_credentials();
        };

		if (uri =~ "sip:1.*@")  {
			log("Forwarding to 5070");
	                rewritehostport("localhost:5070");
                	t_relay_to_udp("localhost","5070");
                	break;
		}

        if (uri=~"^sip:9[0-9]*@") {
                route(4);
                break;
        };

        if (uri!=myself) {
                route(5);
                route(1);
                break;
        };

        if (!lookup("location")) {
                if (uri=~"^sip:[0-9]{10}@") {
                route(4);
                break;
                };
                sl_send_reply("404", "User Not
Found");
                break;
        };

        if (isflagset(6)) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
        };
        t_on_reply("1");

        if (!t_relay()) {
                if(isflagset(6)) {
                        unforce_rtp_proxy();
                }
                sl_reply_error();
        };
}

route[4] {

 #
-----------------------------------------------------------------
 # PSTN Handler
 #
-----------------------------------------------------------------

 rewritehostport("202.95.149.2:5060"); # INSERT YOUR
PSTN GATEWAY IP ADDRESS
 avp_write("i:45", "inv_timeout");

 if (isflagset(6)) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
                };
 route(1);
 }

onreply_route[1] {
        if (isflagset(6) &&
status=~"(180)|(183)|2[0-9][0-9]") {
                if (!search("^Content-Length:\ +0")) {
                        force_rtp_proxy();
                };
        };

        if (nat_uac_test("1")) {
                fix_nated_contact();
        };
}

ser_sems.cfg:

# ser.cfg,v 1.25.2.1 2005/02/18 14:30:44 andrei Exp $
#
# ser for sems configuration

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

debug=9         # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes	# (cmd line: -E)

listen=202.95.149.2 
port=5070
children=4

#check_via=no	# (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)

fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"
fifo_mode=0666

unix_sock="/tmp/ser_sock"
# ------------------ module loading
----------------------------------

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/textops.so"
loadmodule "/usr/local/lib/ser/modules/avp.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"

# ----------------- setting module-specific parameters
---------------

alias="pcr.ac.id"
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

# configure avpops db connection
#modparam( "avpops", "avp_url",
"mysql://ser:heslo@localhost/ser" )
#modparam( "avpops", "avp_table", "subscriber" )
#modparam( "avpops", "uuid_column", "id" )
                                                      
                                                      
               
# configure aliases, the number doesn't matter as long
as there are no collisions)
modparam( "avpops", "avp_aliases", "email=i:67" )
                                                      
                                                      
               
# scheme to access the database
#modparam( "avpops", "db_scheme",
#         
"email_scheme:table=subscriber;value_col=email_address;value_type=string")

#modparam("tm", "pass_provisional_replies", 1)
# appends for INVITE to voicemail
modparam("tm",
"tw_append","voicemail_headers:hdr[User-Agent];P-Email-Address=avp[$email]")

# appends for dtmf per INFO 
modparam( "tm",
"tw_append","info_append:hdr[Content-Length];hdr[subject];msg[body]")

# 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;
	};
	
	if (method != "ACK" && method != "INVITE" && method
!= "BYE" 
		&& method != "CANCEL" && method != "INFO" ){
			log("unsupported method\n");
			sl_send_reply("500","unsupported method");
			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();	
	
	# subsequent messages withing a dialog should take
the
        # path determined by record-routing
        if (loose_route()) {
                # mark routing logic in request
                append_hf("P-hint: rr-enforced\r\n");
                if (!t_relay()) {
			sl_reply_error();
		}
                break;
        };


	# make transaction
	if (!t_newtran()){
		log("could not create transaction\n");
		sl_send_reply("500","could not create transaction");
		break;
	}

	# actively absorb ACKs
	if (method == "ACK") {
		t_relay();
		break;
	}
	
	# pass INFO to SEMS 
	if (method=="INFO") {
        
if(!t_write_unix("/tmp/sems_sock","sems/info_append")){
            		log("could not contact sems\n");
            		t_reply("500","could not contact media
server");
        	}
	}

	if (uri =~ "sip:101.*@") {
		if (!t_write_unix("/tmp/sems_sock","myapp")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}

	if (uri =~ "sip:102.*@") {
		if
(!t_write_unix("/tmp/sems_sock","myconfigurableapp")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
 			break;
		}
		break;
	}

	if (uri =~ "sip:103.*@") {
		if
(!t_write_unix("/tmp/sems_sock","myannounceapp")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	if (uri =~ "sip:104.*@") {
		if (!t_write_unix("/tmp/sems_sock","myjukebox")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	if (uri =~ "sip:105.*@") {
		if (!t_write_unix("/tmp/sems_sock","mycc")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	if (uri =~ "sip:106.*@") {
		if (!t_write_unix("/tmp/sems_sock","ivr_announce")){
			log("could not contact media server\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}






############ default sems apps
	if (uri =~ "sip:110.*@") {
		if (!t_write_unix("/tmp/sems_sock","echo")){
			log("could not contact echo\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	if (uri =~ "sip:111.*@") {
		if (!t_write_unix("/tmp/sems_sock","announcement")){
			log("could not contact announcement\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}

	if (uri =~ "sip:112.*@") {
		if (!t_write_unix("/tmp/sems_sock","conference")){
			log("could not contact conference\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	if (uri =~ "sip:113.*@") {
		if (!t_write_unix("/tmp/sems_sock","mailbox")){
			log("could not contact mailbox\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}

	if (uri =~ "sip:114.*@") {
		if
(!t_write_unix("/tmp/sems_sock","early_announce")){
			log("could not contact early_announce\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}

	if (uri =~ "sip:115.*@") {
		# load email avp with some email address
		avp_write("root at localhost","$email");
		# use voicemail_headers append to pass it to sems
		if
(!t_write_unix("/tmp/sems_sock","voicemail/voicemail_headers")){
			log("could not contact voicemail\n");
			t_reply("500","could not contact media server");	
			break;
		}
		break;
	}


	t_reply("404","Not found");
}

Please tell me if you need my voicemail.conf..I'll
send it to you.
Thanx for the help

Regards,

Meidiana


 
____________________________________________________________________________________
We won't tell. Get more on shows you hate to love 
(and love to hate): Yahoo! TV's Guilty Pleasures list.
http://tv.yahoo.com/collections/265 



More information about the sr-users mailing list