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....@brancha calls 192.168.3...@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:opensip...@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
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to