I have tried to work through your suggestions. Please see my responses. I appreciate your attentivness and help.
Stephen
- Having issues with correctly increasing the number of children. If
I
What problems do you have with high number of connections in my.cnf?
Most of the documentation that I had seen had my use max-connections = x. I finally found a suggestion to use set-variable=max-connections=x and it worked.
- I only want the call to fail to route 2 for calls that terminate in
my network. I don't want calls leaving the network to try to go to voicemail after the time hits.
Sure. What is the question, script? If so, that's easy: set
t_on_failure
only from within the uri==myself condition.
Unless I am mistaken, that will only help calls originating outside of my network. If I place a call to 18885551212, even if it's not a local destination, the uri still looks like sip:18885551212@209.242.10.153 and matches uri==myself. I did place this portion inside the myself check and it still tries to transfer to vm after the time expires.
Actually, most of your script should be within this condition. If a request for other domain comes (i.e., uri==msyelf does not hold), you just forward using t_relay and that's it. All the script
processing,
uri rewriting, redirection makes only sense if you "own" the request.
Thanks, I fixed that.
- I can't seem to figure out how to format the rewrite/append/etc to
trigger the voicemail call. Maybe I don't understand the routing
loop.
Can someone take a look at the config and give me some ideas?
The "user-offline" part is I guess ok. There are some nits though:
- you ignore non-VoIP messages to off-line users -- is an instant
MESSAGE comes, you just break. you should indicate the status sip-wise instead. Use sl_send_reply("404","not found");
- I don't know what the append_branch in your script is good for,
but I don't think you need it.
This is the part that I really need help with! When the call timer fails, the call goes to the route[1]. How do I get it into voice mail from that point?
- I'm not seeing the activity/routing logs going anywhere. If I run
ser manually, I see information on the stderr, but nothing in the database or logs in terms of the connections.
If you start manually, force messages and see them on your console, then everything is all right, isn't it? If you start from an init script and keep forcing use of stderr, you will obviously will not see anything -- you need to turn stderr off and watch syslog output.
This did send the syslog to the messages file, but where are the call transaction records?
Here is my lastest config.
modparam("tm", "fr_inv_timer", 5 ) modparam("tm", "fr_timer", 10 ) modparam("usrloc", "db_mode", 2) #modparam("auth_db", "db_url","sql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("voicemail", "db_url","sql://ser:heslo@localhost/ser")
modparam("rr", "enable_full_lr", 1) # -- acc params -- modparam("acc", "report_ack", 1) modparam("acc", "log_level", 1) 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 modparam("acc", "log_fmt", "fisu" )
# ------------------------- request routing logic -------------------
alias="test.net" alias="209.242.10.153"
route{
if (!mf_process_maxfwd_header("10")) { log("LOG: Too many hops\n"); sl_send_reply("483","Too Many Hops"); break; }; if (len_gt( max_len )) { sl_send_reply("513", "Wow -- Message too large"); break; };
if (loose_route()) { t_relay(); break; }; if (method=="INVITE") {record_route();};
# account completed transactions via syslog setflag(1);
if (uri==myself) { if (src_ip==66.155.138.5) { log("gateway-originated request"); } else { if (method=="REGISTER") { log(1,"authenticating"); if (!www_authorize("test.net", "subscriber")) { www_challenge("test.net", "0"); break; }; save("location"); break; }; }; if (uri=~"sip:voicemail+@") { log(1,"call matches voicemail"); t_newtran(); t_reply("100", "trying -- just a second"); if (!vm("/tmp/am_fifo","announcement")) { t_reply("500", "SEMS error"); }; break; };
if (uri=~"sip:2[0-9]+@.*") { log(1,"call matches local number"); if (!lookup("location")) { log(1,"failed lookup"); if (method=="INVITE" || method=="ACK") { t_newtran(); t_reply("100", "trying -- one moment"); if(!vm("/tmp/am_fifo","voicemail")){ t_reply("500", "SEMS error"); }; break; }; }; } else { rewritehostport("66.155.138.5:5060"); }; t_on_failure("1"); if (!t_relay()) { sl_reply_error(); break; }; }; }
failure_route[1]{ log(1,"call sent to voicemail due to no answer\n"); if (uri=~"sip:2[0-9]+@.*") { if (method=="INVITE" || method=="ACK") { #WHAT DO I PUT HERE TO TRIGGER THE VM? t_relay(); }; break; }; }
At 11:08 PM 9/10/2003, Steve Dolloff wrote:
Sure. What is the question, script? If so, that's easy: set
t_on_failure
only from within the uri==myself condition.
Unless I am mistaken, that will only help calls originating outside of my network.
uri==myself is a destination test, it does not care about where a call originates from.
If I place a call to 18885551212, even if it's not a local destination, the uri still looks like sip:18885551212@209.242.10.153 and matches uri==myself.
There is some misunderstadning here. myself is not related to the number, it tests domain. (like with email -- it doesn't care about 888 in 888@iptel.org, it cares about if iptel.org is owned by the server). The options are then: - 209.242.10.153 is IP of your host, then the request belongs to the server and uri==myself returns true; you can then do whatever you want to do with it - if it is not your host, uri==myself will return false and you should forward the request there
I did place this portion inside the myself check and it still tries to transfer to vm after the time expires.
I'm puzzled -- did not you want to transfer to vm after the time expires?
This is the part that I really need help with! When the call timer fails, the call goes to the route[1]. How do I get it into voice mail from that point?
see bellow, I think that should work.
This did send the syslog to the messages file, but where are the call transaction records?
presumably at the same place and in mysql database as well.
Here is my lastest config.
modparam("tm", "fr_inv_timer", 5 ) modparam("tm", "fr_timer", 10 ) modparam("usrloc", "db_mode", 2) #modparam("auth_db", "db_url","sql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("voicemail", "db_url","sql://ser:heslo@localhost/ser")
modparam("rr", "enable_full_lr", 1) # -- acc params -- modparam("acc", "report_ack", 1) modparam("acc", "log_level", 1) 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 modparam("acc", "log_fmt", "fisu" )
# ------------------------- request routing logic -------------------
alias="test.net" alias="209.242.10.153"
route{
if (!mf_process_maxfwd_header("10")) { log("LOG: Too many hops\n"); sl_send_reply("483","Too Many Hops"); break; }; if (len_gt( max_len )) { sl_send_reply("513", "Wow -- Message too large"); break; }; if (loose_route()) { t_relay(); break; }; if (method=="INVITE") {record_route();}; # account completed transactions via syslog setflag(1); if (uri==myself) { if (src_ip==66.155.138.5) { log("gateway-originated request"); } else { if (method=="REGISTER") { log(1,"authenticating"); if (!www_authorize("test.net",
"subscriber")) { www_challenge("test.net", "0"); break; }; save("location"); break; }; }; if (uri=~"sip:voicemail+@") { log(1,"call matches voicemail"); t_newtran(); t_reply("100", "trying -- just a second"); if (!vm("/tmp/am_fifo","announcement")) { t_reply("500", "SEMS error"); }; break; };
if (uri=~"sip:2[0-9]+@.*") { log(1,"call matches local number"); if (!lookup("location")) { log(1,"failed lookup"); if (method=="INVITE" || method=="ACK") { t_newtran(); t_reply("100", "trying -- one
moment");
if(!vm("/tmp/am_fifo","voicemail")){ t_reply("500", "SEMS error");
YOU REALLY WANT TO HAVE THIS HERE break; /* we are done with INVITE */
};
sl_send_reply("404", "not found"); /* non-NIVITEs need to be made happy too */
break; };
s
}; } else { rewritehostport("66.155.138.5:5060"); }; t_on_failure("1"); if (!t_relay()) { sl_reply_error(); break; }; };
}
failure_route[1]{ log(1,"call sent to voicemail due to no answer\n"); if (uri=~"sip:2[0-9]+@.*") { if (method=="INVITE" || method=="ACK") {
THE SAME STUFF LIKE ABOVE, YOU DON'T WANT TO t_relay ANYTHING
if(!vm("/tmp/am_fifo","voicemail")){ t_reply("500", "SEMS error"); }; break;
#WHAT DO I PUT HERE TO TRIGGER THE VM? t_relay(); }; break; };
}
-- Jiri Kuthan http://iptel.org/~jiri/