@ -262,18 +262,18 @@ 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_parse ( & addr , tdata - > tp_info . dst_name , PARSE_PORT_FORBID ) ;
ast_sockaddr_set_port ( & addr , tdata - > tp_info . dst_port ) ;
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 ) {
ast_debug ( 5 , " Request is being sent to local address, skipping NAT manipulation \n " ) ;
return PJ_SUCCESS ;
return PJ_SUCCESS ;
}
}
}
if ( ! ast_sockaddr_isnull ( & transport_state - > external_address ) ) {
/* Update the contact header with the external address */
/* Update the contact header with the external address */
if ( uri | | ( uri = nat_get_contact_sip_uri ( tdata ) ) ) {
if ( uri | | ( uri = nat_get_contact_sip_uri ( tdata ) ) ) {
pj_strdup2 ( tdata - > pool , & uri - > host , ast_sockaddr_stringify_host ( & transport_state - > external_address ) ) ;
pj_strdup2 ( tdata - > pool , & uri - > host , ast_sockaddr_stringify_host ( & transport_state - > external_address ) ) ;
@ -290,6 +290,7 @@ static pj_status_t nat_on_tx_message(pjsip_tx_data *tdata)
via - > sent_by . port = transport - > external_signaling_port ;
via - > sent_by . port = transport - > external_signaling_port ;
}
}
}
}
}
/* Invoke any additional hooks that may be registered */
/* Invoke any additional hooks that may be registered */
if ( ( hooks = ast_sorcery_retrieve_by_fields ( ast_sip_get_sorcery ( ) , " nat_hook " , AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL , NULL ) ) ) {
if ( ( hooks = ast_sorcery_retrieve_by_fields ( ast_sip_get_sorcery ( ) , " nat_hook " , AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL , NULL ) ) ) {