[Users] Need help to migrate OpenSer v1.0.x to v1.1.x

Rafo RGV rafael.risco at gmail.com
Wed Aug 16 04:25:10 CEST 2006


Hi
I am migrating OpenSER v1.0.9 to v1.1.0 using the config file I send
below that works perfect in 1.0.9 and I modified to run in 1.1.x ,
I´ve just needed to change naming schema in parameter given to
exported functions of avpops module to run without errors in this new
version but when running can´t see basic logs and can´t register any
client even if I install DB schema and create subscriber using its
openserctl , ngrep just show me a 'forbidden' message but dont know
why, please someone send me some advice.
thanks
rafael


# ----------------- global configuration parameters --------------------

debug=4
fork=yes
log_stderror=yes

listen=192.168.2.136    # OPENSER IP ADDRESS HERE
port=5060

# Hostname matching an alias will satisfy the condition uri==myself".
# alias=mydomain.com.pe:5060
# alias=mydomain.com.pe
alias=192.168.2.136:5060
alias=192.168.2.136

check_via=yes    # (cmd. line: -v)
children=4
dns=no
rev_dns=no
fifo="/tmp/openser_fifo"
# fifo="FIFO"
fifo_mode=0666  # Fifo permissions can be changes from here.
fifo_db_url="mysql://dbuser:dbpass@dbt2.mydomain.com.pe/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/group.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/avpops.so"
loadmodule "/usr/local/lib/openser/modules/domain.so"
loadmodule "/usr/local/lib/openser/modules/permissions.so"
loadmodule "/usr/local/lib/openser/modules/acc.so"
loadmodule "/usr/local/lib/openser/modules/uac_redirect.so"
loadmodule "/usr/local/lib/openser/modules/diversion.so"
# -----------------------------------------------------------------------

modparam("auth_db|permissions|group|uri_db|usrloc", "db_url",
"mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

modparam("tm", "fr_inv_timer", 27)

modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")

modparam("avpops", "avp_url",
"mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser")
modparam("avpops", "avp_table", "usr_preferences")

# ------------- Mysql Accounting parameters

modparam("acc", "log_flag", 1)
modparam("acc", "log_level", 2)
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 3)
modparam("acc", "log_missed_flag", 3)
modparam("acc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser")
modparam("acc", "report_ack", 0) # 1 reporta dos starts en acc (para
INVITE y ACK)

modparam("acc", "log_fmt", "miocfsputdr")
modparam("acc", "detect_direction", 1) # only in 1.1.x or cvs
modparam("acc", "multi_leg_enabled", 1)
modparam("acc", "src_leg_avp_id", 110)
modparam("acc", "dst_leg_avp_id", 111)

# ------------- Domain parameters

modparam("usrloc", "use_domain", 1)
modparam("auth_db", "use_domain", 1)
modparam("registrar", "use_domain", 1)
modparam("domain", "db_mode", 1)
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")

# -------------------------------------------------------------------------

route {

        # log(1, "-------------------------------------------------------\n");
        # log(1, "entering main loop\n");

        ## populate the avps (for Multi call leg accounting):
        if (!method=="REGISTER" && !method=="NOTIFY") {
                avp_write("$from/username", "$avp(i:110)");
                avp_write("$ruri/username", "$avp(i:111)");
          };

        # set flag for Missed calls for Accounting:
        if (!method=="OPTIONS") setflag(3);

        if (method=="INVITE") {
                log(1, " INVITE MESSAGE RECEIVED - START ACC\n");
        };

        if (method=="BYE") {
                log (1, " BYE MESSAGE RECEIVED - STOP ACCOUNTING\n");
        };

        if (method=="CANCEL") {
                log (1, " CANCEL MESSAGE RECEIVED - STOP ACCOUNTING\n");
        };

        if (method=="OPTIONS") {
                log(1, "       OPTIONS MESSAGE RECEIVED\n");
                return;        #Do Nothing for 'Options'
        };

        # -----------------------------------------------------------------
        # Sanity Check Section
        # -----------------------------------------------------------------
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                return;
        };

        if (msg:len > max_len) {
                sl_send_reply("513", "Message Overflow");
                return;
        };

        # -----------------------------------------------------------------
        # Handle NOTIFY requests from Sipura's to keep-alive NAT
        # -----------------------------------------------------------------
        if ((is_method("NOTIFY")) && (! uri=~"sip:.*[@]+.*")) {
                sl_send_reply("200", "OK keep-alive");
                log(1, "       OK keep-alive\n");
                return;
        };

        # -----------------------------------------------------------------
        # Only allow known sip messages
        # -----------------------------------------------------------------
        if (!is_method("INVITE|REGISTER|BYE|NOTIFY|ACK|CANCEL|REFER|SUBSCRIBE"))
{
                sl_send_reply("501", "Not implemented here");
                log(1, "       501 - Not implemented here\n");
                return;
        };

        # -----------------------------------------------------------------
        # SUBSCRIBE cleanup
        # -----------------------------------------------------------------
        if (is_method("SUBSCRIBE")) {
                replace(" talk", "talk");
        };

        # -----------------------------------------------------------------
        # Record Route Section
        # -----------------------------------------------------------------
        if (method=="INVITE" && nat_uac_test("19")) {

                # OPENSER IP ADDRESS OR DOMAIN HERE:
                record_route_preset("192.168.2.136:5060;nat=yes");
                setflag(1);  ## Set Flag 1 for Acc: test from this location!!
                } else if (method!="REGISTER") {
                record_route();
        };

        # -----------------------------------------------------------------
        # Call Tear Down Section
        # -----------------------------------------------------------------
        if (method=="BYE" || method=="REFER" || method=="CANCEL") {
                unforce_rtp_proxy();
                setflag(1);  ### Set Flag 1 for Acounting
        };

        # -----------------------------------------------------------------
        # Loose Route Section
        # -----------------------------------------------------------------

        if (loose_route()) {

                if (has_totag() && (method=="INVITE" || method=="ACK")) {

                        if (nat_uac_test("19")) {
                                setflag(7);
                                force_rport();
                                fix_nated_contact();
                        };
                        force_rtp_proxy("l");
                };

                route(1);
                return;
        };

        # -----------------------------------------------------------------
        # Call Type Processing Section
        # -----------------------------------------------------------------

        if (!is_uri_host_local()) {
                if (is_from_local() || allow_trusted()) {
                        route(4);
                        route(1);
                } else {
                        sl_send_reply("403", "Forbidden");
                };
                return;
        };


        if (method=="CANCEL") {
                route(1);
                return;
        } else if (method=="INVITE") {
                setflag(1);  # Set Flag for Acounting
                route(3);
                return;
        } else if (method=="REGISTER") {
                route(2);
                return;
        };

        lookup("aliases");
        if (uri!=myself) {
                route(4);
                route(1);
                return;
        };

        if (!lookup("location") && !method=="ACK") {

                if (does_uri_exist()) {
                        log(1, "       uri_exist but its Temporarily
Unavailable 1 \n");
                        route(7);  # To Voicemail
                        return;
                } else {
                        log(1, "       unable to locate user - User
Not Exist 1 \n");
                        sl_send_reply("404", "User Not Exist");
                        acc_db_request("404 User Not Exist", "missed_calls");
                        return;
                };
        };

        route(1);
}

route[1] {

        # -----------------------------------------------------------------
        # Default Message Handler
        # -----------------------------------------------------------------

        t_on_reply("1");

        if (!t_relay()) {

                if (method=="INVITE" || method=="ACK") {
                        unforce_rtp_proxy();
                };
                sl_reply_error();
        };
}

route[2] {

        # -----------------------------------------------------------------
        # REGISTER Message Handler
        # -----------------------------------------------------------------

        sl_send_reply("100", "Trying");

        if (is_user_in("from", "desactivado")) {
                sl_send_reply("402", "desactivada temporalmente");
                log(1,"       Cta. desactivada temporalmente \n");
                return;
        };

        if (!search("^Contact:[ ]*\*") && nat_uac_test("19")) {
                setflag(6);
                fix_nated_register();
                force_rport();
        };

        if (!www_authorize("","subscriber")) {
                log(1,"       Fails to Register \n");
                www_challenge("","0");
                return;
        };

        if (!check_to()) {
                log(1,"       Unauthorized registration attempt \n");
                sl_send_reply("401", "Unauthorized");
                return;
        };

        consume_credentials();

        log(1,"       Registered! \n");

        if (!save("location")) {
                sl_reply_error();
        };
}

route[3] {

        # -----------------------------------------------------------------
        # INVITE Message Handler
        # -----------------------------------------------------------------
        log(1," route[3]---> INVITE Message Handler \n");

        if ( allow_trusted() ) log(1, " Call from pstn or *pbx, no
authentication is required. \n");

        if (!allow_trusted()) {

                if (!proxy_authorize("","subscriber")) {
                        proxy_challenge("","0");
                        return;
                } else if (!check_from()) {
                        sl_send_reply("403", "Use From=ID");
                        log(1, "       Sorry, only registered users
are allowed \n");
                        return;
                };
                consume_credentials();
        };
        append_rpid_hf();

	# some digits rules here....

        lookup("aliases");

        if (!is_uri_host_local()) {
                route(4);
                route(1);
                return;
        };

        if (nat_uac_test("19")) {
                setflag(7);
                force_rport();
        };


        # -----------------------------------------------------------------
        # to PSTN Routes!!!
        # -----------------------------------------------------------------

        route(6); # To PSTN & LDI Routes block!!!

        # -----------------------------------------------------------------

        if ( is_uri_host_local() ) {

                # (Is he in the voicemail group?) -- determine it now
and store it in
                # flag 4, before we rewrite the flag using UsrLoc:
                if (is_user_in("Request-URI", "voicemail")) {
                        log(1, "       requested user is in voicemail
group \n");
                        setflag(4);
                };

                # if user is on-line and is in Voicemail group, enable
redirection
                # Pendiente: # ver como meter voicemail al avp junto a
las otras funciones...
                if (method == "INVITE" && isflagset(4)) {
                        log(1, "       invite for voicemail
user->initiate failureroute[1]\n");
                        t_on_failure("1");
                };

                # flag 22 determines if we need to call the
append_branch() for Blind CallFwd.
                if (avp_db_load("$ruri/username", "$avp(s:callfwd)")) {
                        setflag(22);
                        avp_pushto("$ruri", "$avp(s:callfwd)");
                        route(6);
                        return;
                };

                # native SIP destinations are handled using our USRLOC DB:
                if (!lookup("location") ) {

                        if (does_uri_exist()) {
                                log(1,"       uri_exist but its
Temporarily Unavailable 2 \n");
                                route(7);  # To Voicemail
                                return;
                        } else {
                                log(1,"       Unable to locate
xcompany user - User Not Exist 2X \n");
                                prefix("iu"); ## in asterisk: iu:
exten => _iu1780XXXX,1,Playback(invalid,noanswer)
                                acc_db_request("404 User Invalid",
"missed_calls");
                                rewritehostport("192.168.2.131:5070");
                                t_relay();
                                return;
                        };
                };

                # t_on_failure() informs SER that we want to perform
special handling when a failure condition occurs.
                # Failure conditions in this context refer to 4xx and
5xx response codes.
                # By setting t_on_failure(1) before calling t_relay(),
oSER will pass control to the failure_route[1]

                t_on_failure("1");

                route(4);
                route(1);

        };
}

route[4] {

        # -----------------------------------------------------------------
        # NAT Traversal Section
        # -----------------------------------------------------------------

        ### First check and resetflags if UAS are behind the same NAT
system: ###

        if (isflagset(6) && isflagset(7)){
                log(2, "       Both Clients are behind NAT");
                # Store the destination domain into an AVP
                avp_printf("$avp(i:450)", "$dd");
                if (avp_check("$avp(i:450)", "eq/$src_ip/g")){
                        log(3, "       Detected Two Clients Behind the
Same NAT - Disabling Mediaproxy");
                        # Do not use media-proxy as the clients seem
to be behind the same NAT
                        resetflag(6);
                        resetflag(7);
                };
        };

        if (isflagset(6) || isflagset(7)) {
                if (!isflagset(8)) {
                        setflag(8);
                        force_rport();
                        fix_nated_contact();
                        force_rtp_proxy();
                };
        };
}

route[5] {

        # -----------------------------------------------------------------
        # ILD - PSTN Handler
        # -----------------------------------------------------------------

        # Forward international calls to Asterisk (a SIP LDI Providers):

        if(uri=~"^sip:011"){
                log(1, " 011N match - Larga Distancia Internacional a USA \n");
                        if (!is_user_in("from", "ldiusa")) {
                        log(1,"       No permission for international
calls to USA \n");
                        sl_send_reply("403", "No permission for
international calls to USA");
                        acc_db_request("403 Forbidden", "missed_calls");
                        return;
                        };
                strip(2);
        };

        if(uri=~"^sip:011"){
                log(1,"       011N match - Larga Distancia Internacional \n");
                        if (!is_user_in("from", "ldix")) {
                                log(1, "       No permission for
international calls \n");
                                sl_send_reply("403", "No permission
for international calls");
                                acc_db_request("403 Forbidden", "missed_calls");
                                return;
                        };
        };

        rewritehostport("192.168.2.137:5070"); # Asterisk or PSTN
GATEWAY IP ADDRESS

        t_on_failure("1");
        route(4);
        route(1);
}


route[6] {

        # ----------------- Free Calls -------------------

        # To Info numbers 102, 104, 123 y 080011236

                if(uri=~"^sip:102@" || uri=~"^sip:104@" ||
uri=~"^sip:123@" ||  uri=~"^sip:0800123456@"){
                        log(1," To CallCenter xcompany!! \n");
                        rewriteuri("sip:123456 at mydomain.com.pe");
                        rewritehostport("callcenter.mydomain.com.pe:5060");
                        route(4);
                        route(1);
                        return;
                };



        if (is_user_in("from", "restringido")) {
                sl_send_reply("402", "Restriccion temporal");
                log(1,"       402 - Restriccion temporal \n");
                acc_db_request("402 Restricted", "missed_calls");
                return;
        };

        lookup("aliases");


        if (!is_uri_host_local()) {
                if (!isflagset(22)) {
                        append_branch();
                };
                route(4);
                route(1);
                return;
        };

# -------------------------- Seccion de Rutas a LDI
----------------------------------------

        # Forward international calls to Asterisk (To SIP LDI Providers):

        if (uri=~"^sip:011[0-9]*@" && !uri=~"^sip:01152*@") {
                route(5);
                return;
        };


        if( uri=~"^sip:[2-8][0-9]{6}@" || uri=~"^sip:1[2-8][0-9]{6}@"
|| uri=~"^sip:01[2-8][0-9]{6}@" ) {

                log(1, " A Fijos Mexico PSTN \n");

                if (uri=~"^sip:01[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") {
                        strip(1);
                };

                if (uri=~"^sip:[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") {
                        prefix("1");
                };

                if (!is_user_in("from", "fijomexico")) {
                        sl_send_reply("403", "No permission for local
fixed calls");
                        log(1, "       403 - No permission for local
fixed calls \n");
                        acc_db_request("403 Forbidden", "missed_calls");
                        return;
                };
                rewritehostport("192.168.2.137:5070");
                prefix("52");
                route(4);
                route(1);
                return;
        };

        # no existe? (debe ir al final siempre)
        if ( uri=~"^sip:[0-9]" && !does_uri_exist() ) {
                log(1, "       Unable to locate route for this dnid -
User Not Exist 3X \n");
                prefix("mc");
                acc_db_request("404 Number Invalid or Incomplete",
"missed_calls");
                rewritehostport("192.168.2.131:5070");
                t_relay();
                return;
        };

}

route[7] {

        # ---------------------- Handling of Unavailable user
----------------------
        # non-Voip -- just send "off-line"
        if (!(method=="INVITE" || method=="ACK" || method=="CANCEL" ||
method=="BYE" || method=="OPTIONS")) {
                sl_send_reply("404", "Not Found");
                acc_db_request("404 Not Found", "missed_calls");
                log(1, "       404 Not Found & non-Voip -- just send
off-line \n");
                return;
        };

        # Not voicemail subscriber:
        if (!isflagset(4) && !method=="OPTIONS" && !method=="ACK" &&
!method=="BYE" && !method=="CANCEL") {
                #sl_send_reply("404", "Not Found and no VMail turned on");
                acc_db_request("480 Temporarily Unavailable", "missed_calls");
                # A locucion (Usuario temporalmente fuera de servicio
'ss-noservice');
                log(1, "       404 Not Found and no voicemail \n");
                prefix("fu"); ## su: exten =>
_su1780XXXX,1,Playback(ss-noservice,noanswer)
                rewritehostport("192.168.2.131:5070");
                t_relay();
                return;
        };

        # forward to voicemail adding prefix to simplify asterisk
"extension.conf" ::
        if (isflagset(4) && !method=="OPTIONS" && !method=="ACK" &&
!method=="BYE" && !method=="CANCEL") {
                prefix("vm");
                acc_db_request("480 Temporarily Unavailable -> Vm",
"missed_calls");
                rewritehostport ("192.168.2.131:5070");
                t_relay();
                return;
        };
}

        # --------------------------------------------------------------------------


onreply_route[1] {

        if ((isflagset(6) || isflagset(7)) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
                if (!search("^Content-Length:[ ]*0")) {
                        force_rtp_proxy();
                };
        };

        if (nat_uac_test("1")) {
                fix_nated_contact();
        };
}

failure_route[1] {

        if (t_check_status("487")) {
                return;
        };


        if (t_check_status("486")){
                prefix("vmb");
                acc_db_request("486 Busy      -> Vm", "missed_calls");
                rewritehostport ("192.168.2.131:5070");
                append_branch();
                t_relay();
                return;
        };


        if (t_check_status("408")){
                prefix("vmu");
                acc_db_request("408 Timeout   -> Vm", "missed_calls");
                rewritehostport ("192.168.2.131:5070");
                append_branch();
                t_relay();
                return;
        };

        unforce_rtp_proxy();
}

failure_route[2] {

        # handle 302 redirects
        if (t_check_status("3[0-9][0-9]")) {
                get_redirects("*");
                t_relay();
        };
}

### The End ###




More information about the Users mailing list