]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
cleanup
authorMichael Jerris <mike@jerris.com>
Mon, 15 Sep 2008 20:30:57 +0000 (20:30 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 15 Sep 2008 20:30:57 +0000 (20:30 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9570 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_mono/mod_mono.cpp

index 2c3447c7b08bb7722b6067f7b652789e91a5c22e..e9ed68abc992ccb8df1015810ed09e5d0f41a182 100644 (file)
@@ -34,7 +34,6 @@
        \r
 #include <switch.h>\r
        \r
-\r
 SWITCH_BEGIN_EXTERN_C \r
  \r
 #include "freeswitch_mono.h"\r
@@ -50,27 +49,19 @@ SWITCH_BEGIN_EXTERN_C
 #define EXPORT __declspec(dllexport)\r
 #elif\r
 #define EXPORT \r
-#endif /* \r
- */\r
-       \r
+#endif \r
+\r
 #define MOD_MONO_MANAGED_DLL "mod_mono_managed.dll"\r
        \r
-mod_mono_globals globals = {\r
-0};\r
-\r
-\r
+mod_mono_globals globals = \r
+{ 0 };\r
 \r
 SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load);\r
-\r
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown);\r
-\r
 SWITCH_MODULE_DEFINITION(mod_mono, mod_mono_load, mod_mono_shutdown, NULL);\r
 \r
-\r
 SWITCH_STANDARD_API(monorun_api_function);     /* ExecuteBackground */\r
-\r
 SWITCH_STANDARD_API(mono_api_function);        /* Execute */\r
-\r
 SWITCH_STANDARD_APP(mono_app_function);        /* Run */\r
 \r
 \r
@@ -88,451 +79,292 @@ SWITCH_MOD_DECLARE(void) InitMonoSession(MonoSession * session, MonoObject * dtm
        session->hangupDelegateHandle = mono_gchandle_new(hangupDelegate, FALSE);\r
 }\r
 \r
-\r
 switch_status_t setMonoDirs() \r
 {\r
-       \r
 #ifdef WIN32   \r
-               /* Win32 Mono installs can't figure out their own path\r
-                  // Guys in #mono say we should just deploy all the libs we need\r
-                  // I think it's much nicer to let the user deal with installing Mono\r
-                  // and we'll just look for it in program files. */ \r
-               HANDLE hFind;\r
-       \r
-WIN32_FIND_DATA findData;\r
-       \r
-char progFilesPath[MAX_PATH];\r
-       \r
-char findPath[MAX_PATH];\r
-       \r
-SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, progFilesPath);\r
-       \r
-switch_snprintf(findPath, MAX_PATH, "%s\\Mono-*", progFilesPath);\r
-       \r
-hFind = FindFirstFile(findPath, &findData);\r
-       \r
-if (hFind == INVALID_HANDLE_VALUE) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error looking for Mono in Program Files.\n");\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
-while ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) {\r
-               \r
-if (FindNextFile(hFind, &findData) == 0) {\r
-                       \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find Mono directory in Program Files.\n");\r
-                       \r
-FindClose(hFind);\r
-                       \r
-return SWITCH_STATUS_FALSE;\r
-               \r
-}\r
-       \r
-}\r
-       \r
-               /* Got it */ \r
+       /* Win32 Mono installs can't figure out their own path\r
+       // Guys in #mono say we should just deploy all the libs we need\r
+       // I think it's much nicer to let the user deal with installing Mono\r
+       // and we'll just look for it in program files. */ \r
+       HANDLE hFind;\r
+       WIN32_FIND_DATA findData;\r
+       char progFilesPath[MAX_PATH];\r
+       char findPath[MAX_PATH];\r
+\r
+       SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, progFilesPath);\r
+       switch_snprintf(findPath, MAX_PATH, "%s\\Mono-*", progFilesPath);\r
+       hFind = FindFirstFile(findPath, &findData);\r
+       if (hFind == INVALID_HANDLE_VALUE) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error looking for Mono in Program Files.\n");\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
+\r
+       while ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) {\r
+               if (FindNextFile(hFind, &findData) == 0) {\r
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find Mono directory in Program Files.\n");\r
+                       FindClose(hFind);\r
+                       return SWITCH_STATUS_FALSE;\r
+               }\r
+       }\r
+\r
+       /* Got it */ \r
        {\r
-               \r
-char libPath[MAX_PATH];\r
-               \r
-char etcPath[MAX_PATH];\r
-               \r
-switch_snprintf(libPath, MAX_PATH, "%s\\%s\\lib", progFilesPath, findData.cFileName);\r
-               \r
-switch_snprintf(etcPath, MAX_PATH, "%s\\%s\\etc", progFilesPath, findData.cFileName);\r
-               \r
-FindClose(hFind);\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Using Mono paths '%s' and '%s'.\n", libPath, etcPath);\r
-               \r
-mono_set_dirs(libPath, etcPath);\r
-               \r
-return SWITCH_STATUS_SUCCESS;\r
-       \r
-}\r
-       \r
+               char libPath[MAX_PATH];\r
+               char etcPath[MAX_PATH];\r
+\r
+               switch_snprintf(libPath, MAX_PATH, "%s\\%s\\lib", progFilesPath, findData.cFileName);\r
+               switch_snprintf(etcPath, MAX_PATH, "%s\\%s\\etc", progFilesPath, findData.cFileName);\r
+               FindClose(hFind);\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Using Mono paths '%s' and '%s'.\n", libPath, etcPath);\r
+               mono_set_dirs(libPath, etcPath);\r
+               return SWITCH_STATUS_SUCCESS;\r
+       }\r
+\r
 #elif\r
-               // On other platforms, it should just work if it hasn't been relocated\r
-               mono_set_dirs(NULL, NULL);\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
-       \r
+       // On other platforms, it should just work if it hasn't been relocated\r
+       mono_set_dirs(NULL, NULL);\r
+       return SWITCH_STATUS_SUCCESS;\r
+\r
 #endif /* \r
- */\r
      */\r
 }\r
 \r
-\r
 switch_status_t loadModMonoManaged() \r
 {\r
-       \r
-               /* Find and load mod_mono_managed.exe */ \r
+       /* Find and load mod_mono_managed.exe */ \r
        char filename[256];\r
-       \r
-switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MONO_MANAGED_DLL);\r
-       \r
-globals.domain = mono_jit_init(filename);\r
-       \r
 \r
-if (!globals.domain) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_jit_init failed.\n");\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
+       switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MONO_MANAGED_DLL);\r
+       globals.domain = mono_jit_init(filename);\r
 \r
-               /* Open the assembly */ \r
-               globals.mod_mono_asm = mono_domain_assembly_open(globals.domain, filename);\r
-       \r
-if (!globals.mod_mono_asm) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_domain_assembly_open failed.\n");\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
+       if (!globals.domain) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_jit_init failed.\n");\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
-}\r
+       /* Open the assembly */ \r
+       globals.mod_mono_asm = mono_domain_assembly_open(globals.domain, filename);\r
 \r
+       if (!globals.mod_mono_asm) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_domain_assembly_open failed.\n");\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
+       return SWITCH_STATUS_SUCCESS;\r
+}\r
 \r
 MonoMethod * getMethod(const char *name, MonoClass * klass) \r
 {\r
-       \r
-MonoMethodDesc * desc;\r
-       \r
-MonoMethod * method;\r
-       \r
-desc = mono_method_desc_new(name, TRUE);\r
-       \r
-method = mono_method_desc_search_in_class(desc, klass);\r
-       \r
-if (!method) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find %s method.\n", name);\r
-               \r
-return NULL;\r
-       \r
-}\r
-       \r
-return method;\r
+       MonoMethodDesc * desc;\r
+       MonoMethod * method;\r
 \r
-}\r
+       desc = mono_method_desc_new(name, TRUE);\r
+       method = mono_method_desc_search_in_class(desc, klass);\r
 \r
+       if (!method) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find %s method.\n", name);\r
+               return NULL;\r
+       }\r
+\r
+       return method;\r
+}\r
 \r
 switch_status_t findLoader() \r
 {\r
-       \r
-               /* Find loader class and methods */ \r
-               MonoImage * img;\r
-       \r
-MonoClass * loaderClass;\r
-       \r
-img = mono_assembly_get_image(globals.mod_mono_asm);\r
-       \r
-loaderClass = mono_class_from_name(img, "FreeSWITCH", "Loader");\r
-       \r
-if (!loaderClass) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find FreeSWITCH.Loader class.\n");\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
+       /* Find loader class and methods */ \r
+       MonoClass * loaderClass;\r
+       MonoImage * img = mono_assembly_get_image(globals.mod_mono_asm);\r
 \r
-globals.loadMethod = getMethod("FreeSWITCH.Loader:Load()", loaderClass);\r
-       \r
-if (!globals.loadMethod)\r
+       if (!(loaderClass = mono_class_from_name(img, "FreeSWITCH", "Loader"))) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find FreeSWITCH.Loader class.\n");\r
                return SWITCH_STATUS_FALSE;\r
-       \r
+       }\r
 \r
-globals.unloadMethod = getMethod("FreeSWITCH.Loader:Unload()", loaderClass);\r
-       \r
-if (!globals.unloadMethod)\r
+       if (!(globals.loadMethod = getMethod("FreeSWITCH.Loader:Load()", loaderClass))) {\r
                return SWITCH_STATUS_FALSE;\r
-       \r
+       }\r
 \r
-globals.runMethod = getMethod("FreeSWITCH.Loader:Run(string,intptr)", loaderClass);\r
-       \r
-if (!globals.runMethod)\r
+       if (!(globals.unloadMethod = getMethod("FreeSWITCH.Loader:Unload()", loaderClass))) {\r
                return SWITCH_STATUS_FALSE;\r
-       \r
+       }\r
 \r
-globals.executeMethod = getMethod("FreeSWITCH.Loader:Execute(string,intptr,intptr)", loaderClass);\r
-       \r
-if (!globals.executeMethod)\r
+       if (!(globals.runMethod = getMethod("FreeSWITCH.Loader:Run(string,intptr)", loaderClass))) {\r
                return SWITCH_STATUS_FALSE;\r
-       \r
+       }\r
 \r
-globals.executeBackgroundMethod = getMethod("FreeSWITCH.Loader:ExecuteBackground(string)", loaderClass);\r
-       \r
-if (!globals.executeBackgroundMethod)\r
+       if (!(globals.executeMethod = getMethod("FreeSWITCH.Loader:Execute(string,intptr,intptr)", loaderClass))) {\r
                return SWITCH_STATUS_FALSE;\r
-       \r
+       }\r
 \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all loader functions.\n");\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
+       if (!(globals.executeBackgroundMethod = getMethod("FreeSWITCH.Loader:ExecuteBackground(string)", loaderClass))) {\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all loader functions.\n");\r
+       return SWITCH_STATUS_SUCCESS;\r
 }\r
 \r
-\r
-\r
 SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load) \r
 {\r
-       \r
-               /* connect my internal structure to the blank pointer passed to me */ \r
-               *module_interface = switch_loadable_module_create_module_interface(pool, modname);\r
-       \r
-globals.pool = pool;\r
-       \r
+       /* connect my internal structure to the blank pointer passed to me */ \r
+       *module_interface = switch_loadable_module_create_module_interface(pool, modname);\r
 \r
-if (setMonoDirs() != SWITCH_STATUS_SUCCESS) {\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
-if (loadModMonoManaged() != SWITCH_STATUS_SUCCESS) {\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
-if (findLoader() != SWITCH_STATUS_SUCCESS) {\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
+       globals.pool = pool;\r
 \r
-               /* Not sure if this is necesary on the loading thread */ \r
-               mono_thread_attach(globals.domain);\r
-       \r
-mono_add_internal_call("FreeSWITCH.Native.MonoSession::InitMonoSession", InitMonoSession);\r
-       \r
+       if (setMonoDirs() != SWITCH_STATUS_SUCCESS) {\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
-               /* Run loader */ \r
-               MonoObject * objResult;\r
-       \r
-MonoObject * exception = NULL;\r
-       \r
-objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\r
-       \r
-if (exception) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load threw an exception.\n");\r
-               \r
-mono_print_unhandled_exception(exception);\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
-if (*(int *) mono_object_unbox(objResult)) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n");\r
-       \r
-} else {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load did not return true.\n");\r
-               \r
-return SWITCH_STATUS_FALSE;\r
-       \r
-}\r
-       \r
+       if (loadModMonoManaged() != SWITCH_STATUS_SUCCESS) {\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
+\r
+       if (findLoader() != SWITCH_STATUS_SUCCESS) {\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
+       /* Not sure if this is necesary on the loading thread */ \r
+       mono_thread_attach(globals.domain);\r
 \r
-               /* We're good to register */ \r
-       switch_api_interface_t *api_interface;\r
-       \r
-switch_application_interface_t *app_interface;\r
-       \r
+       mono_add_internal_call("FreeSWITCH.Native.MonoSession::InitMonoSession", InitMonoSession);\r
 \r
-SWITCH_ADD_API(api_interface, "monorun", "Run a module (ExecuteBackground)", monorun_api_function, "<module> [<args>]");\r
-       \r
-SWITCH_ADD_API(api_interface, "mono", "Run a module as an API function (Execute)", mono_api_function, "<module> [<args>]");\r
-       \r
-SWITCH_ADD_APP(app_interface, "mono", "Run Mono IVR", "Run a Mono IVR on a channel", mono_app_function, "<modulename> [<args>]", SAF_NONE);\r
-       \r
+       /* Run loader */ \r
+       MonoObject * objResult;\r
+       MonoObject * exception = NULL;\r
 \r
-return SWITCH_STATUS_SUCCESS;\r
+       objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\r
 \r
-}\r
+       if (exception) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load threw an exception.\n");\r
+               mono_print_unhandled_exception(exception);\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
+\r
+       if (*(int *) mono_object_unbox(objResult)) {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n");\r
+       } else {\r
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load did not return true.\n");\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
 \r
+       /* We're good to register */ \r
+       switch_api_interface_t *api_interface;\r
+       switch_application_interface_t *app_interface;\r
+\r
+       SWITCH_ADD_API(api_interface, "monorun", "Run a module (ExecuteBackground)", monorun_api_function, "<module> [<args>]");\r
+       SWITCH_ADD_API(api_interface, "mono", "Run a module as an API function (Execute)", mono_api_function, "<module> [<args>]");\r
+       SWITCH_ADD_APP(app_interface, "mono", "Run Mono IVR", "Run a Mono IVR on a channel", mono_app_function, "<modulename> [<args>]", SAF_NONE);\r
 \r
+       return SWITCH_STATUS_SUCCESS;\r
+}\r
 \r
 SWITCH_STANDARD_API(monorun_api_function) \r
 {\r
-       \r
-               // TODO: Should we be detaching after all this?\r
-               mono_thread_attach(globals.domain);\r
-       \r
-if (switch_strlen_zero(cmd)) {\r
-               \r
-stream->write_function(stream, "-ERR no args specified!\n");\r
-               \r
-return SWITCH_STATUS_SUCCESS;\r
-       \r
-}\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
+       // ExecuteBackground(string command)\r
        void *args[1];\r
-       \r
-args[0] = mono_string_new(globals.domain, cmd);\r
-       \r
-MonoObject * exception = NULL;\r
-       \r
-MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception);\r
-       \r
-if (exception) {\r
-               \r
-stream->write_function(stream, "-ERR FreeSWITCH.Loader.ExecuteBackground threw an exception.\n");\r
-               \r
-mono_print_unhandled_exception(exception);\r
-               \r
-return SWITCH_STATUS_SUCCESS;\r
-       \r
-}\r
-       \r
-if (*(int *) mono_object_unbox(objResult)) {\r
-               \r
-stream->write_function(stream, "+OK\n");\r
-       \r
-} else {\r
-               \r
-stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module?).\n");\r
-       \r
-}\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
 \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(mono_api_function) \r
 {\r
-       \r
-mono_thread_attach(globals.domain);\r
-       \r
-if (switch_strlen_zero(cmd)) {\r
-               \r
-stream->write_function(stream, "-ERR no args specified!\n");\r
-               \r
-return SWITCH_STATUS_SUCCESS;\r
-       \r
-}\r
-       \r
+       mono_thread_attach(globals.domain);\r
 \r
-               // Method is: Execute(string command, IntPtr streamPtr, IntPtr eventPtr)\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
-       \r
-args[1] = &stream;                     // Address of the arguments\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
 \r
-MonoObject * exception = NULL;\r
-       \r
-MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception);\r
-       \r
-if (exception) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute mono %s.\n", cmd);\r
-               \r
-mono_print_unhandled_exception(exception);\r
-       \r
-}\r
-       \r
-if (!(*(int *) mono_object_unbox(objResult))) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module?).\n", cmd);\r
-       \r
-}\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
+       MonoObject * exception = NULL;\r
+       MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception);\r
 \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(mono_app_function) \r
 {\r
-       \r
-mono_thread_attach(globals.domain);\r
-       \r
-if (switch_strlen_zero(data)) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No args specified!\n");\r
-       \r
-}\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
+       // bool Run(string command, IntPtr sessionHandle)\r
        void *args[2];\r
