@ -45,6 +45,9 @@
# define SDP_HANDLER_BUCKETS 11
# define SDP_HANDLER_BUCKETS 11
# define MOD_DATA_ON_RESPONSE "on_response"
# define MOD_DATA_NAT_HOOK "nat_hook"
/* Some forward declarations */
/* Some forward declarations */
static void handle_incoming_request ( struct ast_sip_session * session , pjsip_rx_data * rdata ) ;
static void handle_incoming_request ( struct ast_sip_session * session , pjsip_rx_data * rdata ) ;
static void handle_incoming_response ( struct ast_sip_session * session , pjsip_rx_data * rdata ) ;
static void handle_incoming_response ( struct ast_sip_session * session , pjsip_rx_data * rdata ) ;
@ -925,7 +928,9 @@ void ast_sip_session_send_request_with_cb(struct ast_sip_session *session, pjsip
return ;
return ;
}
}
tdata - > mod_data [ session_module . id ] = on_response ;
ast_sip_mod_data_set ( tdata - > pool , tdata - > mod_data , session_module . id ,
MOD_DATA_ON_RESPONSE , on_response ) ;
handle_outgoing_request ( session , tdata ) ;
handle_outgoing_request ( session , tdata ) ;
pjsip_inv_send_msg ( session - > inv_session , tdata ) ;
pjsip_inv_send_msg ( session - > inv_session , tdata ) ;
return ;
return ;
@ -1850,6 +1855,7 @@ static void session_inv_on_new_session(pjsip_inv_session *inv, pjsip_event *e)
static void session_inv_on_tsx_state_changed ( pjsip_inv_session * inv , pjsip_transaction * tsx , pjsip_event * e )
static void session_inv_on_tsx_state_changed ( pjsip_inv_session * inv , pjsip_transaction * tsx , pjsip_event * e )
{
{
ast_sip_session_response_cb cb ;
struct ast_sip_session * session = inv - > mod_data [ session_module . id ] ;
struct ast_sip_session * session = inv - > mod_data [ session_module . id ] ;
print_debug_details ( inv , tsx , e ) ;
print_debug_details ( inv , tsx , e ) ;
if ( ! session ) {
if ( ! session ) {
@ -1904,8 +1910,8 @@ static void session_inv_on_tsx_state_changed(pjsip_inv_session *inv, pjsip_trans
handle_incoming_request ( session , e - > body . tsx_state . src . rdata ) ;
handle_incoming_request ( session , e - > body . tsx_state . src . rdata ) ;
}
}
}
}
if ( tsx - > mod_data [session_module . id ] ) {
if ( ( cb = ast_sip_mod_data_get ( tsx - > mod_data , session_module . id ,
ast_sip_session_response_cb cb = tsx - > mod_data [ session_module . id ] ;
MOD_DATA_ON_RESPONSE ) ) ) {
cb ( session , e - > body . tsx_state . src . rdata ) ;
cb ( session , e - > body . tsx_state . src . rdata ) ;
}
}
case PJSIP_EVENT_TRANSPORT_ERROR :
case PJSIP_EVENT_TRANSPORT_ERROR :
@ -2073,7 +2079,8 @@ static pjsip_inv_callback inv_callback = {
/*! \brief Hook for modifying outgoing messages with SDP to contain the proper address information */
/*! \brief Hook for modifying outgoing messages with SDP to contain the proper address information */
static void session_outgoing_nat_hook ( pjsip_tx_data * tdata , struct ast_sip_transport * transport )
static void session_outgoing_nat_hook ( pjsip_tx_data * tdata , struct ast_sip_transport * transport )
{
{
struct ast_sip_nat_hook * hook = tdata - > mod_data [ session_module . id ] ;
struct ast_sip_nat_hook * hook = ast_sip_mod_data_get (
tdata - > mod_data , session_module . id , MOD_DATA_NAT_HOOK ) ;
struct pjmedia_sdp_session * sdp ;
struct pjmedia_sdp_session * sdp ;
int stream ;
int stream ;
@ -2107,7 +2114,7 @@ static void session_outgoing_nat_hook(pjsip_tx_data *tdata, struct ast_sip_trans
}
}
/* We purposely do this so that the hook will not be invoked multiple times, ie: if a retransmit occurs */
/* We purposely do this so that the hook will not be invoked multiple times, ie: if a retransmit occurs */
tdata - > mod_data [session_module . id ] = nat_hook ;
ast_sip_mod_data_set ( tdata - > pool , tdata - > mod_data , session_module . id , MOD_DATA_NAT_HOOK , nat_hook ) ;
}
}
static int load_module ( void )
static int load_module ( void )