[OpenSIPS-Users] OpenSIPS 1.7 + NAT + rtpproxy

Muhammad Shahzad shaheryarkh at googlemail.com
Fri Aug 3 09:25:21 CEST 2012


You need to mention which RTPProxy set should be used for engage_rtp_proxy,
see below link,

http://www.opensips.org/html/docs/modules/1.7.x/rtpproxy.html#id292702

Also i noticed you are calling engage_rtp_proxy on a Re-INVITE, you should
do it only on the first INVITE of a call, e.g.

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

Thank you.


On Fri, Aug 3, 2012 at 8:33 AM, qasimakhan at gmail.com
<qasimakhan at gmail.com>wrote:

> Have you installed and started rtpproxy? if not just scroll through this
> website <http://www.rtpproxy.org/>.
>
> Regards,
> Qasim
>
> On Fri, Aug 3, 2012 at 2:27 AM, Ashish Kundu <kash906 at gmail.com> wrote:
>
>> Opensips is a great product, but I have been having problem in
>> configuring the nat traversal + rtpproxy with opensips and have spent about
>> a week on this.  I am a novice in this... when opensips runs with the
>> following opensips.cfg relevant portions -- it raises the following
>> rtpproxy problem:
>>
>> "ERROR:rtpproxy:select_rtpp_node: script error -no valid set selected"
>> "ERROR:rtpproxy:force_rtp_proxy: no available proxies"
>>
>> #-------- nat_traversal params -----
>> modparam("nat_traversal", "keepalive_interval", 30)
>> modparam("nat_traversal", "keepalive_method", "OPTIONS")
>> modparam("nat_traversal", "keepalive_from", "sip:keepalive at a.b.c.d")
>> modparam("nat_traversal", "keepalive_state_file",
>> "/var/run/opensips/keepalive_state")
>>
>> #ak# --- rtpproxy -----
>> # single rtproxy with specific weight
>> modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:9999")
>> modparam("rtpproxy", "nortpproxy_str", "a=sdpmangled:yes\r\n")
>> modparam("rtpproxy", "db_url", "mysql://opensips:opensipsrw@localhost
>> /opensips")
>> #modparam("rtpproxy", "db_table", "nh_rtpp")
>> modparam("rtpproxy", "rtpp_socket_col", "rtpproxy_sock")
>>
>>
>> ####### Routing Logic ########
>>
>>
>> # main request routing logic
>>
>> route{
>>         ####nat_traversal info
>>         force_rport();
>>         if (client_nat_test("7")) {
>>                 fix_contact();
>>                 setflag(5);
>>         }
>>
>>         if ((method=="REGISTER" || method=="SUBSCRIBE" ||
>>                 (method=="INVITE" && !has_totag())) &&
>> client_nat_test("7"))
>>         {
>>                 nat_keepalive();
>>         }
>>         ####nat_traversal info ends
>>
>>         if (!mf_process_maxfwd_header("10")) {
>>                 sl_send_reply("483","Too Many Hops");
>>                 exit;
>>         }
>>
>>         ##ak#
>>         if ((is_method("INVITE")) && has_totag()) {
>> #(has_body("application/sdp"))) {
>>                 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 == "your.server.ip.address") {
>>                         ##      # 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();
>>                 #unforce_rtpproxy();
>>                 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")) {
>>                 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"))
>>         {
>>                 # 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;
>>                 ##}
>>
>>                 #---- Request is behind NAT(flag5) save with bflag 6 ----#
>>                 #---- Use bflag 7 to start SIP pinging (Options)     ----#
>>                 if (isflagset(5)) {
>>                         setbflag(6);
>>                         setbflag(7);
>>                 };
>>
>>                 if (!save("location"))
>>                         sl_reply_error();
>>
>>                 exit;
>>         }
>>
>>         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");
>> if (!lookup("location","m")) {
>>                 switch ($retcode) {
>>                         case -1:
>>                         case -3:
>>                                 t_newtran();
>>                                 t_reply("404", "Not Found");
>>                                 exit;
>>                         case -2:
>>                                 sl_send_reply("405", "Method Not
>> Allowed");
>>                                 exit;
>>                 }
>>         }
>>
>>         # when routing via usrloc, log the missed calls also
>>         setflag(2);
>>
>>         route(1);
>> }
>>
>>
>> route[1] {
>>         # for INVITEs enable some additional helper routes
>>
>>          #---- RTP Proxy handling ---#
>>         if (is_method("BYE|CANCEL")) {
>>                 unforce_rtp_proxy();
>>         } else if (is_method("INVITE")){
>>                 #---- Activates the RTP Proxy for the CALLEE ---#
>>                 rtpproxy_offer();
>>         };
>>         #ak## catch and fix replies
>>         #ak#t_on_reply("2");
>>
>>         if (is_method("INVITE")) {
>>                 t_on_branch("2");
>>                 t_on_reply("2");
>>                 t_on_failure("1");
>>         }
>>
>>         if (!t_relay()) {
>>                 sl_reply_error();
>>         };
>>         exit;
>> }
>>
>> branch_route[2] {
>>         if (client_nat_test("3")) {
>>                 fix_contact();
>>         }
>>
>>         xlog("new branch at $ru\n");
>> }
>>
>>
>> onreply_route[2] {
>>         if (client_nat_test("7")) {
>>                 fix_contact();
>>                 if ( is_method("INVITE") && has_body("application/sdp") ){
>>                         ######ak# (isflagset(5) || isbflagset(6)) &&
>>                         rtpproxy_answer();
>>                 }
>>         }
>>         xlog("incoming reply\n");
>> }
>>
>>
>> failure_route[1] {
>>
>>         if (t_was_cancelled()) {
>>                 exit;
>>         }
>>
>>         # uncomment the following lines if you want to block client
>>         # redirect based on 3xx replies.
>>         ##if (t_check_status("3[0-9][0-9]")) {
>>         ##t_reply("404","Not found");
>>         ##      exit;
>>         ##}
>>
>>         # uncomment the following lines if you want to redirect the failed
>>         # calls to a different new destination
>>         ##if (t_check_status("486|408")) {
>>         ##      sethostport("192.168.2.100:5060");
>>         ##      # do not set the missed call flag again
>>         ##      t_relay();
>>         ##}
>> }
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
>>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>


-- 
Muhammad Shahzad
-----------------------------------
CISCO Rich Media Communication Specialist (CRMCS)
CISCO Certified Network Associate (CCNA)
Cell: +92 334 422 40 88
MSN: shari_786pk at hotmail.com
Email: shaheryarkh at googlemail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120803/d44c8240/attachment-0001.htm>


More information about the Users mailing list