mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	res/res_pjsip: Standardize/fix localnet checks across pjsip.
In2dee95cc(ASTERISK-27024) and776ffd77(ASTERISK-26879) there was confusion about whether the transport_state->localnet ACL has ALLOW or DENY semantics. For the record: the localnet has DENY semantics, meaning that "not in the list" means ALLOW, and the local nets are in the list. Therefore, checks like this look wrong, but are right: /* 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"); (In the list == localnet == DENY == skip NAT manipulation.) And conversely, other checks that looked right, were wrong. This change adds two macro's to reduce the confusion and uses those instead: ast_sip_transport_is_nonlocal(transport_state, addr) ast_sip_transport_is_local(transport_state, addr) ASTERISK-27248 #close Change-Id: Ie7767519eb5a822c4848e531a53c0fd054fae934
This commit is contained in:
		| @@ -1127,7 +1127,9 @@ static int transport_localnet_handler(const struct aco_option *opt, struct ast_v | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| 	if (!(state->localnet = ast_append_ha("d", var->value, state->localnet, &error))) { | ||||
| 	/* We use only the ast_apply_ha() which defaults to ALLOW | ||||
| 	 * ("permit"), so we add DENY rules. */ | ||||
| 	if (!(state->localnet = ast_append_ha("deny", var->value, state->localnet, &error))) { | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -267,7 +267,7 @@ static pj_status_t nat_on_tx_message(pjsip_tx_data *tdata) | ||||
| 		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) { | ||||
| 		if (ast_sip_transport_is_local(transport_state, &addr)) { | ||||
| 			ast_debug(5, "Request is being sent to local address, skipping NAT manipulation\n"); | ||||
| 			return PJ_SUCCESS; | ||||
| 		} | ||||
|   | ||||
| @@ -1517,8 +1517,7 @@ 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 (transport_state->localnet | ||||
| 		&& ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 	if (ast_sip_transport_is_local(transport_state, &addr)) { | ||||
| 		return; | ||||
| 	} | ||||
| 	ast_debug(5, "Setting media address to %s\n", ast_sockaddr_stringify_host(&transport_state->external_media_address)); | ||||
|   | ||||
| @@ -3195,8 +3195,7 @@ 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 (!transport_state->localnet | ||||
| 			|| ast_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) { | ||||
| 		if (ast_sip_transport_is_nonlocal(transport_state, &addr)) { | ||||
| 			ast_debug(5, "Setting external media address to %s\n", ast_sockaddr_stringify_host(&transport_state->external_media_address)); | ||||
| 			pj_strdup2(tdata->pool, &sdp->conn->addr, ast_sockaddr_stringify_host(&transport_state->external_media_address)); | ||||
| 		} | ||||
|   | ||||
| @@ -881,8 +881,7 @@ 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 (transport_state->localnet | ||||
| 		&& ast_apply_ha(transport_state->localnet, &addr) == AST_SENSE_ALLOW) { | ||||
| 	if (ast_sip_transport_is_local(transport_state, &addr)) { | ||||
| 		return; | ||||
| 	} | ||||
| 	ast_debug(5, "Setting media address to %s\n", ast_sockaddr_stringify_host(&transport_state->external_media_address)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user