mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	res/res_pjsip_session: Only check localnet if it is defined
If local_net is not defined on a transport, transport_state->localnet will be NULL. ast_apply_ha will, be default, return AST_SENSE_ALLOW in this case, causing the external_media_address, if set, to be skipped. This patch causes us to only check if we are sending within a network if local_net is defined. ASTERISK-26879 #close Change-Id: Ib661c31a954cabc9c99f1f25c9c9a5c5b82cbbfb
This commit is contained in:
		| @@ -262,32 +262,33 @@ static pj_status_t nat_on_tx_message(pjsip_tx_data *tdata) | ||||
| 		return PJ_SUCCESS; | ||||
| 	} | ||||
|  | ||||
| 	if ( !transport_state->localnet || 	ast_sockaddr_isnull(&transport_state->external_address)) { | ||||
| 		return PJ_SUCCESS; | ||||
| 	} | ||||
| 	if (transport_state->localnet) { | ||||
| 		ast_sockaddr_parse(&addr, tdata->tp_info.dst_name, PARSE_PORT_FORBID); | ||||
| 		ast_sockaddr_set_port(&addr, tdata->tp_info.dst_port); | ||||
|  | ||||
| 	ast_sockaddr_parse(&addr, tdata->tp_info.dst_name, PARSE_PORT_FORBID); | ||||
| 	ast_sockaddr_set_port(&addr, tdata->tp_info.dst_port); | ||||
|  | ||||
| 	/* See if where we are sending this request is local or not, and if not that we can get a Contact URI to modify */ | ||||
| 	if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { | ||||
| 		return PJ_SUCCESS; | ||||
| 	} | ||||
|  | ||||
| 	/* Update the contact header with the external address */ | ||||
| 	if (uri || (uri = nat_get_contact_sip_uri(tdata))) { | ||||
| 		pj_strdup2(tdata->pool, &uri->host, ast_sockaddr_stringify_host(&transport_state->external_address)); | ||||
| 		if (transport->external_signaling_port) { | ||||
| 			uri->port = transport->external_signaling_port; | ||||
| 			ast_debug(4, "Re-wrote Contact URI port to %d\n", uri->port); | ||||
| 		/* See if where we are sending this request is local or not, and if not that we can get a Contact URI to modify */ | ||||
| 		if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { | ||||
| 			ast_debug(5, "Request is being sent to local address, skipping NAT manipulation\n"); | ||||
| 			return PJ_SUCCESS; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* Update the via header if relevant */ | ||||
| 	if ((tdata->msg->type == PJSIP_REQUEST_MSG) && (via || (via = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL)))) { | ||||
| 		pj_strdup2(tdata->pool, &via->sent_by.host, ast_sockaddr_stringify_host(&transport_state->external_address)); | ||||
| 		if (transport->external_signaling_port) { | ||||
| 			via->sent_by.port = transport->external_signaling_port; | ||||
| 	if (!ast_sockaddr_isnull(&transport_state->external_address)) { | ||||
| 		/* Update the contact header with the external address */ | ||||
| 		if (uri || (uri = nat_get_contact_sip_uri(tdata))) { | ||||
| 			pj_strdup2(tdata->pool, &uri->host, ast_sockaddr_stringify_host(&transport_state->external_address)); | ||||
| 			if (transport->external_signaling_port) { | ||||
| 				uri->port = transport->external_signaling_port; | ||||
| 				ast_debug(4, "Re-wrote Contact URI port to %d\n", uri->port); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		/* Update the via header if relevant */ | ||||
| 		if ((tdata->msg->type == PJSIP_REQUEST_MSG) && (via || (via = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL)))) { | ||||
| 			pj_strdup2(tdata->pool, &via->sent_by.host, ast_sockaddr_stringify_host(&transport_state->external_address)); | ||||
| 			if (transport->external_signaling_port) { | ||||
| 				via->sent_by.port = transport->external_signaling_port; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -1473,10 +1473,11 @@ static void change_outgoing_sdp_stream_media_address(pjsip_tx_data *tdata, struc | ||||
| 	ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID); | ||||
|  | ||||
| 	/* Is the address within the SDP inside the same network? */ | ||||
| 	if (ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 	if (transport_state->localnet | ||||
| 		&& ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	ast_debug(5, "Setting media address to %s\n", transport->external_media_address); | ||||
| 	pj_strdup2(tdata->pool, &stream->conn->addr, transport->external_media_address); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -3148,7 +3148,10 @@ static void session_outgoing_nat_hook(pjsip_tx_data *tdata, struct ast_sip_trans | ||||
| 		ast_copy_pj_str(host, &sdp->conn->addr, sizeof(host)); | ||||
| 		ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID); | ||||
|  | ||||
| 		if (ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { | ||||
| 		if (!transport_state->localnet | ||||
| 			|| (transport_state->localnet | ||||
| 				&& ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW)) { | ||||
| 			ast_debug(5, "Setting external media address to %s\n", transport->external_media_address); | ||||
| 			pj_strdup2(tdata->pool, &sdp->conn->addr, transport->external_media_address); | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -867,10 +867,11 @@ static void change_outgoing_sdp_stream_media_address(pjsip_tx_data *tdata, struc | ||||
| 	ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID); | ||||
|  | ||||
| 	/* Is the address within the SDP inside the same network? */ | ||||
| 	if (ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 	if (transport_state->localnet | ||||
| 		&& ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	ast_debug(5, "Setting media address to %s\n", transport->external_media_address); | ||||
| 	pj_strdup2(tdata->pool, &stream->conn->addr, transport->external_media_address); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user