-       \r
-args[0] = mono_string_new(globals.domain, data);\r
-       \r
-args[1] = &session;\r
-       \r
 \r
-MonoObject * exception = NULL;\r
-       \r
-MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception);\r
-       \r
-if (exception) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute application mono %s.\n", data);\r
-               \r
-mono_print_unhandled_exception(exception);\r
-       \r
-}\r
-       \r
-if (!(*(int *) mono_object_unbox(objResult))) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module?).\n", data);\r
-       \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_mono_shutdown) \r
 {\r
-       \r
-mono_thread_attach(globals.domain);\r
-       \r
-MonoObject * ex;\r
-       \r
-mono_runtime_invoke(globals.unloadMethod, NULL, NULL, &ex);\r
-       \r
-if (ex) {\r
-               \r
-switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception occurred in Loader::Unload.\n");\r
-               \r
-mono_print_unhandled_exception(ex);\r
-       \r
-}\r
-       \r
-mono_runtime_set_shutting_down();\r
-       \r
-mono_runtime_cleanup(globals.domain);\r
-       \r
-mono_runtime_quit();\r
-       \r
-return SWITCH_STATUS_SUCCESS;\r
+       MonoObject * ex;\r
 \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
+       mono_runtime_set_shutting_down();\r
+       mono_runtime_cleanup(globals.domain);\r
+       mono_runtime_quit();\r
 \r
+       return SWITCH_STATUS_SUCCESS;\r
+}\r
 \r
 SWITCH_END_EXTERN_C\r