diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 45b7838768..b8e8868c34 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -7839,6 +7839,8 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia const char *from_tag = ""; char *sql = NULL; char *acl_context = NULL; + int broken_device = 0; + profile->ib_calls++; @@ -7867,7 +7869,13 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia switch_channel_get_name(tech_pvt->channel), network_ip, network_port, SWITCH_VERSION_FULL_HUMAN); - 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 2cc52aa34b..d59362cbf3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1363,7 +1363,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) {