char *sql = NULL;
char *acl_context = NULL;
const char *r_sdp = NULL;
- int broken_device = 0;
+ int is_tcp = 0, is_tls = 0;
+ const char *uparams = NULL;
+
+
+ if (sip && sip->sip_contact && sip->sip_contact->m_url && sip->sip_contact->m_url->url_params) {
+ uparams = sip->sip_contact->m_url->url_params;
+ } else {
+ uparams = NULL;
+ }
+
+
+ if (uparams) {
+ if (switch_stristr("transport=tcp", uparams)) {
+ is_tcp = 1;
+ } else if (switch_stristr("transport=tls", uparams)) {
+ is_tls = 1;
+ }
+ }
profile->ib_calls++;
}
- if (!switch_check_network_list_ip(network_ip, profile->local_network) &&
- 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 (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ||
+ (sofia_test_pflag(profile, PFLAG_TLS_ALWAYS_NAT) && (is_tcp || is_tls)) ||
+ (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) &&
+ 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) {
const char *port = sip->sip_via->v_port;
const char *host = sip->sip_via->v_host;
to_user = force_user;
}
- if (profile->server_rport_level >= 2 && sip->sip_user_agent &&
+ if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) &&
+ 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) {