[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