Here is my ser.cg file. I try to configure send IM, Missed calls, Voicemail. I just can configure Send IM. Now I can call isdngw, ivr,..
I need help to configure lookup location logic for missed calls and voicemail (offline users)
Anybody could help me to configure the others functions (problem with logic !!).
harry Regards
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd) #fork=yes #log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) listen=192.168.0.1 port=5060 children=4 fifo="/tmp/ser_fifo" fifo_mode=0666 # ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/domain.so" loadmodule "/usr/lib/ser/modules/msilo.so" loadmodule "/usr/lib/ser/modules/acc.so" loadmodule "/usr/lib/ser/modules/vm.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/group.so" loadmodule "/usr/lib/ser/modules/textops.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters --------------- # -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database # for persistent storage and comment the previous line modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("usrloc", "db_mode", 2) modparam("usrloc", "use_domain", 1)
# -- auth params -- # Uncomment if you are using auth module # modparam("auth_db", "calculate_ha1", yes) # # If you set "calculate_ha1" parameter to yes (which true in this config), # uncomment also the following parameter) # modparam("auth_db", "password_column", "password")
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
# --registrar params-- modparam("registrar", "use_domain", 1)
# --domain params-- modparam("domain", "db_url", "mysql://ser:heslo@localhost/ser") modparam("domain", "db_mode", 1) # Use chaching
# --acc params-- modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("acc", "db_missed_flag", 3)
# --msilo params-- modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser") modparam("msilo", "db_table", "silo") modparam("msilo","registrar","sip:registrar@192.168.0.1")
# --uri params-- #modparam("uri", "db_url", "mysql://ser:heslo@localhost/ser") #modparam("uri", "subscriber_table", "subscriber")
# --vm params-- modparam("voicemail", "db_url", "mysql://ser:heslo@localhost/ser")
# ------------------------- request routing logic -------------------
# 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; };
# 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(); # loose-route processing if (loose_route()) { t_relay(); break; };
# --isdn gateway-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:[0-9]{10}@.*") { route(2); break; }; };
# --ivr conf-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:5000@.*") { route(4); break; }; };
# --conference-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:6000@.*") { route(5); break; }; }; # --play an annoucement-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:7000@.*") { route(6); break; }; };
# if the request is for other domain use UsrLoc # (in case, it does not work, use the following command # with proper names and addresses in it) if (is_from_local()) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };
save("location"); # 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; };
# does the user wish redirection on no availability? (i.e., is he # in the voicemail (ser->grp) group?) if (is_user_in("Request-URI", "voicemail")) { t_on_failure("4"); setflag(4); };
# native SIP destinations are handled using our USRLOC DB lookup("aliases"); 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(); };
}
failure_route[1] { # forwarding failed -- check if the request was a MESSAGE if (!method=="MESSAGE") { break; }; log(1,"MSILO: the downstream UA does not support MESSAGE requests ...\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 for delivery"); }else{ log("MSILO: offline message NOT stored\n"); t_reply("503", "Service Unavailable"); }; }
failure_route[4] { route(3); #append_branch("sip:80000@10.1.2.5"); append_urihf("CC-Diversion: ", "\r\n"); append_hf("P-hint: OFFLINE-VOICEMAIL\r\n"); t_relay(); }
route[2] { # ############################## # # isdngw specific configuration # # ############################## # if(t_newtran()){
if(method=="INVITE" || method=="BYE" || method=="CANCEL"){
# send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !");
# isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:[0-9]{10}@.*"){ if(!vm("/tmp/am_fifo","isdngw")){ log("could not contact isdngw\n"); t_reply("500","could not contact isdngw"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the isdngw. } else if(uri=~"sip:7000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; };
# The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); }; # in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[3] { ############################################ # Voicemail specific configuration - begin # ############################################ if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; };
t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ if(!vm("/tmp/am_fifo","voicemail")) { log("couldn't contact announcement server\n"); t_reply("500", "couldn not contact announcement server"); }; break; };
if(method=="BYE" || method=="CANCEL") { if(!vm("/tmp/am_fifo","bye")) { log("could not contact the answer machine\n"); t_reply("500","could not contact the answer machine"); }; break; };
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[4] { ###################################### # ivr specific configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; };
t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:5000@.*") { if (!vm("/tmp/am_fifo", "ivr")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact ivr server"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact ivr\n"); t_reply("500","could not contact ivr"); }; log("**************** vm end - end ******************\n"); }; break; }; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[5] {
# #################################### # conference specific configuration # # #################################### if(t_newtran()){
if(method=="INVITE" || method=="BYE" || method=="CANCEL"){
# send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !");
# isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:6000@.*"){ if(!vm("/tmp/am_fifo","conference")){ log("could not contact conference\n"); t_reply("500","could not contact conference"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the conference. } else if(uri=~"sip:5000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; };
# The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); }; # in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[6] { ###################################### # announcement configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; };
t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:7000@.*") { if (!vm("/tmp/am_fifo", "announcement")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact announcement"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact annoucement\n"); t_reply("500","could not contact annoucement"); }; log("**************** vm end - end ******************\n"); }; break; }; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[7] { # non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL")) { sl_send_reply("404", "Not Found"); break; }; if (t_newtran()) { t_reply("404", "Not Found"); acc_db_request("404 missed call", "missed_calls");
}; }
i am looking for assistance to deploy SER with Asterisk to offer some basic services to our community. can anyone help with this?
thanks
sy r.
Hi Harry!
Just Wondering.. WHY the .... are you posting the same question 6 times.. THEREIS alot of help on exact what you do!
here is when you posted THIS question..
Date: Sat, 24 Apr 2004 12:57:08 +0200 Date: Sat, 24 Apr 2004 16:03:56 +0200 Date: Sat, 24 Apr 2004 16:07:44 +0200 Date: Sat, 24 Apr 2004 19:25:50 +0200 Date: Mon, 26 Apr 2004 14:40:22 +0200 Date: Mon, 26 Apr 2004 19:32:49 +0200
Do you think ppl will answer you on 1: a common question? 2: A Repeated Question ?
I think almost everybody here is used to wait both 1-2-3-4 and even a week or to on a answer.. We dont resend them.. With resending you will just make it even harder for yourself to get a answer.
Regards
Atle * gaillac harry gaillacharry@yahoo.fr [040426 19:33]:
Here is my ser.cg file. I try to configure send IM, Missed calls, Voicemail. I just can configure Send IM. Now I can call isdngw, ivr,..
I need help to configure lookup location logic for missed calls and voicemail (offline users)
Anybody could help me to configure the others functions (problem with logic !!).
harry Regards
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd) #fork=yes #log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) listen=192.168.0.1 port=5060 children=4 fifo="/tmp/ser_fifo" fifo_mode=0666 # ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/domain.so" loadmodule "/usr/lib/ser/modules/msilo.so" loadmodule "/usr/lib/ser/modules/acc.so" loadmodule "/usr/lib/ser/modules/vm.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/group.so" loadmodule "/usr/lib/ser/modules/textops.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters --------------- # -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database # for persistent storage and comment the previous line modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("usrloc", "db_mode", 2) modparam("usrloc", "use_domain", 1)
# -- auth params -- # Uncomment if you are using auth module # modparam("auth_db", "calculate_ha1", yes) # # If you set "calculate_ha1" parameter to yes (which true in this config), # uncomment also the following parameter) # modparam("auth_db", "password_column", "password")
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
# --registrar params-- modparam("registrar", "use_domain", 1)
# --domain params-- modparam("domain", "db_url", "mysql://ser:heslo@localhost/ser") modparam("domain", "db_mode", 1) # Use chaching
# --acc params-- modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("acc", "db_missed_flag", 3)
# --msilo params-- modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser") modparam("msilo", "db_table", "silo") modparam("msilo","registrar","sip:registrar@192.168.0.1")
# --uri params-- #modparam("uri", "db_url", "mysql://ser:heslo@localhost/ser") #modparam("uri", "subscriber_table", "subscriber")
# --vm params-- modparam("voicemail", "db_url", "mysql://ser:heslo@localhost/ser")
# ------------------------- request routing logic -------------------
# 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; };
# 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(); # loose-route processing if (loose_route()) { t_relay(); break; };
# --isdn gateway-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:[0-9]{10}@.*") { route(2); break; }; };
# --ivr conf-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:5000@.*") { route(4); break; }; };
# --conference-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:6000@.*") { route(5); break; }; };
# --play an annoucement-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:7000@.*") { route(6); break; }; };
# if the request is for other domain use UsrLoc # (in case, it does not work, use the following command # with proper names and addresses in it) if (is_from_local()) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };
save("location"); # 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; }; # does the user wish redirection on no availability? (i.e., is he # in the voicemail (ser->grp) group?) if (is_user_in("Request-URI", "voicemail")) { t_on_failure("4"); setflag(4); }; # native SIP destinations are handled using our USRLOC DB lookup("aliases"); 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(); };
}
failure_route[1] { # forwarding failed -- check if the request was a MESSAGE if (!method=="MESSAGE") { break; };
log(1,"MSILO: the downstream UA does not support MESSAGE requests ...\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 for delivery"); }else{ log("MSILO: offline message NOT stored\n"); t_reply("503", "Service Unavailable"); }; }
failure_route[4] { route(3); #append_branch("sip:80000@10.1.2.5"); append_urihf("CC-Diversion: ", "\r\n"); append_hf("P-hint: OFFLINE-VOICEMAIL\r\n"); t_relay(); }
route[2] { # ############################## # # isdngw specific configuration # # ############################## # if(t_newtran()){
if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:[0-9]{10}@.*"){ if(!vm("/tmp/am_fifo","isdngw")){ log("could not contact isdngw\n"); t_reply("500","could not contact isdngw"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the isdngw. } else if(uri=~"sip:7000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[3] { ############################################ # Voicemail specific configuration - begin # ############################################ if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ if(!vm("/tmp/am_fifo","voicemail")) { log("couldn't contact announcement server\n"); t_reply("500", "couldn not contact announcement server"); }; break; }; if(method=="BYE" || method=="CANCEL") { if(!vm("/tmp/am_fifo","bye")) { log("could not contact the answer machine\n"); t_reply("500","could not contact the answer machine"); }; break; };
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[4] { ###################################### # ivr specific configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:5000@.*") { if (!vm("/tmp/am_fifo", "ivr")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact ivr server"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact ivr\n"); t_reply("500","could not contact ivr"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[5] {
# #################################### # conference specific configuration # # #################################### if(t_newtran()){ if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:6000@.*"){ if(!vm("/tmp/am_fifo","conference")){ log("could not contact conference\n"); t_reply("500","could not contact conference"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the conference. } else if(uri=~"sip:5000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[6] { ###################################### # announcement configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:7000@.*") { if (!vm("/tmp/am_fifo", "announcement")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact announcement"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact annoucement\n"); t_reply("500","could not contact annoucement"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[7] { # non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL")) { sl_send_reply("404", "Not Found"); break; }; if (t_newtran()) { t_reply("404", "Not Found"); acc_db_request("404 missed call", "missed_calls");
};
}
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Hi Atle,
I posted six times the same question because of if think many people could help me to solve that problem( missed calls!!) quickly.
As many people i try to help if possible.
I'm not waiting the answer without searching I'm reading serusers list , documentation and test my configuration, no kidding!!!
I've still an other problem, missed_calls.php from serweb-2004 tarball reply "error in SQL query, line: 77 No missed calls" may I should post that problem because of i didn't find a solution in serusers list.
I can't configure the last serweb release from CVS with ser stable !!
harry Regards
Le lun 26/04/2004 à 22:56, Atle Samuelsen a écrit :
Hi Harry!
Just Wondering.. WHY the .... are you posting the same question 6 times.. THEREIS alot of help on exact what you do!
here is when you posted THIS question..
Date: Sat, 24 Apr 2004 12:57:08 +0200 Date: Sat, 24 Apr 2004 16:03:56 +0200 Date: Sat, 24 Apr 2004 16:07:44 +0200 Date: Sat, 24 Apr 2004 19:25:50 +0200 Date: Mon, 26 Apr 2004 14:40:22 +0200 Date: Mon, 26 Apr 2004 19:32:49 +0200
Do you think ppl will answer you on 1: a common question? 2: A Repeated Question ?
I think almost everybody here is used to wait both 1-2-3-4 and even a week or to on a answer.. We dont resend them.. With resending you will just make it even harder for yourself to get a answer.
Regards
Atle
- gaillac harry gaillacharry@yahoo.fr [040426 19:33]:
Here is my ser.cg file. I try to configure send IM, Missed calls, Voicemail. I just can configure Send IM. Now I can call isdngw, ivr,..
I need help to configure lookup location logic for missed calls and voicemail (offline users)
Anybody could help me to configure the others functions (problem with logic !!).
harry Regards
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd) #fork=yes #log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) listen=192.168.0.1 port=5060 children=4 fifo="/tmp/ser_fifo" fifo_mode=0666 # ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/domain.so" loadmodule "/usr/lib/ser/modules/msilo.so" loadmodule "/usr/lib/ser/modules/acc.so" loadmodule "/usr/lib/ser/modules/vm.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/group.so" loadmodule "/usr/lib/ser/modules/textops.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters --------------- # -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database # for persistent storage and comment the previous line modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("usrloc", "db_mode", 2) modparam("usrloc", "use_domain", 1)
# -- auth params -- # Uncomment if you are using auth module # modparam("auth_db", "calculate_ha1", yes) # # If you set "calculate_ha1" parameter to yes (which true in this config), # uncomment also the following parameter) # modparam("auth_db", "password_column", "password")
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
# --registrar params-- modparam("registrar", "use_domain", 1)
# --domain params-- modparam("domain", "db_url", "mysql://ser:heslo@localhost/ser") modparam("domain", "db_mode", 1) # Use chaching
# --acc params-- modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("acc", "db_missed_flag", 3)
# --msilo params-- modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser") modparam("msilo", "db_table", "silo") modparam("msilo","registrar","sip:registrar@192.168.0.1")
# --uri params-- #modparam("uri", "db_url", "mysql://ser:heslo@localhost/ser") #modparam("uri", "subscriber_table", "subscriber")
# --vm params-- modparam("voicemail", "db_url", "mysql://ser:heslo@localhost/ser")
# ------------------------- request routing logic -------------------
# 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; };
# 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(); # loose-route processing if (loose_route()) { t_relay(); break; };
# --isdn gateway-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:[0-9]{10}@.*") { route(2); break; }; };
# --ivr conf-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:5000@.*") { route(4); break; }; };
# --conference-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:6000@.*") { route(5); break; }; };
# --play an annoucement-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:7000@.*") { route(6); break; }; };
# if the request is for other domain use UsrLoc # (in case, it does not work, use the following command # with proper names and addresses in it) if (is_from_local()) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };
save("location"); # 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; }; # does the user wish redirection on no availability? (i.e., is he # in the voicemail (ser->grp) group?) if (is_user_in("Request-URI", "voicemail")) { t_on_failure("4"); setflag(4); }; # native SIP destinations are handled using our USRLOC DB lookup("aliases"); 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(); };
}
failure_route[1] { # forwarding failed -- check if the request was a MESSAGE if (!method=="MESSAGE") { break; };
log(1,"MSILO: the downstream UA does not support MESSAGE requests ...\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 for delivery"); }else{ log("MSILO: offline message NOT stored\n"); t_reply("503", "Service Unavailable"); }; }
failure_route[4] { route(3); #append_branch("sip:80000@10.1.2.5"); append_urihf("CC-Diversion: ", "\r\n"); append_hf("P-hint: OFFLINE-VOICEMAIL\r\n"); t_relay(); }
route[2] { # ############################## # # isdngw specific configuration # # ############################## # if(t_newtran()){
if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:[0-9]{10}@.*"){ if(!vm("/tmp/am_fifo","isdngw")){ log("could not contact isdngw\n"); t_reply("500","could not contact isdngw"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the isdngw. } else if(uri=~"sip:7000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[3] { ############################################ # Voicemail specific configuration - begin # ############################################ if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ if(!vm("/tmp/am_fifo","voicemail")) { log("couldn't contact announcement server\n"); t_reply("500", "couldn not contact announcement server"); }; break; }; if(method=="BYE" || method=="CANCEL") { if(!vm("/tmp/am_fifo","bye")) { log("could not contact the answer machine\n"); t_reply("500","could not contact the answer machine"); }; break; };
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[4] { ###################################### # ivr specific configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:5000@.*") { if (!vm("/tmp/am_fifo", "ivr")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact ivr server"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact ivr\n"); t_reply("500","could not contact ivr"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[5] {
# #################################### # conference specific configuration # # #################################### if(t_newtran()){ if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:6000@.*"){ if(!vm("/tmp/am_fifo","conference")){ log("could not contact conference\n"); t_reply("500","could not contact conference"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the conference. } else if(uri=~"sip:5000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[6] { ###################################### # announcement configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:7000@.*") { if (!vm("/tmp/am_fifo", "announcement")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact announcement"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact annoucement\n"); t_reply("500","could not contact annoucement"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[7] { # non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL")) { sl_send_reply("404", "Not Found"); break; }; if (t_newtran()) { t_reply("404", "Not Found"); acc_db_request("404 missed call", "missed_calls");
};
}
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
a good way of doing things :
Never mix CVS and Stable. CVS is not production readdy.
- Atle
* gaillac harry gaillacharry@yahoo.fr [040427 10:36]:
Hi Atle,
I posted six times the same question because of if think many people could help me to solve that problem( missed calls!!) quickly.
As many people i try to help if possible.
I'm not waiting the answer without searching I'm reading serusers list , documentation and test my configuration, no kidding!!!
I've still an other problem, missed_calls.php from serweb-2004 tarball reply "error in SQL query, line: 77 No missed calls" may I should post that problem because of i didn't find a solution in serusers list.
I can't configure the last serweb release from CVS with ser stable !!
harry Regards
Le lun 26/04/2004 ?? 22:56, Atle Samuelsen a ??crit :
Hi Harry!
Just Wondering.. WHY the .... are you posting the same question 6 times.. THEREIS alot of help on exact what you do!
here is when you posted THIS question..
Date: Sat, 24 Apr 2004 12:57:08 +0200 Date: Sat, 24 Apr 2004 16:03:56 +0200 Date: Sat, 24 Apr 2004 16:07:44 +0200 Date: Sat, 24 Apr 2004 19:25:50 +0200 Date: Mon, 26 Apr 2004 14:40:22 +0200 Date: Mon, 26 Apr 2004 19:32:49 +0200
Do you think ppl will answer you on 1: a common question? 2: A Repeated Question ?
I think almost everybody here is used to wait both 1-2-3-4 and even a week or to on a answer.. We dont resend them.. With resending you will just make it even harder for yourself to get a answer.
Regards
Atle
- gaillac harry gaillacharry@yahoo.fr [040426 19:33]:
Here is my ser.cg file. I try to configure send IM, Missed calls, Voicemail. I just can configure Send IM. Now I can call isdngw, ivr,..
I need help to configure lookup location logic for missed calls and voicemail (offline users)
Anybody could help me to configure the others functions (problem with logic !!).
harry Regards
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd) #fork=yes #log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) listen=192.168.0.1 port=5060 children=4 fifo="/tmp/ser_fifo" fifo_mode=0666 # ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/domain.so" loadmodule "/usr/lib/ser/modules/msilo.so" loadmodule "/usr/lib/ser/modules/acc.so" loadmodule "/usr/lib/ser/modules/vm.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/group.so" loadmodule "/usr/lib/ser/modules/textops.so"
# Uncomment this if you want digest authentication # mysql.so must be loaded ! loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters --------------- # -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database # for persistent storage and comment the previous line modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("usrloc", "db_mode", 2) modparam("usrloc", "use_domain", 1)
# -- auth params -- # Uncomment if you are using auth module # modparam("auth_db", "calculate_ha1", yes) # # If you set "calculate_ha1" parameter to yes (which true in this config), # uncomment also the following parameter) # modparam("auth_db", "password_column", "password")
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
# --registrar params-- modparam("registrar", "use_domain", 1)
# --domain params-- modparam("domain", "db_url", "mysql://ser:heslo@localhost/ser") modparam("domain", "db_mode", 1) # Use chaching
# --acc params-- modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("acc", "db_missed_flag", 3)
# --msilo params-- modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser") modparam("msilo", "db_table", "silo") modparam("msilo","registrar","sip:registrar@192.168.0.1")
# --uri params-- #modparam("uri", "db_url", "mysql://ser:heslo@localhost/ser") #modparam("uri", "subscriber_table", "subscriber")
# --vm params-- modparam("voicemail", "db_url", "mysql://ser:heslo@localhost/ser")
# ------------------------- request routing logic -------------------
# 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; };
# 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(); # loose-route processing if (loose_route()) { t_relay(); break; };
# --isdn gateway-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:[0-9]{10}@.*") { route(2); break; }; };
# --ivr conf-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:5000@.*") { route(4); break; }; };
# --conference-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:6000@.*") { route(5); break; }; };
# --play an annoucement-- if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ if (uri=~"sip:7000@.*") { route(6); break; }; };
# if the request is for other domain use UsrLoc # (in case, it does not work, use the following command # with proper names and addresses in it) if (is_from_local()) {
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };
save("location"); # 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; }; # does the user wish redirection on no availability? (i.e., is he # in the voicemail (ser->grp) group?) if (is_user_in("Request-URI", "voicemail")) { t_on_failure("4"); setflag(4); }; # native SIP destinations are handled using our USRLOC DB lookup("aliases"); 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(); };
}
failure_route[1] { # forwarding failed -- check if the request was a MESSAGE if (!method=="MESSAGE") { break; };
log(1,"MSILO: the downstream UA does not support MESSAGE requests ...\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 for delivery"); }else{ log("MSILO: offline message NOT stored\n"); t_reply("503", "Service Unavailable"); }; }
failure_route[4] { route(3); #append_branch("sip:80000@10.1.2.5"); append_urihf("CC-Diversion: ", "\r\n"); append_hf("P-hint: OFFLINE-VOICEMAIL\r\n"); t_relay(); }
route[2] { # ############################## # # isdngw specific configuration # # ############################## # if(t_newtran()){
if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:[0-9]{10}@.*"){ if(!vm("/tmp/am_fifo","isdngw")){ log("could not contact isdngw\n"); t_reply("500","could not contact isdngw"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the isdngw. } else if(uri=~"sip:7000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[3] { ############################################ # Voicemail specific configuration - begin # ############################################ if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ if(!vm("/tmp/am_fifo","voicemail")) { log("couldn't contact announcement server\n"); t_reply("500", "couldn not contact announcement server"); }; break; }; if(method=="BYE" || method=="CANCEL") { if(!vm("/tmp/am_fifo","bye")) { log("could not contact the answer machine\n"); t_reply("500","could not contact the answer machine"); }; break; };
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[4] { ###################################### # ivr specific configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:5000@.*") { if (!vm("/tmp/am_fifo", "ivr")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact ivr server"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact ivr\n"); t_reply("500","could not contact ivr"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[5] {
# #################################### # conference specific configuration # # #################################### if(t_newtran()){ if(method=="INVITE" || method=="BYE" || method=="CANCEL"){ # send a response right at the start to avoid retransmissions t_reply("100","Trying -- just wait a minute !"); # isdngw only gets activated on invite requests if(method=="INVITE"){ # filename is defined in sems.conf. if(uri=~"sip:6000@.*"){ if(!vm("/tmp/am_fifo","conference")){ log("could not contact conference\n"); t_reply("500","could not contact conference"); }; # Allow the announcement module of sems to be used as well. # This can be useful for testing the conference. } else if(uri=~"sip:5000@.*"){ if(!vm("/tmp/am_fifo","announcement")){ log("could not contact announcement\n"); t_reply("500","could not contact announcement"); }; # we dont feel responsible for sip addresses of any other kind, # so send the right error code. } else { t_reply("404","Not Found"); }; # stop routing here, the message is now processed by the media server break; }; # The following handles the call termination, we must pass these requests # to the media server as follows. Again make shure the fifo name and permissions # are set correctly (like im sems.conf). if((method=="BYE")||(method=="CANCEL")){ if(!vm("/tmp/am_fifo","bye")){ log("could not contact the media server\n"); t_reply("500","could not contact the media server"); }; break; }; # other methods than INVITE, BYE and CANCEL are not handled by this SIP Server # so we sent an error message } else { log("ERROR: method not supported\n"); t_reply("500", "sorry, method not supported"); }; } else { # for any reason the transaction could not be created, send error code log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); };
# in isdngw.conf. Don't change this setting. t_relay(); # end of routing. }
route[6] { ###################################### # announcement configuration - begin # ###################################### if(method=="ACK" || method=="INVITE" || method=="BYE"){
if (!t_newtran()) { log("could not create new transaction\n"); sl_send_reply("500","could not create new transaction"); break; }; t_reply("100","Trying -- just wait a minute !"); if(method=="INVITE"){ log("**************** vm start - begin ******************\n"); if (uri=~"sip:7000@.*") { if (!vm("/tmp/am_fifo", "announcement")) { log("couldn't contact ivr server\n"); t_reply("500", "couldn not contact announcement"); }; }; log("**************** vm start - end ******************\n"); } else if(method=="BYE"){ log("**************** vm end - begin ******************\n"); if(!vm("/tmp/am_fifo","bye")){ log("could not contact annoucement\n"); t_reply("500","could not contact annoucement"); }; log("**************** vm end - end ******************\n"); }; break;
}; if (method=="CANCEL") { sl_send_reply("200", "cancels are junked here"); break; }; sl_send_reply("501", "method not understood here"); }
route[7] { # non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL")) { sl_send_reply("404", "Not Found"); break; }; if (t_newtran()) { t_reply("404", "Not Found"); acc_db_request("404 missed call", "missed_calls");
};
}
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers