Dear List,
Assume that there are two different service providers and one OpenSER in middle of them. A client needs to use/connect OpenSER but also he/she has accounts in both providers and both supplied him/her DDIs (landline phone). Now again assume that client registers both of phones into OpenSER. But still he/she wants to receive calls from both providers, is it possible to receive calls from different providers to that client and/or how to i setup ?
In current SER.CFG below, i only setup one prefix which is "0", but i can change it to any and/or add many prefixes, ex: 0049 (germany), 001 (usa), 0044 (uk), 0090 (turkey) to Provider 1 and 0033 (france), 0038 (italy) to Provider 2 and so on.
debug=3 fork=yes log_stderror=no
listen=212.XXX.104.XXX # This is OpenSER's Public IP port=5060 children=4
alias=212.XXX.104.XXX # This is OpenSER's Public IP
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", "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", 180)
modparam("mediaproxy","natping_interval", 30) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/openser/sip-asymmetric-clients") modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/openser/rtp-asymmetric-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", "failed_transactions", 1) 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")) { record_route_preset("212.XXX.104.XXX:5060;nat=yes"); # This is OpenSER's Public IP } else if (method!="REGISTER") { if!(uri=~"^sip:833[0-9]*@") { # I do not want to make accounting if clients' prefix is beginning with 833 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]*@*") { # If calling number is beginning with prefix 0, route it to PSTN rewritehost("195.XXX.122.XXX"); # This is PSTN Gateway's Public IP 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(); }; }
You can use sipsak to manuall REGISTER the SIP accoutns at the respective provider. As contact use the SIP account at your openser proxy, and as expiry use something like 20 years :-)
regards klaus
Ozan Blotter wrote:
Dear List,
Assume that there are two different service providers and one OpenSER in middle of them. A client needs to use/connect OpenSER but also he/she has accounts in both providers and both supplied him/her DDIs (landline phone). Now again assume that client registers both of phones into OpenSER. But still he/she wants to receive calls from both providers, is it possible to receive calls from different providers to that client and/or how to i setup ?
In current SER.CFG below, i only setup one prefix which is "0", but i can change it to any and/or add many prefixes, ex: 0049 (germany), 001 (usa), 0044 (uk), 0090 (turkey) to Provider 1 and 0033 (france), 0038 (italy) to Provider 2 and so on.
debug=3 fork=yes log_stderror=no
listen=212.XXX.104.XXX # This is OpenSER's Public IP port=5060 children=4
alias=212.XXX.104.XXX # This is OpenSER's Public IP
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", "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", 180)
modparam("mediaproxy","natping_interval", 30) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/openser/sip-asymmetric-clients") modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/openser/rtp-asymmetric-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", "failed_transactions", 1) 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")) { record_route_preset("212.XXX.104.XXX:5060;nat=yes"); # This is OpenSER's Public IP } else if (method!="REGISTER") { if!(uri=~"^sip:833[0-9]*@") { # I do not want to make
accounting if clients' prefix is beginning with 833 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]*@*") { # If calling number is
beginning with prefix 0, route it to PSTN rewritehost("195.XXX.122.XXX"); # This is PSTN Gateway's Public IP 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(); };
}
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
Klaus Darilion writes:
You can use sipsak to manuall REGISTER the SIP accoutns at the respective provider. As contact use the SIP account at your openser proxy, and as expiry use something like 20 years :-)
this is possible, but not ideal. it would be better if it would be somehow possible to tell in register request from sipsak that registration is permanent so that permanent flag would be set in location table. then these registrations would not disappear by accident, when some phones before registering first unregister all contacts using *. it would also be easier by management application to tell which registrations are permanent and which are not.
and finally, it would be nice if fifo command ul rm could be parameterized with the exact contact that is removed, not all contacts of the aor.
-- juha
Klaus Darilion writes:
serweb can delete a single contact. I guess it also uses fifo, or not?
yes, you are correct. i just checked serctl command and could not find possibility to delete a single contact:
* usrloc * ul show [<username>]................ show in-RAM online users ul rm <username> ................... delete user's UsrLoc entries ul add <username> <uri> ............ introduce a permanent UrLoc entry showdb [<username>] ................ show online users flushed in DB
there does exists fico command ul_rm_contact that can delete a single contact.
unfortunately usrloc/README doesn't document fifo commands.
-- juha
Dear Friends,
I got this information, i haven't tried yet but seems it's okay :P
"Just add the DID's provided as alias of the user:
serctl alias add <DID 1st provider> <customer's uri> serctl alias add <DID 2nd provider> <customer's uri>
and calls made to bith DID's will be routed to the same customer."
Thanks, Ozan