[commit] r8395 - freeswitch/trunk/src/mod/endpoints/mod_sofia
Author: anthm Date: Wed May 14 10:13:40 2008 New Revision: 8395 Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Log: clean up nat stuff more Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Wed May 14 10:13:40 2008 @@ -411,7 +411,8 @@ (val = switch_channel_get_variable(channel, "sip-force-contact")) || ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) { sticky = tech_pvt->record_route; - session_timeout = 20; + session_timeout = SOFIA_NAT_SESSION_TIMEOUT; + switch_channel_set_variable(channel, "sip_nat_detected", "true"); } @@ -1107,6 +1108,7 @@ (val = switch_channel_get_variable(channel, "sip-force-contact")) || ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) { sticky = tech_pvt->record_route; + switch_channel_set_variable(channel, "sip_nat_detected", "true"); } nua_respond(tech_pvt->nh, Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Wed May 14 10:13:40 2008 @@ -45,7 +45,7 @@ #ifdef SWITCH_HAVE_ODBC #include <switch_odbc.h> #endif - +#define SOFIA_NAT_SESSION_TIMEOUT 20 #define SOFIA_MAX_ACL 100 #define MODNAME "mod_sofia" Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed May 14 10:13:40 2008 @@ -2727,10 +2727,14 @@ tech_pvt->remote_port = network_port; if (sip->sip_contact && sip->sip_contact->m_url) { + char tmp[35] = ""; tech_pvt->record_route = switch_core_session_sprintf(session, "sip:%s@%s:%d", sip->sip_contact->m_url->url_user, tech_pvt->remote_ip, tech_pvt->remote_port); + switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->remote_ip); + snprintf(tmp, sizeof(tmp), "tech_pvt->remote_port"); + switch_channel_set_variable(channel, "sip_received_port", tmp); } if (*key != '\0') { @@ -3168,6 +3172,7 @@ if (ok) { switch_set_flag(tech_pvt, TFLAG_NAT); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Setting NAT mode based on acl %s\n", last_acl); + switch_channel_set_variable(channel, "sip_nat_detected", "true"); } } } Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Wed May 14 10:13:40 2008 @@ -1007,7 +1007,8 @@ ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) { tech_pvt->record_route = switch_core_session_strdup(tech_pvt->session, url_str); sticky = tech_pvt->record_route; - session_timeout = 20; + session_timeout = SOFIA_NAT_SESSION_TIMEOUT; + switch_channel_set_variable(channel, "sip_nat_detected", "true"); } @@ -1532,6 +1533,16 @@ if (tech_pvt->cng_pt) { flags |= SWITCH_RTP_FLAG_AUTO_CNG; } + + if (tech_pvt->rtp_session && switch_test_flag(tech_pvt, TFLAG_REINVITE)) { + const char *ip = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_IP_VARIABLE); + const char *port = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_PORT_VARIABLE); + + if (ip && port && !strcmp(ip, tech_pvt->adv_sdp_audio_ip) && atoi(port) == tech_pvt->remote_sdp_audio_port) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Audio params are unchanged.\n"); + goto video; + } + } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n", switch_channel_get_name(tech_pvt->channel), @@ -1809,7 +1820,7 @@ } if (((m = sdp->sdp_media)) && m->m_mode == sdp_sendonly) { - sendonly = 1; + sendonly = 2; /* global sendonly always wins */ } for (attr = sdp->sdp_attributes; attr; attr = attr->a_next) { @@ -1819,7 +1830,7 @@ if ((!strcasecmp(attr->a_name, "sendonly")) || (!strcasecmp(attr->a_name, "inactive"))) { sendonly = 1; - } else if (!strcasecmp(attr->a_name, "sendrecv")) { + } else if (sendonly < 2 && !strcasecmp(attr->a_name, "sendrecv")) { sendonly = 0; } else if (!strcasecmp(attr->a_name, "ptime")) { dptime = atoi(attr->a_value); @@ -1840,7 +1851,7 @@ if (!(stream = switch_channel_get_variable(tech_pvt->channel, SWITCH_HOLD_MUSIC_VARIABLE))) { stream = tech_pvt->profile->hold_music; } - + if (stream && strcasecmp(stream, "silence")) { if (!strcasecmp(stream, "indicate_hold")) { switch_channel_set_flag(tech_pvt->channel, CF_SUSPEND);
participants (1)
-
Freeswitch SVN