Note, you may be legally required to log all calls if you are selling this commercially rather than just a corporate PBX type of thing.
-----Original Message----- From: serusers-bounces@iptel.org [mailto:serusers-bounces@lists.iptel.org]On Behalf Of Ozan Blotter Sent: Tuesday, July 12, 2005 10:23 AM To: Iqbal Cc: serusers@lists.iptel.org Subject: Re: [Serusers] Broken Calls not written to Database
Dear Iqbal,
Thanks for your help and btw i've found the way how to prevent database not to write 833 to 833 calls which are free and has nothing to do with, so my database not grows with them. I think the broken calls can be set in MERA VoIP which is used as PSTN Gateway by our Carrier.
Thanks Again, Ozan
# ----------------------------------------------------------------- # Record Route Section and Acc section # ----------------------------------------------------------------- if (method=="INVITE" && client_nat_test("3")) { record_route_preset("212.XXX.104.XXX:5060;nat=yes"); } else if (method!="REGISTER") { if!(uri=~"^sip:833[0-9]*@") { record_route(); setflag(1); } };
# -----------------------------------------------------------------
----- Original Message ----- From: "Iqbal" iqbal@gigo.co.uk To: "Ozan Blotter" cosmocid@ispro.net.tr Cc: serusers@lists.iptel.org Sent: Tuesday, July 12, 2005 8:06 PM Subject: Re: [Serusers] Broken Calls not written to Database
oh completely forgot to answer the question, if the user unplugs, then who will send the BYE, only the pstn gateway can, and most can (someone confirm) send a BYE if they receive nothing for a transaction for 30secs or so, hence ur billing might be out for 30secs. However what i do for a "broken" call, is to complete it when I do my billing, by how much, well thats upto what mood I am in :-), but usually round it up to the next minute. This is not accurate, because the user may bypass this and not send a BYE but might have carried on his call...soooooo get the CDR from the gateway, and for open calls, I am trying to match the cdr data with that in ser, which aint easy sinc ethe cdr have no username of them.
Again these are just methods to reduce/remove the inaccuracies, it wont be 100% but over time it will get close
Iqbal
Ozan Blotter wrote:
Dear List, I'm making a call to PSTN, it's okay i can talk with the other party via ATA, but suddenly i unplug power from it, and in accounting module it does not write line with BYE message so i cannot understand whether the call is finished or not. only INVITE and ACK are written, no BYE :( This may be a security hole for customers, because they talk for a long time and they may unplug their units or cut power so it does not tell SER it's over. How i can prevent this, also what i need to add as a line for telling ACC module not to write calls from 833 to 833 into database, which are free SIP2SIP calls ? Btw, a Postpaid Billing System is on the way for OpenSER built in PHP, later i will need OpenSER group's help to place it onto hosting site. Shortly it will have features:
- Nothing extra from package, default MySql Database which comes with
OpenSER Release is being used,
- All routing is done via OpenSER's ser.cfg ,
- Initial Rate, Initial Time, Increment Rate, Increment Time will be user
variable ,
- Account Creation/Deletion done in PHP ,
- Invoice Generation and CDR will include many variables ,
- Rating will be in PHP,
- And everything is totaly free :)
If you have ideas and/or suggestion please write back to me so i can work for it too. Reqs: OpenSER & PHP & MySql & Apache Thanks, Ozan
debug=3 fork=yes log_stderror=no listen=212.XXX.104.XXX port=5060 children=4 alias=212.XXX.104.XXX dns=no rev_dns=no fifo="/tmp/openser_fifo" fifo_db_url="mysql://openser:openserrw@localhost/openser" loadmodule "/usr/local/lib/openser/modules/mysql.so" loadmodule "/usr/local/lib/openser/modules/sl.so" loadmodule "/usr/local/lib/openser/modules/tm.so" loadmodule "/usr/local/lib/openser/modules/rr.so" loadmodule "/usr/local/lib/openser/modules/maxfwd.so" loadmodule "/usr/local/lib/openser/modules/usrloc.so" loadmodule "/usr/local/lib/openser/modules/registrar.so" loadmodule "/usr/local/lib/openser/modules/auth.so" loadmodule "/usr/local/lib/openser/modules/auth_db.so" loadmodule "/usr/local/lib/openser/modules/uri.so" loadmodule "/usr/local/lib/openser/modules/uri_db.so" loadmodule "/usr/local/lib/openser/modules/mediaproxy.so" loadmodule "/usr/local/lib/openser/modules/nathelper.so" loadmodule "/usr/local/lib/openser/modules/textops.so" loadmodule "/usr/local/lib/openser/modules/domain.so" loadmodule "/usr/local/lib/openser/modules/acc.so" #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("auth_db", "use_domain", 1) modparam("domain", "db_mode", 1) modparam("nathelper", "rtpproxy_disable", 1) modparam("nathelper", "natping_interval", 0) modparam("mediaproxy","natping_interval", 30) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/openser/sip-asymmetr ic-clients")
modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/openser/rtp-asymmetr ic-clients")
modparam("usrloc", "db_mode", 2) modparam("usrloc", "use_domain", 1) modparam("registrar", "default_expires", 60) modparam("registrar", "min_expires", 30) modparam("registrar", "nat_flag", 6) modparam("registrar", "use_domain", 1) modparam("rr", "enable_full_lr", 1) modparam("acc", "db_url", "mysql://openser:openserrw@localhost/openser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_flag", 1) 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 and Acc section
# -----------------------------------------------------------------
if (method=="INVITE" && client_nat_test("3")) { # INSERT YOUR IP ADDRESS HERE record_route_preset("212.XXX.104.XXX:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); setflag(1); };
# ----------------------------------------------------------------- # Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") { end_media_session(); };
# ----------------------------------------------------------------- # Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) { if (client_nat_test("3") || search("^Route:.*;nat=yes")) { setflag(6); use_media_proxy(); }; }; route(1); break; }; # ----------------------------------------------------------------- # Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) { route(1); break; }; if (uri==myself) { 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(1); break; }; if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; }; }; route(1); } route[1] { # ----------------------------------------------------------------- # Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; } route[2] { # ----------------------------------------------------------------- # REGISTER Message Handler
# ----------------------------------------------------------------
if (!search("^Contact:\ +*") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport(); }; sl_send_reply("100", "Trying"); if (!www_authorize("","subscriber")) { www_challenge("","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 (client_nat_test("3")) { setflag(7); force_rport(); fix_nated_contact(); }; lookup("aliases"); if (uri!=myself) { route(1); break; }; if (uri=~"^sip:0[0-9]*@*") { rewritehost("212.XXX.59.XXX"); route(1); break; }; if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; }; if (method=="CANCEL") { route(1); break; }; if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); break; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; }; consume_credentials(); if (isflagset(6) || isflagset(7)) { use_media_proxy(); }; route(1); } onreply_route[1] { if ((isflagset(6) || isflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) { if (!search("^Content-Length:\ +0")) { use_media_proxy(); }; }; if (client_nat_test("1")) { fix_nated_contact(); }; }
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
_______________________________________________ Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers