]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
a little more cleanup
authorMichael Jerris <mike@jerris.com>
Sat, 4 Oct 2008 06:35:32 +0000 (06:35 +0000)
committerMichael Jerris <mike@jerris.com>
Sat, 4 Oct 2008 06:35:32 +0000 (06:35 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9824 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_managed/freeswitch_managed.h
src/mod/languages/mod_managed/mod_managed.cpp

index 9f5ff2b742d9518c3db5e03e19d6d56a2ae96c81..b1be25e3148e6db44e84e3f3473ea651e25e0f40 100644 (file)
@@ -41,19 +41,21 @@ SWITCH_BEGIN_EXTERN_C
 typedef void (*hangupFunction)(void);\r
 typedef char* (*inputFunction)(void*, switch_input_type_t);\r
 \r
-#ifdef _MANAGED\r
-#define ATTACH_THREADS\r
-#else\r
+#ifndef _MANAGED\r
 #include <glib.h>\r
 #include <mono/jit/jit.h>\r
 #include <mono/metadata/assembly.h>\r
+#include <mono/metadata/environment.h>\r
 #include <mono/metadata/threads.h>\r
+#include <mono/metadata/debug-helpers.h>\r
+#endif\r
 \r
 #ifndef SWIG\r
-struct mod_mono_globals {\r
+struct mod_managed_globals {\r
+       switch_memory_pool_t *pool;\r
+#ifndef _MANAGED\r
        MonoDomain *domain;\r
        MonoAssembly *mod_mono_asm;\r
-       switch_memory_pool_t *pool;\r
        switch_bool_t embedded;\r
 \r
        MonoMethod *loadMethod;\r
@@ -61,11 +63,15 @@ struct mod_mono_globals {
        MonoMethod *runMethod;\r
        MonoMethod *executeMethod;\r
        MonoMethod *executeBackgroundMethod;\r
+#endif\r
 };\r
-\r
-typedef struct mod_mono_globals mod_mono_globals;\r
-extern mod_mono_globals globals;\r
+typedef struct mod_managed_globals mod_managed_globals;\r
+extern mod_managed_globals globals;\r
 #endif\r
+\r
+#ifdef _MANAGED\r
+#define ATTACH_THREADS\r
+#else\r
 #define ATTACH_THREADS mono_thread_attach(globals.domain);\r
 #endif\r
 \r
index 8425d3db70bf3308e9a4370248261951ea2490b3..d38e55b36409508da460d9657ddd7b603f81fb8b 100644 (file)
 \r
 #include <switch.h>\r
 \r
-SWITCH_BEGIN_EXTERN_C \r
 #include "freeswitch_managed.h" \r
 \r
+#ifdef _MANAGED\r
+#include <mscoree.h>\r
+using namespace System;\r
+using namespace System::Runtime::InteropServices;\r
+#endif\r
+\r
+SWITCH_BEGIN_EXTERN_C \r
+\r
 SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load);\r
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_managed_shutdown);\r
 SWITCH_MODULE_DEFINITION(mod_managed, mod_managed_load, mod_managed_shutdown, NULL);\r
@@ -47,36 +54,16 @@ SWITCH_STANDARD_API(managedrun_api_function);       /* ExecuteBackground */
 SWITCH_STANDARD_API(managed_api_function);     /* Execute */\r
 SWITCH_STANDARD_APP(managed_app_function);     /* Run */\r
 \r
-SWITCH_END_EXTERN_C\r
+#define MOD_MANAGED_ASM_NAME "mod_managed_lib"\r
+#define MOD_MANAGED_ASM_V1 1\r
+#define MOD_MANAGED_ASM_V2 0\r
+#define MOD_MANAGED_ASM_V3 0\r
+#define MOD_MANAGED_ASM_V4 0\r
+#define MOD_MANAGED_DLL MOD_MANAGED_ASM_NAME ".dll"\r
 \r
-#define MOD_MANAGED_DLL "mod_managed_lib.dll"\r
+mod_managed_globals globals = { 0 };\r
 \r
 #ifndef _MANAGED       \r
-       \r
-SWITCH_BEGIN_EXTERN_C \r
-\r
-#include <glib.h>\r
-#include <mono/jit/jit.h>\r
-#include <mono/metadata/assembly.h>\r
-#include <mono/metadata/environment.h>\r
-#include <mono/metadata/threads.h>\r
-#include <mono/metadata/debug-helpers.h>\r
-       \r
-#ifdef WIN32\r
-#include <shlobj.h>\r
-#define EXPORT __declspec(dllexport)\r
-#else\r
-#define EXPORT \r
-#endif \r
-\r
-#define MOD_MONO_MANAGED_ASM_NAME "mod_managed_lib"\r
-#define MOD_MONO_MANAGED_ASM_V1 1\r
-#define MOD_MONO_MANAGED_ASM_V2 0\r
-#define MOD_MONO_MANAGED_ASM_V3 0\r
-#define MOD_MONO_MANAGED_ASM_V4 0\r
-\r
-mod_mono_globals globals = \r
-{ 0 };\r
 \r
 // Sets up delegates (and anything else needed) on the ManagedSession object\r
 // Called via internalcall\r
@@ -92,6 +79,10 @@ SWITCH_MOD_DECLARE(void) InitManagedSession(ManagedSession * session, inputFunct
        session->hangupDelegate = hangupDelegate;\r
 }\r
 \r
+#ifdef WIN32\r
+#include <shlobj.h>\r
+#endif \r
+\r
 switch_status_t setMonoDirs() \r
 {\r
 #ifdef WIN32   \r
@@ -187,11 +178,11 @@ switch_status_t loadModMonoManaged()
 \r
        /* Already loaded? */\r
        MonoAssemblyName name;\r
-       name.name = MOD_MONO_MANAGED_ASM_NAME;\r
-       name.major = MOD_MONO_MANAGED_ASM_V1;\r
-       name.minor = MOD_MONO_MANAGED_ASM_V2;\r
-       name.revision = MOD_MONO_MANAGED_ASM_V3;\r
-       name.build = MOD_MONO_MANAGED_ASM_V4;\r
+       name.name = MOD_MANAGED_ASM_NAME;\r
+       name.major = MOD_MANAGED_ASM_V1;\r
+       name.minor = MOD_MANAGED_ASM_V2;\r
+       name.revision = MOD_MANAGED_ASM_V3;\r
+       name.build = MOD_MANAGED_ASM_V4;\r
        name.culture = "";\r
        name.hash_value = "";\r
 \r
@@ -313,116 +304,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load)
        return SWITCH_STATUS_SUCCESS;\r
 }\r
 \r
-SWITCH_STANDARD_API(managedrun_api_function) \r
-{\r
-       // TODO: Should we be detaching after all this?\r
-       mono_thread_attach(globals.domain);\r
-\r
-       if (switch_strlen_zero(cmd)) {\r
-               stream->write_function(stream, "-ERR no args specified!\n");\r
-               return SWITCH_STATUS_SUCCESS;\r
-       }\r
-\r
-       // ExecuteBackground(string command)\r
-       void *args[1];\r
-\r
-       args[0] = mono_string_new(globals.domain, cmd);\r
-       MonoObject * exception = NULL;\r
-       MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception);\r
-\r
-       if (exception) {\r
-               stream->write_function(stream, "-ERR FreeSWITCH.Loader.ExecuteBackground threw an exception.\n");\r
-               mono_print_unhandled_exception(exception);\r
-               return SWITCH_STATUS_SUCCESS;\r
-       }\r
-\r
-       if (*(int *) mono_object_unbox(objResult)) {\r
-               stream->write_function(stream, "+OK\n");\r
-       } else {\r
-               stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module?).\n");\r
-       }\r
-\r
-       return SWITCH_STATUS_SUCCESS;\r
-}\r
-\r
-SWITCH_STANDARD_API(managed_api_function) \r
-{\r
-       mono_thread_attach(globals.domain);\r
-\r
-       if (switch_strlen_zero(cmd)) {\r
-               stream->write_function(stream, "-ERR no args specified!\n");\r
-               return SWITCH_STATUS_SUCCESS;\r
-       }\r
-\r
-       // Method is: Execute(string command, IntPtr streamPtr, IntPtr eventPtr)\r
-       void *args[3];\r
-\r
-       args[0] = mono_string_new(globals.domain, cmd);\r
-       args[1] = &stream;                      // Address of the arguments\r
-       args[2] = &(stream->param_event);\r
-\r
-       MonoObject * exception = NULL;\r
-       MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception);\r
-\r
-       if (exception) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute mono %s.\n", cmd);\r
-               mono_print_unhandled_exception(exception);\r
-       }\r
-\r
-       if (!(*(int *) mono_object_unbox(objResult))) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module?).\n", cmd);\r
-       }\r
-\r
-       return SWITCH_STATUS_SUCCESS;\r
-}\r
-\r
-SWITCH_STANDARD_APP(managed_app_function) \r
-{\r
-       mono_thread_attach(globals.domain);\r
-\r
-       if (switch_strlen_zero(data)) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No args specified!\n");\r
-       }\r
-\r
-       // bool Run(string command, IntPtr sessionHandle)\r
-       void *args[2];\r
-\r
-       args[0] = mono_string_new(globals.domain, data);\r
-       args[1] = &session;\r
-\r
-       MonoObject * exception = NULL;\r
-       MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception);\r
-\r
-       if (exception) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute application mono %s.\n", data);\r
-               mono_print_unhandled_exception(exception);\r
-       }\r
-\r
-       if (!(*(int *) mono_object_unbox(objResult))) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module?).\n", data);\r
-       }\r
-} \r
-\r
-SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_managed_shutdown) \r
-{\r
-       MonoObject * ex;\r
-\r
-       mono_thread_attach(globals.domain);\r
-       mono_runtime_invoke(globals.unloadMethod, NULL, NULL, &ex);\r
-\r
-       if (ex) {\r
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception occurred in Loader::Unload.\n");\r
-               mono_print_unhandled_exception(ex);\r
-       }\r
-\r
-       if (!globals.embedded) {\r
-               mono_jit_cleanup(globals.domain);\r
-       }\r
-\r
-       return SWITCH_STATUS_SUCCESS;\r
-}\r
-\r
-SWITCH_END_EXTERN_C\r
 #endif\r
 \r
 /**********************************************************\r
@@ -430,23 +311,6 @@ SWITCH_END_EXTERN_C
 **********************************************************/\r
 \r
 #ifdef _MANAGED\r
