<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>Voicemail</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=2 FACE="Arial">Hello,</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">I'm trying for long hours to put voicemail working in my network. I'm using SEMS version from CVS and SER 0.8.12</FONT>
<BR><FONT SIZE=2 FACE="Arial">I read many past emails from the serusers list and I follow the examples in FAQ by Jiri.</FONT>
<BR><FONT SIZE=2 FACE="Arial">I create a group in ser's database named "voicemail" with serctl acl grante <username> <group> and put there all my usernames registered in SER's database.</FONT></P>
<P><FONT SIZE=2 FACE="Arial">I'm having always 2 problems;</FONT>
<BR> <FONT SIZE=2 FACE="Arial">- is_user_in("Request-URI", "voicemail") always return false even if the user is in the group of voicemail in tables grp from SER'c database;</FONT></P>
<P> <FONT SIZE=2 FACE="Arial">- if I force setflag(4) to be true I always get the error "could not contact announcement server" or "could not contact voicemail server"</FONT></P>
<BR>
<P><FONT SIZE=2 FACE="Arial">Does anyone have some idea what is happening?</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">Thank you.</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Arial">João</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Arial">Here are my config files:</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># simple quick-start config script</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">## vm_proxy 2004/01/26 Joao Sampaio</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># ----------- global configuration parameters ------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#debug=3 # debug level (cmd line: -dddddddddd)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#log_stderror=no # (cmd line: -E)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">/* Uncomment these lines to enter debugging mode </FONT>
<BR><FONT SIZE=2 FACE="Courier New">debug=7</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fork=no</FONT>
<BR><FONT SIZE=2 FACE="Courier New">log_stderror=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">*/</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">check_via=no # (cmd. line: -v)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">dns=no # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">rev_dns=no # (cmd. line: -R)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">port=5060</FONT>
<BR><FONT SIZE=2 FACE="Courier New">children=4</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo="/tmp/ser_fifo"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------------ module loading ----------------------------------</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># $Id: vm_proxy.cfg,v 1.1 2003/10/30 14:52:41 jiri Exp $</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># simple proxy script for forwarding to voicemail server</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># for unavailable users</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/sl.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/tm.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/rr.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/maxfwd.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/mysql.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/group.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/usrloc.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/registrar.so"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># time to give up on ringing -- global timer, applies to </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># all transactions</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("tm", "fr_inv_timer", 10)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># database with user group membership</FONT>
<BR><FONT SIZE=2 FACE="Courier New">modparam("group", "db_url", "mysql://ser:heslo@localhost/ser")</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Courier New"># --------------------- request routing logic -------------------</FONT>
<BR><FONT SIZE=2 FACE="Courier New">route {</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!mf_process_maxfwd_header("10")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log("LOG: Too many hops\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("483", "Alas Too Many Hops");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!(method=="REGISTER")) record_route();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (loose_route()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!uri==myself) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (method == "REGISTER") {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!save("location")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_reply_error();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># does the user wish redirection on no availability? (i.e., is he</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># in the voicemail group?) -- determine it now and store it in</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># flag 4, before we rewrite the flag using UsrLoc</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (1){ #is_user_in("Request-URI", "voicemail")) { ###Force setflag(4) to be true###</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">setflag(4);</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># native SIP destinations are handled using our USRLOC DB</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!lookup("location")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># handle user which was not found</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">route(4);</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># if user is on-line and is in voicemail group, enable redirection</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (method == "INVITE" && isflagset(4)) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_on_failure("1");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay();</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------- handling of unavailable user ------------------</FONT>
<BR><FONT SIZE=2 FACE="Courier New">route[4] {</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># non-Voip -- just send "off-line"</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!(method == "INVITE" || method == "ACK" || method == "CANCEL")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("404", "Not Found");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># not voicemail subscriber</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!isflagset(4)) { </FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("404", "Not Found and no voicemail turned on");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New"># forward to voicemail now</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">rewritehostport("10.112.64.121:5090");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay_to_udp("10.112.64.121", "5090"); </FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># if forwarding downstream did not succeed, try voicemail running</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># at bat.iptel.org:5090</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">failure_route[1] {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">revert_uri();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">rewritehostport("10.112.64.121:5090");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">append_branch();</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_relay_to_udp("10.112.64.121", "5090");</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Arial">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------</FONT></P>
<BR>
<P><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># $Id: voicemail.cfg,v 1.2 2003/10/10 06:27:18 jiri Exp $</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># this script is configured for use as voicemail UAS; it processes</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># INVITEs and BYEs and asks SEMS to record media via "vm"; in this</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># script, all record-routing and other constructs known from proxy</FONT>
<BR><FONT SIZE=2 FACE="Courier New"># scripts are not present -- it is a simple UAS </FONT>
<BR><FONT SIZE=2 FACE="Courier New">#</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ----------- global configuration parameters ------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">#debug= # debug level (cmd line: -dddddddddd)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=no</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#log_stderror=yes # (cmd line: -E)</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">debug=4</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#fork=no</FONT>
<BR><FONT SIZE=2 FACE="Courier New">log_stderror=yes</FONT>
<BR><FONT SIZE=2 FACE="Courier New">check_via=no # (cmd. line: -v)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">dns=no # (cmd. line: -r)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">rev_dns=no # (cmd. line: -R)</FONT>
<BR><FONT SIZE=2 FACE="Courier New">port=5090</FONT>
<BR><FONT SIZE=2 FACE="Courier New">#children=4</FONT>
<BR><FONT SIZE=2 FACE="Courier New">fifo="/tmp/vm_ser_fifo"</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------------ module loading ----------------------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/sl.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/tm.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/maxfwd.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/mysql.so"</FONT>
<BR><FONT SIZE=2 FACE="Courier New">loadmodule "/usr/lib/ser/modules/vm.so"</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"> </FONT>
<BR><FONT SIZE=2 FACE="Courier New"># ----------------- setting module-specific parameters ---------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">modparam("voicemail", "db_url","mysql://ser:heslo@localhost/ser")</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># ------------------------- request routing logic -------------------</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New"># main routing logic</FONT>
</P>
<P><FONT SIZE=2 FACE="Courier New">route{</FONT>
</P>
<BR>
<P> <FONT SIZE=2 FACE="Courier New"># initial sanity checks -- messages with</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"># max_forwars==0, or excessively long requests</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (!mf_process_maxfwd_header("10")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("483","Too Many Hops");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (msg:len > max_len){ #len_gt( max_len )) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("513", "Message too big");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!uri==myself) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("404", "not reponsible for host in r-uri");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<BR>
<P> <FONT SIZE=2 FACE="Courier New"># Voicemail specific configuration - begin</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if(method=="ACK" || method=="INVITE" || method=="BYE"){</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">if (!t_newtran()) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"could not create new transaction\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("500","could not create new transaction");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
</P>
<P> <FONT SIZE=2 FACE="Courier New">t_reply("100","Trying -- just wait a minute !");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if(method=="INVITE"){</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"**************** vm start - begin ******************\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (uri=~"9999@10.112.64.121"){ #"sip:as_welcome@.*" || uri=~"sip:as_nomoney@.*") {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"> if (!vm("/tmp/am_fifo", "announcement")) {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New"> log(1,"couldn't contact announcement server\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_reply("500", "couldn not contact announcement server");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">} else {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if(!vm("/tmp/am_fifo","voicemail")){</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"could not contact the answer machine\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_reply("500","could not contact the answer machine");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"**************** vm start - end ******************\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">} else if(method=="BYE"){</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"**************** vm end - begin ******************\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if(!vm("/tmp/am_fifo","bye")){</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"could not contact the answer machine\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">t_reply("500","could not contact the answer machine");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">log(1,"**************** vm end - end ******************\n");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">if (method=="CANCEL") {</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("200", "cancels are junked here");</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">break;</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">};</FONT>
<BR> <FONT SIZE=2 FACE="Courier New">sl_send_reply("501", "method not understood here");</FONT>
<BR><FONT SIZE=2 FACE="Courier New">}</FONT>
</P>
<BR>
<BR>
<BR>
<BR>
<BR>
<P><B><FONT COLOR="#000080" SIZE=4 FACE="Times New Roman">________________________</FONT></B>
<BR><B><FONT COLOR="#000080" SIZE=4 FACE="Times New Roman">João Sampaio</FONT></B>
</P>
<P><FONT COLOR="#000080" SIZE=2 FACE="Times New Roman">PT Inovação, SA</FONT>
</P>
<P><FONT COLOR="#000080" SIZE=2 FACE="Times New Roman">SRM - Serviços e Redes Móveis</FONT>
</P>
<P><FONT COLOR="#000080" SIZE=2 FACE="Times New Roman">email: est-j-sampaio@ptinovacao.pt</FONT>
<BR><FONT COLOR="#000080" SIZE=2 FACE="Times New Roman">Tlf: +351 234511160-1907 / +351 234403421</FONT>
</P>
</BODY>
</HTML>