/** Process MPF response */ static apt_bool_t mpf_suite_response_process(mpf_suite_engine_t *suite_engine, const mpf_message_t *mpf_message) { mpf_task_msg_t *task_msg = NULL; apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Process MPF Response"); if(mpf_message->command_id == MPF_ADD_TERMINATION) { apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"On Add Termination"); if(mpf_message->termination) { mpf_suite_session_t *session; session = mpf_termination_object_get(mpf_message->termination); if(session->termination2 == mpf_message->termination && session->rtp_mode == TRUE) { void *descriptor = mpf_rtp_remote_descriptor_create(session); mpf_engine_termination_message_add( suite_engine->engine, MPF_MODIFY_TERMINATION,session->context,session->termination2,descriptor, &task_msg); } } } else if(mpf_message->command_id == MPF_SUBTRACT_TERMINATION) { apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"On Subtract Termination"); if(mpf_message->termination) { mpf_suite_session_t *session; session = mpf_termination_object_get(mpf_message->termination); if(session->termination1 == mpf_message->termination) { session->termination1 = NULL; } if(session->termination2 == mpf_message->termination) { session->termination2 = NULL; } mpf_termination_destroy(mpf_message->termination); if(!session->termination1 && !session->termination2) { mpf_engine_context_destroy(session->context); session->context = NULL; apr_pool_destroy(session->pool); apr_thread_mutex_lock(suite_engine->wait_object_mutex); apr_thread_cond_signal(suite_engine->wait_object); apr_thread_mutex_unlock(suite_engine->wait_object_mutex); } } } return mpf_engine_message_send(suite_engine->engine,&task_msg); }
static void mpf_suite_session_destroy(mpf_suite_agent_t *agent, mpf_suite_session_t* session) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Destroy MPF Context"); mpf_engine_context_destroy(session->context); session->context = NULL; if(agent->rx_session == session) { agent->rx_session = NULL; } else if(agent->tx_session == session) { agent->tx_session = NULL; } apr_pool_destroy(session->pool); if(!agent->tx_session && !agent->rx_session) { apr_thread_mutex_lock(agent->wait_object_mutex); apr_thread_cond_signal(agent->wait_object); apr_thread_mutex_unlock(agent->wait_object_mutex); } }