-\r
-#include <mscoree.h>\r
-\r
-using namespace System;\r
-using namespace System::Runtime::InteropServices;\r
-\r
-SWITCH_BEGIN_EXTERN_C \r
-\r
-struct dotnet_conf_t {\r
-    switch_memory_pool_t *pool;\r
-    //ICLRRuntimeHost *pCorRuntime;\r
-    //HMODULE lock_module;\r
-       //OSVERSIONINFO osver;\r
-    //char *cor_version;\r
-} globals;\r
-\r
-\r
 // Sets up delegates (and anything else needed) on the ManagedSession object\r
 // Called from ManagedSession.Initialize Managed -> this is Unmanaged code so all pointers are marshalled and prevented from GC\r
 // Exported method.\r
@@ -543,15 +407,16 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load)
        SWITCH_ADD_APP(app_interface, "managed", "Run CLI App", "Run an App on a channel", managed_app_function, "<modulename> [<args>]", SAF_NONE);\r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
-\r
+#endif\r
 \r
 SWITCH_STANDARD_API(managedrun_api_function) \r
 {\r
+       int success;\r
        if (switch_strlen_zero(cmd)) {\r
                stream->write_function(stream, "-ERR no args specified!\n");    \r
                return SWITCH_STATUS_SUCCESS;\r
        }\r
-\r
+#ifdef _MANAGED\r
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::executeBackgroundMethod->Invoke(nullptr, gcnew array<Object^> { gcnew String(cmd) } );\r
@@ -563,22 +428,40 @@ SWITCH_STANDARD_API(managedrun_api_function)
                Marshal::FreeHGlobal(msg);\r
                return SWITCH_STATUS_FALSE;\r
        }\r
+       success = *reinterpret_cast<bool^>(objResult);\r
+#else\r
+       mono_thread_attach(globals.domain);\r
+       void *args[1];\r
 \r
