From b3c02a547e1984f181bd15e5d8af9d3363732153 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 14 Feb 2014 23:50:17 +0500 Subject: [PATCH] FS-6230 --resolve There was no NAT detection enabled on the calls, this patch will activate it explicitly when used with force-rport to avoid a similar problem with other users --- src/mod/endpoints/mod_sofia/sofia.c | 9 ++++++++- src/mod/endpoints/mod_sofia/sofia_reg.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 7cb025c829..499c718a85 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -7967,6 +7967,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia char *sql = NULL; char *acl_context = NULL; const char *r_sdp = NULL; + int broken_device = 0; profile->ib_calls++; @@ -8010,7 +8011,13 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia } - if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION)) { + if (profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && + (!strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || + !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) )) { + broken_device = 1; + } + + if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) || broken_device) { if (sip && sip->sip_via) { const char *port = sip->sip_via->v_port; const char *host = sip->sip_via->v_host; diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index fb13f0cff5..a4048767c8 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1464,7 +1464,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand to_user = force_user; } - if (profile->server_rport_level == 3 && sip->sip_user_agent && + if (profile->server_rport_level >= 2 && sip->sip_user_agent && sip->sip_user_agent->g_string && ( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) )) { if (sip && sip->sip_via) {