[Serusers] Error while loading module TM. Please solution!!!

Meidiana Ten gotcha_em at yahoo.com
Wed Dec 6 12:14:54 CET 2006


Hi there,
I have problem in loading module TM for voicemail setup here.
I use SER 0.9.7 as server and the latest SEMS for voicemail usage.
I tried to add my ser.cfg with script that can handle the voicemail but I found errors when run SER.
Below is my ser.cfg: (Please take a look at line 54 and 56)

  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
 unix_sock="/tmp/ser_sock"
 
 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/avp.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("tm", "fr_timer", 10 )
 modparam("tm", "wt_timer", 10 )
line 54: modparam("tm", "pass_provisional_replies", 1)
 # configure tm to append this when tw_appent voicemail_headers is used
line 56: modparam("tm", "tw_append","voicemail_headers:P-Email-Address=avp[$email]")
 # appends for dtmf per INFO 
 modparam( "tm", "tw_append","info_append:hdr[Content-Length];hdr[Content-Type];msg[body]")
 
 modparam("permissions", "db_mode", 1)
 modparam("permissions", "trusted_table", "trusted")
 
 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)
 
 # 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( "avpops", "db_scheme", 
 #       "language_scheme:table=subscriber;value_col=language;value_type=string")
 
 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;
         };
       /*
       if (method != "ACK" && method != "INVITE" && method != "BYE" 
             && method != "CANCEL" && method != "INFO" ){
                   log("unsupported method\n");
                   sl_send_reply("500","unsupported method");
                   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");
 
         # -----------------------------------------------------------------
         # 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: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();
         };
 }
 
--------------------------------------------------------------------------------------------------------------------
  
 If I uncomment line 54 and 56, below is the output when I run SER:

  0(4425) set_mod_param_regex: parameter <pass_provisional_replies> not found in module <tm>
   0(4425) parse error (54,19-20): Can't set module parameter
   0(4425) set_mod_param_regex: tm matches module tm
   0(4425) set_mod_param_regex: found <tw_append> in module tm [/usr/local/lib/ser/modules/tm.so]
   0(4425) ERROR:tm:parse_tw_append: bad alias spec <$email>
   0(4425) parse error (56,19-20): Can't set module parameter
   0(4425) set_mod_param_regex: tm matches module tm
    -----------------------------------------------------------------------------------------------------------------------
  If I comment line 54 and 56, below is the output:

   0(0) ERROR:tm:fixup_t_write: unknown append name <voicemail_headers>
   0(0) ERROR: fix_expr : fix_actions error
  ERROR: error -6 while trying to fix configuration
   0(0) MSILO: destroy module ...
   0(0) DEBUG: tm_shutdown : start
   0(0) DEBUG: unlink_timer_lists : emptying DELETE list
   0(0) DEBUG: tm_shutdown : emptying hash table
   0(0) DEBUG: tm_shutdown : releasing timers
   0(0) DEBUG: tm_shutdown : removing semaphores
   0(0) DEBUG: tm_shutdown : destroying tmcb lists
   0(0) DEBUG: tm_shutdown : done
   0(5050) shm_mem_destroy
   0(5050) destroying the shared memory lock
-----------------------------------------------------------------------------------------------------------
Please tell me what's wrong. And please tell me whether if my configuration on ser.cfg is right or wrong because I doubt it.

Thanx before...

Regards,
Meidiana





 
---------------------------------
Have a burning question? Go to Yahoo! Answers and get answers from real people who know.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20061206/99b74664/attachment.htm>


More information about the sr-users mailing list