[Serusers] Accounting & Dial Plan

Ozan Blotter cosmocid at ispro.net.tr
Mon May 30 10:09:44 CEST 2005


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 at IP.of.Proxy to Gateway, prefix 1111 is stripped from SIP and the gateway connects to GSM like 05353490056 at 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 at 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 at localhost ser]#
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20050530/8d2cb059/attachment.htm>


More information about the sr-users mailing list