-       if (*reinterpret_cast<bool^>(objResult)) {\r
+       args[0] = mono_string_new(globals.domain, cmd);\r
+       MonoObject * exception = NULL;\r
+       MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception);\r
+\r
+       if (exception) {\r
+               stream->write_function(stream, "-ERR FreeSWITCH.Loader.ExecuteBackground threw an exception.\n");\r
+               mono_print_unhandled_exception(exception);\r
+               return SWITCH_STATUS_SUCCESS;\r
+       }\r
+       success = *(int *) mono_object_unbox(objResult);\r
+#endif\r
+       if (success) {\r
                stream->write_function(stream, "+OK\n");\r
        } else {        \r
                stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module?).\n");\r
        }\r
+\r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
 \r
+\r
 SWITCH_STANDARD_API(managed_api_function) \r
 {\r
+       int success;\r
        if (switch_strlen_zero(cmd)) {\r
                stream->write_function(stream, "-ERR no args specified!\n");    \r
                return SWITCH_STATUS_SUCCESS;\r
        }\r
-       \r
+#ifdef _MANAGED\r
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::executeMethod->Invoke(nullptr, gcnew array<Object^>{gcnew String(cmd),gcnew IntPtr(stream), gcnew IntPtr(stream->param_event)});\r
@@ -589,20 +472,38 @@ SWITCH_STANDARD_API(managed_api_function)
                Marshal::FreeHGlobal(msg);\r
                return SWITCH_STATUS_FALSE;\r
        }\r
-       \r
-       if (!*reinterpret_cast<bool^>(objResult)) {\r
+       success = *reinterpret_cast<bool^>(objResult);\r
+#else\r
+       mono_thread_attach(globals.domain);\r
+       void *args[3];\r
+\r
+       args[0] = mono_string_new(globals.domain, cmd);\r
+       args[1] = &stream;                      // Address of the arguments\r
+       args[2] = &(stream->param_event);\r
+\r
+       MonoObject * exception = NULL;\r
+       MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception);\r
+\r
+       if (exception) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute mono %s.\n", cmd);\r
+               mono_print_unhandled_exception(exception);\r
+       }\r
+       success = *(int *) mono_object_unbox(objResult);\r
+#endif\r
+       if (!success) {\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module?).\n", cmd);\r
        }\r
-       \r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
 \r
+\r
 SWITCH_STANDARD_APP(managed_app_function) \r
 {\r
+       int success;\r
        if (switch_strlen_zero(data)) {\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No args specified!\n");\r
        }\r
-       \r
+#ifdef _MANAGED\r
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::runMethod->Invoke(nullptr, gcnew array<Object^>{gcnew String(data),gcnew IntPtr(session)});\r
@@ -614,8 +515,24 @@ SWITCH_STANDARD_APP(managed_app_function)
                Marshal::FreeHGlobal(msg);\r
                return;\r
        }\r
-       \r
-       if (!*reinterpret_cast<bool^>(objResult)) {     \r
+       success = *reinterpret_cast<bool^>(objResult);\r
+#else\r
+       mono_thread_attach(globals.domain);\r
+       void *args[2];\r
+\r
+       args[0] = mono_string_new(globals.domain, data);\r
+       args[1] = &session;\r
+\r
+       MonoObject * exception = NULL;\r
+       MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception);\r
+\r
+       if (exception) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute application mono %s.\n", data);\r
+               mono_print_unhandled_exception(exception);\r
+       }\r
+       success = *(int *) mono_object_unbox(objResult);\r
+#endif\r
+       if (!success) {\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module?).\n", data);\r
        }\r
 }\r
@@ -623,6 +540,7 @@ SWITCH_STANDARD_APP(managed_app_function)
 \r
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_managed_shutdown) \r
 {\r
+#ifdef _MANAGED\r
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::unloadMethod->Invoke(nullptr, nullptr);\r
@@ -634,9 +552,22 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_managed_shutdown)
                Marshal::FreeHGlobal(msg);\r
                return SWITCH_STATUS_FALSE;;\r
        }\r
+#else\r
+       MonoObject * ex;\r
+\r
+       mono_thread_attach(globals.domain);\r
+       mono_runtime_invoke(globals.unloadMethod, NULL, NULL, &ex);\r
+\r
+       if (ex) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception occurred in Loader::Unload.\n");\r
+               mono_print_unhandled_exception(ex);\r
+       }\r
+\r
+       if (!globals.embedded) {\r
+               mono_jit_cleanup(globals.domain);\r
+       }\r
+#endif\r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
 \r
 SWITCH_END_EXTERN_C\r
-\r
-#endif
\ No newline at end of file