static void mrcp_sofia_on_session_ready( int status, mrcp_sofia_agent_t *sofia_agent, nua_handle_t *nh, mrcp_sofia_session_t *sofia_session, sip_t const *sip, tagi_t tags[]) { const char *local_sdp_str = NULL, *remote_sdp_str = NULL; mrcp_session_descriptor_t *descriptor = NULL; tl_gets(tags, SOATAG_LOCAL_SDP_STR_REF(local_sdp_str), SOATAG_REMOTE_SDP_STR_REF(remote_sdp_str), TAG_END()); if(remote_sdp_str) { sdp_parser_t *parser = NULL; sdp_session_t *sdp = NULL; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Remote SDP\n%s", remote_sdp_str); parser = sdp_parse(sofia_session->home,remote_sdp_str,(int)strlen(remote_sdp_str),0); sdp = sdp_session(parser); descriptor = mrcp_descriptor_generate_by_sdp_session(sdp,sofia_session->session->pool); sdp_parser_free(parser); } mrcp_session_answer(sofia_session->session,descriptor); }
static void mrcp_sofia_on_call_receive(mrcp_sofia_agent_t *sofia_agent, nua_handle_t *nh, mrcp_sofia_session_t *sofia_session, sip_t const *sip, tagi_t tags[]) { int offer_recv = 0, answer_recv = 0, offer_sent = 0, answer_sent = 0; const char *local_sdp_str = NULL, *remote_sdp_str = NULL; mrcp_session_descriptor_t *descriptor = NULL; tl_gets(tags, NUTAG_OFFER_RECV_REF(offer_recv), NUTAG_ANSWER_RECV_REF(answer_recv), NUTAG_OFFER_SENT_REF(offer_sent), NUTAG_ANSWER_SENT_REF(answer_sent), SOATAG_LOCAL_SDP_STR_REF(local_sdp_str), SOATAG_REMOTE_SDP_STR_REF(remote_sdp_str), TAG_END()); if(!sofia_session) { sofia_session = mrcp_sofia_session_create(sofia_agent,nh); if(!sofia_session) { nua_respond(nh, SIP_488_NOT_ACCEPTABLE, TAG_END()); return; } } if(remote_sdp_str) { sdp_parser_t *parser = NULL; sdp_session_t *sdp = NULL; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Remote SDP\n%s", remote_sdp_str); parser = sdp_parse(sofia_session->home,remote_sdp_str,(int)strlen(remote_sdp_str),0); sdp = sdp_session(parser); descriptor = mrcp_descriptor_generate_by_sdp_session(sdp,NULL,sofia_session->session->pool); sdp_parser_free(parser); } if(!descriptor) { nua_respond(nh, SIP_400_BAD_REQUEST, TAG_END()); return; } mrcp_session_offer(sofia_session->session,descriptor); }
static void mrcp_sofia_on_session_ready( int status, mrcp_sofia_agent_t *sofia_agent, nua_handle_t *nh, mrcp_sofia_session_t *sofia_session, sip_t const *sip, tagi_t tags[]) { mrcp_session_t *session = sofia_session->session; if(session) { const char *local_sdp_str = NULL, *remote_sdp_str = NULL; mrcp_session_descriptor_t *descriptor = NULL; tl_gets(tags, SOATAG_LOCAL_SDP_STR_REF(local_sdp_str), SOATAG_REMOTE_SDP_STR_REF(remote_sdp_str), TAG_END()); if(remote_sdp_str) { sdp_parser_t *parser = NULL; sdp_session_t *sdp = NULL; const char *force_destination_ip = NULL; apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Remote SDP "APT_NAMESID_FMT"\n%s", session->name, MRCP_SESSION_SID(session), remote_sdp_str); parser = sdp_parse(sofia_session->home,remote_sdp_str,(int)strlen(remote_sdp_str),0); sdp = sdp_session(parser); if(sofia_session->sip_settings->force_destination == TRUE) { force_destination_ip = sofia_session->sip_settings->server_ip; } descriptor = mrcp_descriptor_generate_by_sdp_session(sdp,force_destination_ip,session->pool); sdp_parser_free(parser); } mrcp_session_answer(session,descriptor); } }