[OpenSIPS-Users] MediaProxy Call setup

Deon Vermeulen vermeulen.deon at gmail.com
Mon Oct 25 15:46:46 CEST 2010


Hi

I've been anticipating to setup Mediaproxy for more then a week now 
without any success.
I've used the following resources as guidelines, but still can't figure 
out what I'm doing wrong or missing:
http://www.opensips.org/html/docs/modules/devel/mediaproxy.html
http://www.opensips.org/html/docs/modules/devel/nathelper.html
http://www.opensips.org/html/docs/modules/devel/usrloc.html
http://www.opensips.org/html/docs/modules/devel/mi_datagram.html
http://www.opensips.org/html/docs/modules/devel/dialog.html
http://voiprookie.blogspot.com/2009/04/blog-post.html
mailing-list: [OpenSIPS-Users] Mediaproxy broken

I use Counterpath softphone clients for my testing.
One on my MacBookPro and other within Windows XP VirtualBox Machine on 
same Mac.
I have the Mac Firewall turned off.

I can setup call from Windows Client to Mac Client, but when I answer 
call on Mac the call gets dropped immediately, but Windows client still 
says calling until it times out and 408 give error.

I can't setup call from Mac client to Windows Client. It tries calling 
but after a while the client returns with "Can't Connect" without 
ringing on Windows Client.

I've played around with the client Topology configurations on the and 
the only setting that gives some light is "use local IP", and this only 
on Mac Client.
The only result I get is Mac Client rings when I call from Windows 
Client, but then drops call immediately when answer.

What I am looking to achieve is as follows:
1. Media Proxy only be used when Devices are behind NAT.
2. Not use MediaProxy for media when devices are behind the same 
Firewall. i.e. 192.168.0.2 at branchA calls 192.168.3.60 at branchB
3. I am very interested in the ICE feature and would really like to get 
that working. I guess this will resolve requirement 2?

Here is my configurations to show what I currently have:

opensips.cfg

loadmodule "dialog.so"
loadmodule "mediaproxy.so"
loadmodule "nathelper.so"
loadmodule "mi_datagram.so"


# ----- usrloc params -----
#modparam("usrloc", "db_mode",   0)
/* uncomment the following lines if you want to enable DB persistency
    for location entries */
modparam("usrloc", "db_mode",   2)
modparam("usrloc", "db_url", 
"mysql://opensips:opensipsrw@localhost/opensips")
modparam("usrloc", "nat_bflag", 3)

# ----- dialog params ----- #
modparam("dialog", "dlg_flag", 13)
modparam("dialog", "db_mode", 3)


# ----- nethelper ----- #
modparam("nathelper", "natping_interval", 10)
modparam("nathelper", "ping_nated_only", 1)


# ----- mediaproxy params ---- #
modparam("mediaproxy", "mediaproxy_socket", 
"/var/run/mediaproxy-dispatcher.sock")
modparam("mediaproxy", "mediaproxy_timeout", 500)
modparam("mediaproxy", "signaling_ip_avp", "$avp(s:nat_ip)")
modparam("mediaproxy", "media_relay_avp", "$avp(s:media_relay)")
modparam("mediaproxy", "ice_candidate", "low-priority")
modparam("mediaproxy", "ice_candidate_avp", "$avp(s:ice_candidate)")


# ----- mi_datagram params ----- #
modparam("mi_datagram", "socket_name", "/var/run/opensips/opensips.sock")
modparam("mi_datagram", "children_count", 4)


####### Routing Logic ########


# main request routing logic

route{

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

         if (method==INVITE && !has_totag()) {
             # We can also use a specific media relay if we need to
             #$avp(s:media_relay) = "1.2.3.4";
             use_media_proxy();
             fix_nated_sdp("8","ip_of_this_server"); # topology hide the 
sdp o header.
         }


         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 == "localhost)
                         ##      # 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

         # BYE processing
         if (method==BYE) {
             end_media_session();
         }

         # 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 (!proxy_authorize("", "subscriber")) {
                         proxy_challenge("", "1");
                         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)
         ## 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;
                 ##}
                 if(is_from_local()) {
                         route(1);
                 } else {
                         sl_send_reply("403","Not here");
                 }
          }

         # 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("", "1");
                         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;
         }

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

         # do lookup with method filtering
         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
         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] {
         xlog("new branch at $ru\n");
}


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


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

/etc/mediaproxy/config.ini
[Relay]
dispatchers = ip_of_this_server:25060
relay_ip = ip_of_this_server
port_range = 50000:60000
log_level = DEBUG
on_hold_timeout = 1800

[Dispatcher]
socket_path = /var/run/mediaproxy-dispatcher.sock
listen = ip_of_this_server:25060
listen_management = ip_of_this_server:25061
management_use_tls = no

[OpenSIPS]
socket_path = /var/run/opensips/opensips.sock


Thank you very much

Regards
Deon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20101025/cfec4c54/attachment-0001.htm 


More information about the Users mailing list