/* * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - mod_managed * Copyright (C) 2008, Michael Giagnocavo * * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - mod_managed * * The Initial Developer of the Original Code is * Michael Giagnocavo * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Michael Giagnocavo * Jeff Lenk - Modified class to support Dotnet * * freeswitch_managed.cpp -- Managed CoreSession subclasses * */ #include #include #include "freeswitch_managed.h" #ifdef _MANAGED #pragma unmanaged #endif ManagedSession::ManagedSession():CoreSession() { } ManagedSession::ManagedSession(char *uuid):CoreSession(uuid) { } ManagedSession::ManagedSession(switch_core_session_t *session):CoreSession(session) { } bool ManagedSession::begin_allow_threads() { return true; } bool ManagedSession::end_allow_threads() { return true; } ManagedSession::~ManagedSession() { ATTACH_THREADS // Do auto-hangup ourselves because CoreSession can't call check_hangup_hook // after ManagedSession destruction (cause at point it's pure virtual) if (session) { if (switch_test_flag(this, S_HUP) && !switch_channel_test_flag(channel, CF_TRANSFER)) { switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); setAutoHangup(0); } // Don't let any callbacks use this CoreSession anymore switch_channel_set_private(channel, "CoreSession", NULL); } } void ManagedSession::check_hangup_hook() { ATTACH_THREADS if (!hangupDelegate) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "hangupDelegate is null."); return; } hangupDelegate(); } switch_status_t ManagedSession::run_dtmf_callback(void *input, switch_input_type_t itype) { ATTACH_THREADS if (!dtmfDelegate) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "dtmfDelegate is null."); return SWITCH_STATUS_FALSE;; } char *result = dtmfDelegate(input, itype); switch_status_t status = process_callback_result(result); RESULT_FREE(result); return status; } static switch_status_t stateHangupHandler(switch_core_session_t *session) { return SWITCH_STATUS_FALSE; }