[Users] Openser+Asterisk Voice mail

Glenn Dalgliesh glenn at routerboy.com
Mon Jun 5 10:21:27 CEST 2006


ok remove the route(1); and replace t_relay(); in the failure_route[2]; section as below

failure_route[2]
{
 if(!t_was_cancelled())
 {
  revert_uri();
  rewritehostport("asterisk-ip-voicemail:5090");
  append_branch();
  #PREVENT SOME CRAZY VOICEMAIL LOOP
  xlog("L_INFO", "INFO: CALL TO VOICEMAIL"); 
  setflag(10);
  t_relay();
 }

  ----- Original Message ----- 
  From: ram 
  To: Glenn Dalgliesh 
  Cc: users at openser.org 
  Sent: Monday, June 05, 2006 1:11 AM
  Subject: Re: [Users] Openser+Asterisk Voice mail


  Hi

  here is my config

  iam able to dial *86, i get voice message that no voice messages

  But the call  rewriting when the user not available
  it should go to asterisks voice mail

  ram

  [root at sert openser]# more openser.cfg
  #
  # $Id: openser.cfg,v 1.5 2005/10/28 19:45:33 bogdan_iancu Exp $
  #
  # simple quick-start config script
  #

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

  debug=3            # debug level (cmd line: -dddddddddd)
  log_facility=LOG_LOCAL7
  fork=yes
  log_stderror=no    # (cmd line: -E)

  /* Uncomment these lines to enter debugging mode
  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/openser_fifo"

  # ------------------ module loading ----------------------------------

  loadmodule "/usr/local/lib/openser/modules/tm.so"
  loadmodule "/usr/local/lib/openser/modules/sl.so"
  loadmodule "/usr/local/lib/openser/modules/acc.so"
  loadmodule "/usr/local/lib/openser/modules/rr.so" 
  loadmodule "/usr/local/lib/openser/modules/maxfwd.so"
  loadmodule "/usr/local/lib/openser/modules/mysql.so"
  loadmodule "/usr/local/lib/openser/modules/usrloc.so"
  loadmodule "/usr/local/lib/openser/modules/registrar.so" 
  loadmodule "/usr/local/lib/openser/modules/auth.so"
  loadmodule "/usr/local/lib/openser/modules/auth_db.so"
  loadmodule "/usr/local/lib/openser/modules/textops.so"
  loadmodule "/usr/local/lib/openser/modules/uri.so" 
  loadmodule "/usr/local/lib/openser/modules/uri_db.so"
  loadmodule "/usr/local/lib/openser/modules/group.so"
  loadmodule "/usr/local/lib/openser/modules/msilo.so"
  loadmodule "/usr/local/lib/openser/modules/nathelper.so" 
  loadmodule "/usr/local/lib/openser/modules/enum.so"
  loadmodule "/usr/local/lib/openser/modules/domain.so"
  loadmodule "/usr/local/lib/openser/modules/xlog.so"



  fifo_db_url="mysql://openser:openserrw@localhost/openser"


  modparam("usrloc|acc|auth_db|group|msilo", "db_url", "mysql://openser:openserrw@localhost/openser")


  # ----------------- setting module-specific parameters ---------------
  # -- usrloc params --
  /* 0 -- dont use mysql, 1 -- write_through, 2--write_back */
  modparam("usrloc", "db_mode", 2) 
  modparam("usrloc", "timer_interval", 10)
  modparam("usrloc", "use_domain", 1)
  modparam("registrar", "use_domain", 1)
  # -- auth params --
  modparam("auth_db", "calculate_ha1", yes) 
  modparam("auth_db", "password_column", "password")
  #modparam("auth_db", "use_rpid", 1)
  modparam("auth", "nonce_expire", 300)
  modparam("auth", "rpid_prefix", "<sip:") 
  modparam("auth", "rpid_suffix", "@myip>;party=calling;id-type=subscriber;screen=yes;privacy=off")

  # -- rr params --
  # add value to ;lr param to make some broken UAs happy
  modparam("rr", "enable_full_lr", 1)

  # -- acc params --
  # report ACKs too for sake of completeness -- as we account PSTN
  # destinations which are RR, ACKs should show up
  modparam("acc", "report_ack", 1)
  modparam("acc", "log_level", 1) 
  # if BYE fails (telephone is dead, record-routing broken, etc.), generate
  # a report nevertheless -- otherwise we would have no STOP event; => 1
  #modparam("acc", "failed_transactions", 1)

  # that is the flag for which we will account -- don't forget to
  # set the same one :-)
  # Usage of flags is as follows:
  #   1 == should account(all to gateway),
  #   3 == should report on missed calls (transactions to iptel.org's users),
  #   4 == destination user wishes to use voicemail
  #   6 == nathelper
  #
  modparam("acc", "log_flag", 1)
  modparam("acc", "db_flag", 1) 
  modparam("acc", "log_missed_flag", 3)
  modparam("acc", "db_missed_flag", 3)

  # report to syslog: From, i-uri, status, digest id, method
  modparam("acc", "log_fmt", "fisumdpr")

  # -- tm params --
  modparam("tm", "fr_timer", 15)
  modparam("tm", "fr_inv_timer", 25)
  modparam("tm", "wt_timer", 30)

  # -- msilo params
  modparam("msilo", "registrar", "sip:registrar at mydomain.com")

  # -- enum params --
  modparam("enum", "domain_suffix", "e164.arpa.")

  # -- multi-domain
  modparam("domain", "db_mode", 1)
  # -------------------------  request routing logic -------------------

  # main routing logic
  #Routing Script
  route {
   #check for old messages: could mean a problem with the DNS entries or some other loop-causer...
   if (!mf_process_maxfwd_header("10"))
   {
     xlog("L_WARN", "WARNING: Too many hops\n"); 
     sl_send_reply("483", "Too many hops, forward count exceeded limit\n");
     return;
   };

   #check for extremely large messages; we don't need a sip dos attack
   if (msg:len >= 2048)
   {
     xlog("L_WARN", "WARNING: Message too large, >= 2048 bytes\n");
     sl_send_reply("513", "Message too large, exceeded limit\n"); 
     return;
   };

   #record everything besides registers and acks
   if(method!="REGISTER" && method!="ACK")
   {
    setflag(1);
   };

   #do not send to voicemail if BYE or CANCEL
   #is used to end call before user pickup or timeout
   if(method=="CANCEL" || method=="BYE")
   {
    setflag(10);
   };

   #grant route if route headers already present
   if (loose_route())
   {
     route(1);
     return;
   };

   #Always require authentication, which could result in a PSTN, ie $$$
   if (method=="REGISTER")
   {
     if(!www_authorize("domain.com", "subscriber")) 
     {
      www_challenge("domain.com", "0");
      return;
     }
     else
     {
      #Save into user database, used below when checking if user is available 
      xlog("L_INFO", "REGISTER: User Authenticated Correctly\n");
      save("location");
      return;
     };
   };

   if (method=="INVITE")
   {
    if (uri=~"sip:1[0-9]+ at .*")
    {
     #authorize if a call is going to PSTN
     if(!proxy_authorize("domain.com", "subscriber")) 
     {
      proxy_challenge("domain.com", "0");
      return;
     };

     xlog("L_INFO", "CALL: Call to international number\n");
  #   rewritehostport("voip_gw.domain.net:5060");
          rewritehostport("myprovider-voip:port");
    }
    else if(uri=~"sip:\*86 at .*") 
    {
     #authorize if a call is going to PSTN
     if(!proxy_authorize("domain.com", "subscriber"))
     {
      proxy_challenge(" domain.com", "0");
      return;
     };

     xlog("L_INFO", "CALL: Call to check voicemail\n");
     rewritehostport("asterisk-server-ip:5090");
    }
    else
    {
     if (does_uri_exist())

  {
      #Call is to sip client, so do nothing but route
      xlog("L_INFO", "CALL: Sip client\n");
      if (!lookup("location"))
      {
       sl_send_reply("404", "Not Found"); 
       log(1, "ERROR: User Not Found\n");
       return;
      };
     }
     else
     {
      #authorize if a call is going to PSTN
      if(!proxy_authorize("domain.com ", "subscriber"))
      {
       proxy_challenge("domain", "0");
       return;
      };

      #Call destination is PSTN, so send it to the gateway (Net.com)
      xlog("L_INFO", "CALL: PSTN gateway\n");
  #    rewritehostport("voip_gw.domain.net:5060"); 
          rewritehostport("myprovider-voip:port");

     };
    };

    #Make sure that all subsequent requests go through us;
    record_route();
   }
   else
   {
    if (does_uri_exist())
    {
     #Call is to sip client, so do nothing but route
     xlog("L_INFO", "CALL: Sip client\n"); 
     if (!lookup("location"))
     {
      sl_send_reply("404", "Not Found");
      log(1, "ERROR: User Not Found\n");

      return;
     };
    }
    else
    {
     #Call destination is PSTN, so send it to the gateway (Net.com)
     xlog("L_INFO", "CALL: PSTN gateway\n");
     rewritehostport("voip_gw.domain.net:5060"); 

    };
    record_route();
   };

   #ALL PROCESSING IS DONE, SO ROUTE
   route(1);
  }


  route[1]
  {
  #send the call outward

   if(method=="INVITE" && !isflagset(10))
   {
    t_on_failure("2");
   };

   if (!t_relay())
   {
    xlog("L_WARN", "ERROR: t_relay failed");
    sl_reply_error();
   };

  }

  failure_route[2]
  {
   if(!t_was_cancelled())
   {
    revert_uri();
    rewritehostport("asterisk-ip-voicemail:5090");
    append_branch();
    #PREVENT SOME CRAZY VOICEMAIL LOOP
    xlog("L_INFO", "INFO: CALL TO VOICEMAIL"); 
    setflag(10);
    route(1);
   }
  }


   

  ram
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20060605/fa3db38e/attachment.htm>


More information about the sr-users mailing list