[Serusers] SEMS problem

Meidiana Ten gotcha_em at yahoo.com
Thu Nov 30 12:26:20 CET 2006


Hi,
Like u told me before, I've tried to install and configure SEMS into my SER server to setup the voicemail feature.
I add some configuration file into ser.cfg and configure the sems.conf.
But when I try to run SER, I got some error. Please review my ser.cfg and sems.conf file below:

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 )
 # configure tm to append this when tw_appent voicemail_headers is used
 #modparam("tm", "tw_append", "voicemail_headers:hdr[User-Agent];P-Email-Address=avp[$email]")
 #modparam("tm", "pass_provisional_replies", 1)
 
 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)
 
 modparam( "avpops", "avp_aliases", "email=i:67" )
 
 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;
         };
       #------------------------------------------------------------------
       # 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");
 
         # -----------------------------------------------------------------
         # 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: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();
         };
 }
 
-------------------------------------------------------------------------------------------------------------------
sems.conf:
  # Sip Express Media Server (sems)
 # 
 # sample configuration file
 # 
 #
 # whitespaces (spaces and tabs) are ignored
 # comments start with a "#" and may be used inline
 # 
 # example: option=value1, value2  # i like this option
 #
 
 ##################################
 # global parameters              #
 ##################################
 
 # optional parameter: fork={yes|no}
 # 
 # - specifies if sems should run in daemon mode (background)
 #   (fork=no is the same as -E)
 fork=yes
 
 # optional parameter: stderr={yes|no}
 #
 # - debug mode: do not fork and log to stderr
 #   (stderr=yes is the same as -E)
 stderr=no
 
 # optional parameter: loglevel={0|1|2|3}
 #
 # - sets log level (error=0, warning=1, info=2, debug=3)
 #   (same as -D)
 loglevel=1
 
 # optional parameter: ser_fifo_name=<filename>
 #
 # - path and file name of Ser's fifo file (same as -o)
 ser_fifo_name=/tmp/ser_fifo
 
 # optional parameter: socket_name=<filename>
 #
 # - path and file name of our unix socket
 socket_name=/tmp/am_sock
 
 # optional parameter: ser_socket_name=<filename>
 #
 # - path and file name of Ser's unix socket
 ser_socket_name=/tmp/ser_sock
 
 # optional parameter: send_method=<filename>
 #
 # - sets which method will be used to contact Ser:
 #   FIFO or unix socket server.
 # - values: fifo (default), unix_socket
 #
 # - PLEASE NOTE THAT: if you use 'fifo', make sure that
 #   fifo_name and ser_fifo_name have been set. if you use 'unix_socket',
 #   make sure that socket_name and ser_socket_name have been set.
 # 
 send_method=fifo
 
 # optional parameter: user_prefix_separator
 #  if set, sems will reply with a Contact header in the form
 #   Contact: <plugin-name><user_prefix_separator><user>
 #  needed if a single ser instance is used with sems.
 #
 # user_prefix_separator=+
 
 # optional parameter: plugin_path=<path>
 # 
 # - sets the path to the plug-ins
 # - may be absolute or relative to CWD
 #plugin_path=/usr/local/lib/sems/plug-in/
 plugin_path=lib
 
 # optional parameter: smtp_server=<hostname>
 #
 # - sets address of smtp server
 smtp_server=localhost
 
 # optional parameter: smtp_port=<port>
 #
 # - sets port of smtp server
 smtp_port=25
 
 # optional parameter: rtp_low_port=<port>
 #
 # - sets port of rtp lowest server
 #rtp_low_port=1024
 
 # optional parameter: rtp_high_port=<port>
 #
 # - sets port of rtp highest server
 #rtp_high_port=65535
 
 ##################################
 # module specific parameters     #
 ##################################
 
 # sample voicemail configuration (inline)
 config.voicemail=inline
 
 # optional parameter: announce_path=<path>
 # 
 # - sets the path where announce files are searched for
 # - the file to be played is determined the following way:
 #   <announce_path>/<domainname>/<username>.wav
 #   if this file is not available <announce_path>/<default_anounce> is used
 #announce_path=/usr/local/lib/sems/audio/
 announce_path=wav
 
 # parameter: default_announce=<filename>
 # 
 # - sets the name of the default announce WAV file
 default_announce=default_en.wav
 
 # parameter: max_record_time=<seconds>
 #
 # - maximum record time
 max_record_time=30
 
 # parameter: email_template=<filename>
 #
 # - email template file
 # 
 # See the README file in <sems-src>/plug-in/voicemail
 # for more information on the syntax used.
 #
 #email_template=/usr/local/lib/sems/plug-in/mail.template
 email_template=plug-in/voicemail/default.template.sample
 
 # end of configuration section for voicemail module
 config.voicemail=end
 
 
 # sample announcement configuration (inline)
 config.announcement=inline
 
 # optional parameter: announce_path=<path>
 # 
 # - sets the path where announce files are searched for
 #announce_path=/usr/local/lib/sems/audio/
 announce_path=wav
 
 # parameter: default_announce=<filename>
 # 
 # - sets the name of the default announce WAV file
 default_announce=default_en.wav
 
 # end of configuration section for announcement module
 config.announcement=end
 
 
 # sample isdngw module configuration (external file)
 # config.isdngw=/etc/isdngw.conf
 
 # sample ivr module configuration (inline)
 config.ivr=inline
 
 #parameter: python_script_path=<full path>
 #python_script_path=/etc/ivr
 
 #parameter: python_script_file=<filename>
 #python_script_file=example.py
 
 # end of configuration section for ivr module
 config.ivr=end
 
 
 # sample conference configuration (inline)
 config.conference=inline
 
 # parameter: default_announce=<filename>
 #
 # - sets the full pathed name of the default announce WAV file.
 #   Will be played to lonely users.
 #default_announce=/usr/local/lib/sems/audio/first_participant.wav
 default_announce=wav/first_participant.wav
 
 # parameter: join_sound=<filename>
 #
 # - sets the full pathed name of a WAV file
 #   which will be played to conference users 
 #   when a new user joins the conference.
 #join_sound=/usr/local/lib/sems/audio/beep.wav
 join_sound=wav/beep.wav
 
 # parameter: drop_sound=<filename>
 #
 # - sets the full pathed name of a WAV file
 #   which will be played to conference users 
 #   when a user drops the conference.
 #drop_sound=/usr/local/lib/sems/audio/beep.wav
 drop_sound=wav/beep.wav
 
 # end of configuration section for conference module
 config.conference=end
 
 # example configuration for number reader
 config.number_reader=inline
 
 #number_path=/usr/local/lib/sems/audio/
 number_path=wav
 
 prolog_file=welcome_to_number_reader.wav
 
 epilog_file=thanks_calling_number_reader.wav
 
 # end of number_reader configuration
 config.number_reader=end
 
 # add more module configurations here (inline or external):
 #
 # config.mymodule=<filename>
 #  or
 # config.mymodule=inline
 # ...
 # config.mymodule=end 

-------------------------------------------------------------------------------------------------------------------
In addition, I'm using SER 0.9.7.
Please tell me what's wrong.
Thanx


Regards,
Meidiana


 
---------------------------------
Access over 1 million songs - Yahoo! Music Unlimited.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20061130/ee85ab28/attachment.htm>


More information about the sr-users mailing list