[OpenSIPS-Users] Check Live Peers on OpenSIPS

Ahmed Munir ahmedmunir007 at gmail.com
Fri Mar 19 08:42:12 CET 2010


Hi Bogdan,

Thanks for your suggestion, few things I want to ask from you;

1- Can I use rewritehostport(); function instead of $rd='11.22.33.44' and
append it to t_relay()? Like;

setflag(2);
rewritehostport("203.215.179.34:5060");
t_relay();
route(1);
exit;

2- When using check_source_address() function of permissions module, I'm
facing weird problem. On machine A I've installed OpenSIPS ver 1.6.1 svn
one, I used this function to permitted certain source IPs as I listed in
address table. On machine B (currently working on it using Radius) I've
installed same version of OpenSIPS as on machine A, when I call its
check_source_address() function in INVITE section, it is working as it
worked on machine A. Machine A settings are listed below;


if(is_method("INVITE") && check_source_address("0"))
{
       log("#################### CHECK SOURCE ADDRESS
######################");
       route(1);
       setflag(1);
}


Machine B description I'm mentioning below;

2-1- If user registered him/her self on SIP phone their source IP not going
to be checked, and make calls to each other.
2-2- If user A is on GW calls user B who is located and Registered on
 OpenSIPS, user A GW's source IP must be checked by OpenSIPs, if the IP
exists on address table, call is permitted if not deny the call.

Problems;

When I user A and user B registered on OpenSIPs (using Radius) they can call
each other, but if a user A calling from GW to user B who is registered on
OpenSIPs, calls is made even the address is not listed on address table. And
also in logs I see that that permissions module shows that it doesn't find
any IP enlisted in its hash table, but still permitting it. The
configuration of machine B is listed below;

# main request routing logic

route{

        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        }

        if (has_totag()) {
                if (loose_route()) {
                        if (is_method("BYE")) {
                                setflag(1); # do accounting ...
                                setflag(3); # ... even if the transaction
fails
                        } else if (is_method("INVITE")) {
                                record_route();
                        }
                        route(1);
                } else {
                        if ( is_method("ACK") ) {
                                if ( t_check_trans() ) {
                                        # non loose-route, but stateful ACK;
must be an ACK after
                                        # a 487 or e.g. 404 from upstream
server
                                        t_relay();
                                        exit;
                                } else {
                                        # ACK without matching transaction
->
                                        # ignore and discard
                                        exit;
                                }
                        }
                        sl_send_reply("404","Not here");
                }
                exit;
        }

        #initial requests

        # CANCEL processing
        if (is_method("CANCEL"))
        {
                if (t_check_trans())
                        t_relay();
                exit;
        }

        t_check_trans();

         # preloaded route checking
        if (loose_route()) {
                xlog("L_ERR",
                "Attempt to route with preloaded Route's
[$fu/$tu/$ru/$ci]");
                if (!is_method("ACK"))
                        sl_send_reply("403","Preload Route denied");
                exit;
        }

        # record routing
        if (!is_method("REGISTER|MESSAGE"))
                record_route();


        # account only INVITEs
        if (is_method("INVITE") && check_source_address("0")){
                log("#################### INVITE CASE 1
####################");
                setflag(1); # do accounting
        }
        if (!uri==myself)
        ## replace with following line if multi-domain support is used
        ##if (!is_uri_host_local())
        {
                append_hf("P-hint: outbound\r\n");
                # if you have some interdomain connections via TLS
                ##if($rd=="tls_domain1.net") {
                ##      t_relay("tls:domain1.net");
                ##      exit;
                ##} else if($rd=="tls_domain2.net") {
                ##      t_relay("tls:domain2.net");
                ##      exit;
                ##}
                route(1);
        }

        # requests for my domain

        ## uncomment this if you want to enable presence server
        ##   and comment the next 'if' block
        ##   NOTE: uncomment also the definition of route[2] from  below
        ##if( is_method("PUBLISH|SUBSCRIBE"))
        ##              route(2);

        if (is_method("PUBLISH"))
        {
                sl_send_reply("503", "Service Unavailable");
                exit;
        }
        if (is_method("REGISTER"))
        {
                route(2);
        }

        if ($rU==NULL) {
                # request with no Username in RURI
                sl_send_reply("484","Address Incomplete");
                exit;
        }

        # apply DB based aliases (uncomment to enable)
        ##alias_db_lookup("dbaliases");

        # do lookup with method filtering
        if (!lookup("location","m")) {
                switch ($retcode) {
                        case -1:
                                log("############# LOOKUP LOCATION FLAG -1
PASS ###############");
                                setflag(2);
                                rewritehostport("11.22.33.44:5060");
                                log("############### CALL ROUTING TO ROUTE 1
###################");
                                route(1);
                                exit;
                        case -3:
                                 log("############# LOOKUP LOCATION FLAG -3
PASS ###############");
                                t_newtran();
                                t_reply("404", "Not Found");
                                exit;
                        case -2:
                                 log("############# LOOKUP LOCATION FLAG -2
PASS ###############");
                                sl_send_reply("405", "Method Not Allowed");
                                exit;
                }
        }

        # when routing via usrloc, log the missed calls also
        setflag(2);

        log("############ LOOKUP LOCATION FLAG 1 PASS ################");
        route(1);
}

route[1] {
        # for INVITEs enable some additional helper routes
        #if (is_method("INVITE") && check_source_address("0")) {
        if (is_method("INVITE")) {
                log("####################INVITE ROUTE 1
Function####################");
                t_on_branch("2");
                t_on_reply("2");
                t_on_failure("1");
                #ds_select_dst("1","4");
                #forward();
        }

        if (!t_relay()) {
                sl_reply_error();
        };
        exit;
}

route[2]
{


        log("############## AAA-REGISTRATION #################");
        if (!aaa_www_authorize("rose.abc.com"))
        {
                www_challenge("rose.abc.com", "1");
                 return;
        }

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

        exit;
}
branch_route[2] {
        xlog("new branch at $ru\n");
}


onreply_route[2] {
        xlog("incoming reply\n");
}


failure_route[1] {
        if (t_was_cancelled()) {
                exit;
        }

}


Kindly assist me, how can I permit or deny user from source IP ? Because on
machine A, check_source_address() function is working perfectly but I
haven't integrated FreeRadius with OpenSIPs. Please sort out my problem as
your earliest.




> Date: Thu, 18 Mar 2010 18:38:29 +0200
> From: Bogdan-Andrei Iancu <bogdan at voice-system.ro>
> Subject: Re: [OpenSIPS-Users] Check Live Peers on OpenSIPS
> To: OpenSIPS users mailling list <users at lists.opensips.org>
> Message-ID: <4BA25705.10506 at voice-system.ro>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Hi Ahmed,
>
> Ahmed Munir wrote:
> > Hi Bogdan,
> >
> > Thanks for reply. I forgot to mention earlier that for I'm using
> > OpenSIPS + FreeRadius, where radius is doing accounting and
> > authentication. I used aaa_does_uri_exist() function as well, but
> > seems not working or making mistake while implementing it. On other
> > hand using lookup("location",m) function, on retcode = -1, I
> > redirected the INVITE to GW, using Dispatcher.  But though thanks for
> > your suggestion and I'll consider it.
> >
> > Few things I want to ask you, as I listed below;
> > 1-How can I forward SIP INVITE request to other SIP machine in state
> > full manner ?
> simply do:
>    # set new destination in RURI
>    $rd= "11.22.33.44";
>    # send it out in stateful mode
>    t_relay();
>    exit;
>
> > 2- While accounting using radius, when user A (registered on OpenSIPS)
> > calls the user B who is located at GW side, accounting doesn't take
> > place.  On the other hand when user B (from GW) calls user A (to
> > OpenSIPS), accounting take place. I want to know its cause? Because I
> > want its accounting on both sides.
> take care and check where you set in script the acc flag - maybe you are
> setting it only if lookup is successful.
>
> Regards,
> Bogdan
> >
> > Kindly advise me at your earliest.
> >
> >
> >     ------------------------------
> >
> >     Message: 6
> >     Date: Thu, 18 Mar 2010 10:23:27 +0200
> >     From: Bogdan-Andrei Iancu <bogdan at voice-system.ro
> >     <mailto:bogdan at voice-system.ro>>
> >     Subject: Re: [OpenSIPS-Users] Check Live Peers on OpenSIPS
> >     To: OpenSIPS users mailling list <users at lists.opensips.org
> >     <mailto:users at lists.opensips.org>>
> >     Message-ID: <4BA1E2FF.3060702 at voice-system.ro
> >     <mailto:4BA1E2FF.3060702 at voice-system.ro>>
> >     Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> >
> >     Hi Ahmed,
> >
> >     if the destination number (called number) is not a local subscriber
> (a
> >     SIP user), you simply route the call to a PSTN GW (you do this
> >     re-route
> >     from the script)
> >
> >     To check if a user is a local subscriber, you can either check a
> >     pattern
> >     (like all my local users are alphanumeric, or all starts with 3345*,
> >     etc), either simply check if the user does exists in the subscriber
> >     table (see the URI module, the db_does_uri_exists() function:
> >        http://www.opensips.org/html/docs/modules/1.6.x/uri.html#id271131
> >
> >     Regards,
> >     Bogdan
> >
> >     Ahmed Munir wrote:
> >     > Hi,
> >     >
> >     > I want to know how can I check the peers of source and destination
> >     > phones? Like if both phones are located (registered) on one
> >     > UAS(OpenSIPS) can call SIP-SIP, if any one phone is registered
> >     on UAS
> >     > and other is on PSTN, call will be re-routed to SIP-PSTN. In case
> of
> >     > SIP-SIP, lookup("location") function works and I need to know
> >     how can
> >     > I forward call to SIP-PSTN ?
> >     >
> >     > Kindly advise me the method/ function can used for it.
> >     >
> >     > --
> >     > Regards,
> >     >
> >     > Ahmed Munir
> >     >
> >     >
> >     >
> >
> ------------------------------------------------------------------------
> >     >
> >     > _______________________________________________
> >     > Users mailing list
> >     > Users at lists.opensips.org <mailto:Users at lists.opensips.org>
> >     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >     >
> >
> >
> >     --
> >     Bogdan-Andrei Iancu
> >     www.voice-system.ro <http://www.voice-system.ro>
> >
> >
> >
> >
> > --
> > Regards,
> >
> > Ahmed Munir
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.opensips.org
> > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >
>
>
> --
> Bogdan-Andrei Iancu
> www.voice-system.ro
>
>
>
>
>
-- 
Regards,

Ahmed Munir
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20100319/8e5210a7/attachment-0001.htm 


More information about the Users mailing list