Merge "res/res_pjsip_session: Only check localnet if it is defined"

pull/7/head
Joshua Colp 8 years ago committed by Gerrit Code Review
commit f5603cb1ec

@ -262,32 +262,33 @@ static pj_status_t nat_on_tx_message(pjsip_tx_data *tdata)
return PJ_SUCCESS; return PJ_SUCCESS;
} }
if ( !transport_state->localnet || ast_sockaddr_isnull(&transport_state->external_address)) { if (transport_state->localnet) {
return PJ_SUCCESS; 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 */ /* 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_apply_ha(transport_state->localnet, &addr) != AST_SENSE_ALLOW) {
return PJ_SUCCESS; ast_debug(5, "Request is being sent to local address, skipping NAT manipulation\n");
return PJ_SUCCESS;
}
} }
/* Update the contact header with the external address */ if (!ast_sockaddr_isnull(&transport_state->external_address)) {
if (uri || (uri = nat_get_contact_sip_uri(tdata))) { /* Update the contact header with the external address */
pj_strdup2(tdata->pool, &uri->host, ast_sockaddr_stringify_host(&transport_state->external_address)); if (uri || (uri = nat_get_contact_sip_uri(tdata))) {
if (transport->external_signaling_port) { pj_strdup2(tdata->pool, &uri->host, ast_sockaddr_stringify_host(&transport_state->external_address));
uri->port = transport->external_signaling_port; if (transport->external_signaling_port) {
ast_debug(4, "Re-wrote Contact URI port to %d\n", uri->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 */ /* 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)))) { 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)); pj_strdup2(tdata->pool, &via->sent_by.host, ast_sockaddr_stringify_host(&transport_state->external_address));
if (transport->external_signaling_port) { if (transport->external_signaling_port) {
via->sent_by.port = transport->external_signaling_port; via->sent_by.port = transport->external_signaling_port;
}
} }
} }

@ -1487,10 +1487,11 @@ static void change_outgoing_sdp_stream_media_address(pjsip_tx_data *tdata, struc
ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID); ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID);
/* Is the address within the SDP inside the same network? */ /* 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; 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); pj_strdup2(tdata->pool, &stream->conn->addr, transport->external_media_address);
} }

@ -3126,7 +3126,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_copy_pj_str(host, &sdp->conn->addr, sizeof(host));
ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID); 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); 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); ast_sockaddr_parse(&addr, host, PARSE_PORT_FORBID);
/* Is the address within the SDP inside the same network? */ /* 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; 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); pj_strdup2(tdata->pool, &stream->conn->addr, transport->external_media_address);
} }

Loading…
Cancel
Save