Hi there, Good afternoon.. I'd like to ask some questions depending on my last project problems.. maybe I had ever asked it in this forum, but I quite don't understand the solution you guys have told me. Maybe it's because I don't give the details about my OS and many more, and I'm a newbie too. But I really thanx for the reply on my last question. I'm using Red Hat 9 Linux to build my SIP Server. I use SER 0.9.7 as the server. The problem I found here is to test the MSILO module which I add to the ser.cfg Below is the description of my ser.cfg:
------------------------------------------------------- debug=9 fork=no log_stderror=yes
listen=202.95.149.2 # put your server IP address here port=5060 children=4
dns=no rev_dns=no
fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:heslo@localhost/ser" fifo_mode=0666
loadmodule "/usr/local/lib/ser/modules/mysql.so" loadmodule "/usr/local/lib/ser/modules/sl.so" loadmodule "/usr/local/lib/ser/modules/tm.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/maxfwd.so" loadmodule "/usr/local/lib/ser/modules/usrloc.so" loadmodule "/usr/local/lib/ser/modules/registrar.so" loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/avpops.so" loadmodule "/usr/local/lib/ser/modules/domain.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/msilo.so"
modparam("auth_db|permissions|uri_db|usrloc","db_url", "mysql://ser:heslo@localhost/ser") modparam("auth_db|uri_db|usrloc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 27) modparam("tm", "fr_inv_timer_avp", "inv_timeout")
modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted")
modparam("tm", "fr_timer", 10 ) modparam("tm", "fr_inv_timer", 15 ) modparam("tm", "wt_timer", 10 )
modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser") modparam("msilo", "db_table", "silo") modparam("msilo","registrar","sip:registrar@pcr.ac.id")
alias="pcr.ac.id" route { # ----------------------------------------------------------------- # Sanity Check Section # -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; };
if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; };
# ----------------------------------------------------------------- # Record Route Section # -----------------------------------------------------------------
if (method!="REGISTER") { record_route(); };
if (method=="BYE" || method=="CANCEL") { unforce_rtp_proxy(); }
# ----------------------------------------------------------------- # Loose Route Section # -----------------------------------------------------------------
if (loose_route()) { if (has_totag() && (method=="INVITE" || method=="ACK")) { if (nat_uac_test("19")) { setflag(6); force_rport(); fix_nated_contact(); }; force_rtp_proxy("l"); }; route(1); break; };
# ----------------------------------------------------------------- # Offline Message Store Section # ----------------------------------------------------------------- if (is_from_local()) { if (method=="REGISTER") { save("location"); log("REGISTER received -> dumping messages with MSILO\n");
# MSILO - dumping user's offline messages if (m_dump()) { log("MSILO: offline messages dumped - if they were\n"); }else{ log("MSILO: no offline messages dumped\n"); }; break; };
# domestic SIP destinations are handled using our USRLOC DB
if(!lookup("location")) { if (! t_newtran()) { sl_reply_error(); break; }; # we do not care about anything else but MESSAGEs if (!method=="MESSAGE") { if (!t_reply("404", "Not found")) { sl_reply_error(); }; break; }; log("MESSAGE received -> storing using MSILO\n"); # MSILO - storing as offline message if (m_store("0")) { log("MSILO: offline message stored\n"); if (!t_reply("202", "Accepted")) { sl_reply_error(); }; }else{ log("MSILO: offline message NOT stored\n"); if (!t_reply("503", "Service Unavailable")) { sl_reply_error(); }; }; break; }; # if the downstream UA does not support MESSAGE requests # go to failure_route[1] t_on_failure("1"); t_relay(); break; }; # forward to current uri now; use stateful forwarding that # works reliably even if we forward from TCP to UDP if (!t_relay()) { sl_reply_error(); };
# ----------------------------------------------------------------- # Call Type Processing Section # -----------------------------------------------------------------
if (uri!=myself) { route(5); route(1); break; };
if (uri==myself) { if (method=="ACK") { route(6); break; } else if (method=="CANCEL") { route(3); break; } else if (method=="INVITE") { route(3); break; } else if (method=="REGISTER") { route(2); break; }; lookup("aliases"); if (uri!=myself) { route(5); route(1); break; };
if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; }; }; route(1); }
failure_route[1] { # forwarding failed -- check if the request was a MESSAGE if (!method=="MESSAGE") { break; };
log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n"); # we have changed the R-URI with the contact address, ignore it now if (m_store("1")) { log("MSILO: offline message stored\n"); t_reply("202", "Accepted"); }else{ log("MSILO: offline message NOT stored\n"); t_reply("503", "Service Unavailable"); }; }
route[1] {
# ----------------------------------------------------------------- # Default Message Handler # -----------------------------------------------------------------
t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); }; }
route[2] {
# ----------------------------------------------------------------- # REGISTER Message Handler # ----------------------------------------------------------------
if (!search("^Contact:\ +*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; sl_send_reply("100", "Trying");
if (!www_authorize("pcr.ac.id","subscriber")) { www_challenge("pcr.ac.id","0"); break; };
if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); }; }
route[3] {
# ----------------------------------------------------------------- # CANCEL and INVITE Message Handler # -----------------------------------------------------------------
if (!allow_trusted() && nat_uac_test("19")) { setflag(6); } lookup("aliases"); if (method=="INVITE" && !allow_trusted()) { if (!proxy_authorize("pcr.ac.id","subscriber")) {
proxy_challenge("pcr.ac.id","0"); break; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; }; consume_credentials(); };
if (uri=~"^sip:9[0-9]*@") { route(4); break; };
if (uri!=myself) { route(5); route(1); break; };
if (!lookup("location")) { if (uri=~"^sip:[0-9]{10}@") { route(4); break; }; sl_send_reply("404", "User Not Found"); break; };
if (isflagset(6)) { force_rport(); fix_nated_contact(); force_rtp_proxy(); }; t_on_reply("1");
if (!t_relay()) { if(isflagset(6)) { unforce_rtp_proxy(); } sl_reply_error(); }; }
route[4] {
# ----------------------------------------------------------------- # PSTN Handler # -----------------------------------------------------------------
rewritehostport("202.95.149.2:5060"); # INSERT YOUR PSTN GATEWAY IP ADDRESS avp_write("i:45", "inv_timeout");
if (isflagset(6)) { force_rport(); fix_nated_contact(); force_rtp_proxy(); }; route(1); }
onreply_route[1] { if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") { if (!search("^Content-Length:\ +0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1")) { fix_nated_contact(); }; }
------------------------------------------------------- I don't know whether my configuration below is right or still wrong..I've test it using 2 clients. I made one of them online, and the other off. I try to call the offline one, but it said user not found. In my thought, if I've activated MSILO module, it will automatically ask the online client if he wants to store offline voice message or not... Please tell me what's wrong with the configuration. In addition, the server can be use to make a call between online clients.
Second question is about my serweb. I have seen my config.php in /var/www/html/serweb directory. It contains as shown below:
------------------------------------------------------- /* Unless you used brute-force to change SER table names */ $this->table_subscriber="subscriber"; $this->table_pending="pending"; $this->table_grp="grp"; $this->table_aliases="aliases"; $this->table_location="location"; $this->table_missed_calls="missed_calls"; $this->table_accounting="acc"; $this->table_phonebook="phonebook"; $this->table_event="event"; $this->table_netgeo_cache="netgeo_cache"; $this->table_ser_mon="server_monitoring"; $this->table_ser_mon_agg="server_monitoring_agg"; $this->table_message_silo="silo"; / below is the problem / $this->table_voice_silo="voice_silo"; -------------------------------------------------------
And below is my SER tables:
+-----------------------+ | Tables_in_ser | +-----------------------+ | acc | | active_sessions | | admin_privileges | | aliases | | calls_forwarding | | config | | domain | | event | | grp | | location | | missed_calls | | pending | | phonebook | | preferences_types | | reserved | | server_monitoring | | server_monitoring_agg | | silo | | speed_dial | | subscriber | | trusted | | uri | | usr_preferences | | version | +-----------------------+ 24 rows in set (0.00 sec) -------------------------------------------------------
You can see that there is no table named "voice_silo" in my SER tables. It cause error on one of my web page named message_store.php. It requires voice_silo table. I'd like to ask you what is the different between table named "silo" and "voice_silo"? Can both of them store offline voice message? If I have to add "voice_silo" in my SER table, please give me the description of entities needed to build voice_silo table.
Last, I'd like to thank you guys for the willingness to read my questions and problems. Of course I'm expecting the answers too. Thanx again.
Regards,
Meidiana Ten
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com