コード例 #1
0
ファイル: mpf_suite.c プロジェクト: Jared-Prime/UniMRCP
/** 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);
}
コード例 #2
0
ファイル: mpf_suite.c プロジェクト: bitbluesky/unimrcp
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);
	}
}