Dear Friends,
A friend of me is writing Basic Billing for SER :) in PHP. I'm gonna place it
somewhere so anyone can add remove features to it and repost it. Will let all of you know
and download it. But for now i need to create a dial plan. I do not want to make
accounting for numbers beginning with 833 prefix, is there a way for it ? Another thing is
, i've tried with so many things but always give errors in config. I have 2 x 4 Port
Analog GSM Gateways, first IP is 192.168.1.10 and second IP is 192.168.1.20, SER Server
has two ethernets, one is for Public IP 212.154.XXX.YYY for general use and the second
ethernet is 192.168.1.5 connected to HUB where Gateways's LAN is. All ports of
FXO's are registered with SER like 1111,2222,3333,4444 (Gateway A) and
5555,6666,7777,8888 (Gateway B). I want SER to send some calls to that numbers depending
on Prefix :
Before i worked with Ondo SIP Proxy a little and was successful with dial plan. Ex: a user
dials 05353490056, proxys adds 1111 prefix, route to registered SIP client 1111 and send
the call as 111105353490056(a)IP.of.Proxy to Gateway, prefix 1111 is stripped from SIP and
the gateway connects to GSM like 05353490056(a)IP.of.Gateway
Ex for Gateways:
* for 1111,2222,3333 and 4444 : i want to use 053 prefix, so when a user dial a number
like 05353490056, SER has to route it to 1111, if it's busy then route to 2222 so on
till 4444.
* for 5555 and 6666 : i want to use 050 and 055 prefix, again same as above.
* for 7777 and 8888 : i want to use 054 prefix.
* for prefixes apart from above and 833, i want to route all calls to 85.96.XXX.YYY ,
important thing is the clients are registered on SER but i want to route calls over from
SER and by keeping their username/password combination since the clients are created on
85.96.XXX.YYY and that Gateway does auth for users, but SER also has to do accounting for
this calls.
Do i need so many things ?
Thanks,
Ozan Blotter
*ps : I'm using SER 0.9.2 from CVS :)
current SER.CFG as follows :
[root@localhost ser]# cat ser.cfg
debug=3
fork=yes
log_stderror=no
listen=192.168.1.9 # 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"
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/acc.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.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("usrloc", "db_mode", 1)
modparam("rr", "enable_full_lr", 1)
modparam("acc", "log_level", 1)
modparam("acc", "db_flag", 1)
modparam("acc", "log_missed_flag", 3)
modparam("acc", "log_fmt", "fimos")
modparam("acc", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("acc", "db_missed_flag", 2)
modparam("acc", "early_media", 1)
modparam("acc", "failed_transactions", 1)
modparam("acc", "log_flag", 1)
route {
setflag(1);
# -----------------------------------------------------------------
# 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();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) {
route(1);
break;
};
if (uri==myself) {
if (method=="INVITE" || method=="BYE" ||
method=="CANCEL") {
setflag(1);
route(3);
break;
} else if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
if (uri=~"^sip:053[0-9]*@") {
prefix("1111");
rewritehost ("192.168.1.10");
break;
};
sl_send_reply("404", "User Not Found");
break;
};
route(1);
};
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
if (!t_relay()) {
sl_reply_error();
};
}
route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# ----------------------------------------------------------------
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] {
# -----------------------------------------------------------------
# INVITE Message Handler
# -----------------------------------------------------------------
if (!proxy_authorize("localhost","subscriber")) {
proxy_challenge("localhost","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
route(1);
}
[root@localhost ser]#