[mod_sofia] Rewrite rport even if endpoint specifies port in contact

If NDLB-force-rport is enabled, we rewrite the rport regardless
of what the endpoint thinks the port should be.  We do this by
checking the status of server_rport_level before writing the port.

Fixes #1457
This commit is contained in:
Joseph Nadiv 2021-11-23 12:40:56 -05:00 committed by yois615
parent bb682fc5b4
commit 4dab426ecf
1 changed files with 4 additions and 3 deletions

View File

@ -1546,7 +1546,7 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
exptime = 30; exptime = 30;
} }
if (port) { if (port && profile->server_rport_level == 0) {
switch_snprintf(new_port, sizeof(new_port), ":%s", port); switch_snprintf(new_port, sizeof(new_port), ":%s", port);
} }
@ -1662,11 +1662,12 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
} }
if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && 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 && ((profile->server_rport_level == 3 && sip->sip_user_agent &&
sip->sip_user_agent->g_string && sip->sip_user_agent->g_string &&
( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || ( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) ||
!strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) ||
!strncasecmp(sip->sip_user_agent->g_string, "ADTRAN_Total_Access", 19) )) { !strncasecmp(sip->sip_user_agent->g_string, "ADTRAN_Total_Access", 19) ))
|| (profile->server_rport_level == 1 || profile->server_rport_level == 2))) {
if (sip->sip_via) { if (sip->sip_via) {
const char *host = sip->sip_via->v_host; const char *host = sip->sip_via->v_host;
const char *c_port = sip->sip_via->v_port; const char *c_port = sip->sip_via->v_port;