[OpenSIPS-Users] OpenSIPS 1.7 + NAT + rtpproxy

qasimakhan at gmail.com qasimakhan at gmail.com
Fri Aug 3 08:33:01 CEST 2012


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20120803/39cdf812/attachment-0001.htm>


More information about the Users mailing list