@ -2148,12 +2148,29 @@ static int new_invite(void *data)
goto end ;
} ;
if ( ( sdp_info = pjsip_rdata_get_sdp_info ( invite - > rdata ) ) & & ( sdp_info - > sdp_err = = PJ_SUCCESS ) & & sdp_info - > sdp ) {
pjsip_timer_setting_default ( & timer ) ;
timer . min_se = invite - > session - > endpoint - > extensions . timer . min_se ;
timer . sess_expires = invite - > session - > endpoint - > extensions . timer . sess_expires ;
pjsip_timer_init_session ( invite - > session - > inv_session , & timer ) ;
/*
* At this point , we ' ve verified what we can that won ' t take awhile ,
* so let ' s go ahead and send a 100 Trying out to stop any
* retransmissions .
*/
if ( pjsip_inv_initial_answer ( invite - > session - > inv_session , invite - > rdata , 100 , NULL , NULL , & tdata ) ! = PJ_SUCCESS ) {
pjsip_inv_terminate ( invite - > session - > inv_session , 500 , PJ_TRUE ) ;
goto end ;
}
ast_sip_session_send_response ( invite - > session , tdata ) ;
sdp_info = pjsip_rdata_get_sdp_info ( invite - > rdata ) ;
if ( sdp_info & & ( sdp_info - > sdp_err = = PJ_SUCCESS ) & & sdp_info - > sdp ) {
if ( handle_incoming_sdp ( invite - > session , sdp_info - > sdp ) ) {
if ( pjsip_inv_initial_answer ( invite - > session - > inv_session , invite - > rdata , 488 , NULL , NULL , & tdata ) = = PJ_SUCCESS ) {
tdata = NULL ;
if ( pjsip_inv_end_session ( invite - > session - > inv_session , 488 , NULL , & tdata ) = = PJ_SUCCESS
& & tdata ) {
ast_sip_session_send_response ( invite - > session , tdata ) ;
} else {
pjsip_inv_terminate ( invite - > session - > inv_session , 488 , PJ_TRUE ) ;
}
goto end ;
}
@ -2166,31 +2183,19 @@ static int new_invite(void *data)
/* If we were unable to create a local SDP terminate the session early, it won't go anywhere */
if ( ! local ) {
if ( pjsip_inv_initial_answer ( invite - > session - > inv_session , invite - > rdata , 500 , NULL , NULL , & tdata ) = = PJ_SUCCESS ) {
tdata = NULL ;
if ( pjsip_inv_end_session ( invite - > session - > inv_session , 500 , NULL , & tdata ) = = PJ_SUCCESS
& & tdata ) {
ast_sip_session_send_response ( invite - > session , tdata ) ;
} else {
pjsip_inv_terminate ( invite - > session - > inv_session , 500 , PJ_TRUE ) ;
}
goto end ;
} else {
pjsip_inv_set_local_sdp ( invite - > session - > inv_session , local ) ;
pjmedia_sdp_neg_set_prefer_remote_codec_order ( invite - > session - > inv_session - > neg , PJ_FALSE ) ;
# ifdef PJMEDIA_SDP_NEG_ANSWER_MULTIPLE_CODECS
pjmedia_sdp_neg_set_answer_multiple_codecs ( invite - > session - > inv_session - > neg , PJ_TRUE ) ;
# endif
}
pjsip_timer_setting_default ( & timer ) ;
timer . min_se = invite - > session - > endpoint - > extensions . timer . min_se ;
timer . sess_expires = invite - > session - > endpoint - > extensions . timer . sess_expires ;
pjsip_timer_init_session ( invite - > session - > inv_session , & timer ) ;
/* At this point, we've verified what we can, so let's go ahead and send a 100 Trying out */
if ( pjsip_inv_initial_answer ( invite - > session - > inv_session , invite - > rdata , 100 , NULL , NULL , & tdata ) ! = PJ_SUCCESS ) {
pjsip_inv_terminate ( invite - > session - > inv_session , 500 , PJ_TRUE ) ;
goto end ;
}
ast_sip_session_send_response ( invite - > session , tdata ) ;
pjsip_inv_set_local_sdp ( invite - > session - > inv_session , local ) ;
pjmedia_sdp_neg_set_prefer_remote_codec_order ( invite - > session - > inv_session - > neg , PJ_FALSE ) ;
# ifdef PJMEDIA_SDP_NEG_ANSWER_MULTIPLE_CODECS
pjmedia_sdp_neg_set_answer_multiple_codecs ( invite - > session - > inv_session - > neg , PJ_TRUE ) ;
# endif
handle_incoming_request ( invite - > session , invite - > rdata ) ;