As also detailed in the other ticket, as well as in the documentation, the engage_rtp_proxy() function has an undefined behavior when using in a bridged scenario. Therefore I recommend you to use the rtpproxy_offer/answer() functions.

Best regards,

Razvan Crainea
OpenSIPS Core Developer
http://www.opensips-solutions.com

On 05/09/2013 02:34 PM, qasimak...@gmail.com wrote:
For engage_rtpproxy there are two flags that are used i.e. i for LAN
interface and E for WAN interface. you can use these two flags to
specify your direction of bridging. e.g. ie for LAN to WAN bridging and
ei for WAN to LAN bridging. Meanwhile look at this documentation for
detailed flag usage.

http://www.opensips.org/html/docs/modules/1.8.x/rtpproxy.html#id292744


Regards,
Qasim


On Thu, May 9, 2013 at 4:09 PM, Michele Pinassi
<michele.pina...@unisi.it <mailto:michele.pina...@unisi.it>> wrote:

    Hi all,

    i have an OpenSIPS server with two interface, PUBLIC (xxx) and PRIVATE
    (172.20.1.2). The PRIVATE interface works inside a LAN dedicated to
    VoIP, with a MediaServer (172.20.1.5) and a Patton Gateway for PSTN
    (172.20.1.4).

    Users phone's can register on both interface and i use RTPProxy (in
    bridging mode) to ensure that both side can talk togheter.

    But something don't work as expected....

    Here's my OpenSIPS routing logic:

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

             if (msg:len >=  2048 ) {
                 sl_send_reply("513", "Message too big");
                 exit;
             };

             if(is_method("INVITE") && has_totag()) {
                 engage_rtp_proxy();
             }

             if (has_totag()) {
                     # sequential request withing a dialog should
                     # take the path determined by record-routing
                     if (loose_route()) {
                             if (is_method("BYE")) {
                                     setflag(1); # do accounting ...
                                     setflag(3); # ... even if the
    transaction fails
                             } else if (is_method("INVITE")) {
                                     # even if in most of the cases is
    useless, do RR for
                                     # re-INVITEs alos, as some buggy
    clients do change route set
                                     # during the dialog.
                                     record_route();
                             }
                             # route it out to whatever destination was
    set by loose_route()
                             # in $du (destination URI).
                             route(1);
                     } else {
                             /* uncomment the following lines if you
    want to enable presence */
                             if (is_method("SUBSCRIBE") && $rd ==
    "voip.unisi.it <http://voip.unisi.it>") {
                                     # in-dialog subscribe requests
                                     route(2);
                                     exit;
                             }
                             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();

             # authenticate if from local subscriber (uncomment to
    enable auth)
             # authenticate all initial non-REGISTER request that
    pretend to be
             # generated by local subscriber (domain from FROM URI is local)
             # if (!(method=="REGISTER") && from_uri==myself) /*no
    multidomain version*/
             if (!(method=="REGISTER") && is_from_local())
      /*multidomain version*/
             {
                     if(!check_source_address("0")){
                         if (!proxy_authorize("", "subscriber")) {
                             proxy_challenge("", "0");
                             exit;
                         }
                         if (!db_check_from()) {
                             sl_send_reply("403","Forbidden auth ID");
                             exit;
                         }

                         consume_credentials();
                         # caller authenticated
                     }
             }

             # 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")) {
                     setflag(1); # do accounting
             }
             if (!uri==myself) {
                     append_hf("P-hint: outbound\r\n");
                     route(1);
             }

             if( is_method("PUBLISH|SUBSCRIBE")) {
                 route(2);
             }

             if (is_method("REGISTER"))
             {
                     # authenticate the REGISTER requests (uncomment to
    enable auth)
                     if (!www_authorize("", "subscriber"))
                     {
                             www_challenge("", "0");
                             exit;
                     }

                     if (!db_check_to())
                     {
                             sl_send_reply("403","Forbidden auth ID");
                             exit;
                     }

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

                     exit;
             }

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

             # media service number? (digits starting with *)
             if($rU=~"^\*") {
                 route(4);
             }

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

             # do lookup with method filtering
             if (!lookup("location","m")) {
                     switch ($retcode) {
                             case -1: # no contact: route it !
                                     cr_user_carrier("$fU", "$fd",
    "$avp(carrier)");
                                     if($avp(carrier)==0) {
                                         xlog("L_INFO","Not here:
    default route [$fd/$fu/$rd/$ru/$si]\n");
                                         # Not here: default route
    
[172.20.1.4/sip:2425@172.20.1.4:5060/voip.unisi.it/sip:5...@voip.unisi.it:5060/172.20.1.4
    
<http://172.20.1.4/sip:2425@172.20.1.4:5060/voip.unisi.it/sip:5...@voip.unisi.it:5060/172.20.1.4>]
                                         if($(rU{s.len}) < 4) {
                                             xlog("L_ERR", "Number
    incomplete/failure for $rU\n");
                                             prefix("FAIL_");
                                             route(4);
                                         }

                                         if(!cr_route("default", "$fd",
    "$rU", "$rU", "call_id",
    "$avp(host)")) {
                                             xlog("L_ERR", "Number not
    found for $rU\n");
                                             prefix("FAIL_");
                                             route(4);
                                         }
                                     } else {
                                         xlog("L_INFO","Not here: user route
    [$fd/$fu/$rd/$ru/$si/$avp(carrier)]\n");
                                         $avp(domain)="voip.unisi.it
    <http://voip.unisi.it>";
                                         if (!cr_route("$avp(carrier)",
    "$avp(domain)", "$rU",
    "$rU","call_id", "$avp(host)")) {
                                             sl_send_reply("404", "Not
    found");
                                             xlog("L_ERR", "cr_route
    failed\n");
                                             exit;
                                         }
                                     }
                                     t_on_failure("1");
                                     if (!t_relay()) {
                                         sl_reply_error();
                                     };
                                     exit;
                             case -3: # internal error
                                     t_newtran();
                                     t_reply("404", "Not Found");
                                     exit;
                             case -2: # method not supported
                                     sl_send_reply("405", "Method Not
    Allowed");
                                     exit;
                     }
             }

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

             route(1);
    }

    route[1] {
             xlog("L_INFO","Route1  [$fd/$fu/$rd/$ru/$si/]\n");

             # for INVITEs enable some additional helper routes
             if (is_method("INVITE")) {
                     t_on_branch("2");
                     t_on_reply("2");
                     t_on_failure("1");
             }

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


    # Presence route
    route[2] {
         xlog("L_INFO","Route2  [$fd/$fu/$rd/$ru/$si/]\n");

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

         if(is_method("PUBLISH")) {
             handle_publish();
         } else if( is_method("SUBSCRIBE")) {
             handle_subscribe();
         }

         exit;
    }

    route[4] {
         xlog("L_INFO","Route4  [$fd/$fu/$rd/$ru/$si/]\n");

         rewritehostport("172.20.1.5:5060 <http://172.20.1.5:5060>");
         route(1);
    }

    branch_route[2] {
         xlog("L_INFO","Branch Route2  [$fd/$fu/$rd/$ru/$si/]\n");
    }

    onreply_route[2] {
         xlog("L_INFO","OnReply Route2  [$fd/$fu/$rd/$ru/$si/]\n");
    }

    failure_route[1] {
         xlog("L_INFO","Failure Route1  [$fd/$fu/$rd/$ru/$si/]\n");

         if (t_was_cancelled()) {
             exit;
         }

         if (t_check_status("408|5[0-9][0-9]")) {
             if(!cr_route("default", "$fd", "$rU", "$rU", "call_id",
    "$avp(host)")){
                 t_reply("403", "Not allowed");
             } else {
                 t_on_failure("2");
                 t_relay();
             }
         }
    }

    failure_route[2] {
         xlog("L_INFO","Failure Route2  [$fd/$fu/$rd/$ru/$si/]\n");

         if (t_was_cancelled()) {
             exit;
         }

         revert_uri();
         prefix("FAILURE_");
         rewritehostport("172.20.1.5:5060 <http://172.20.1.5:5060>");
         t_relay();
    }
    ===========================================

    and this is the RTPProxy config:

    ===========================================
    CONTROL_SOCK=udp:127.0.0.1:12221 <http://127.0.0.1:12221>

    # Additional options that are passed to the daemon.
    EXTRA_OPTS="-l [external IP]/172.20.1.2 <http://172.20.1.2>"
    ===========================================

    Anybody can help me ?

    Michele

    --
    Michele Pinassi
    Responsabile Telefonia di Ateneo
    Servizio Reti, Sistemi e Sicurezza Informatica - Università degli Studi
    di Siena
    tel: 0577.(23)2169 <tel:0577.%2823%292169> - fax: 0577.(23)2053
    <tel:0577.%2823%292053>

    Per trovare una soluzione rapida ai tuoi problemi tecnici
    consulta le FAQ di Ateneo, http://www.faq.unisi.it


    _______________________________________________
    Users mailing list
    Users@lists.opensips.org <mailto:Users@lists.opensips.org>
    http://lists.opensips.org/cgi-bin/mailman/listinfo/users




_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to