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@IP.of.Proxy to
Gateway, prefix 1111 is stripped from SIP and the gateway connects to GSM like
05353490056@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]#