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

src/mod/languages/mod_managed/mod_managed.cpp

index d38e55b36409508da460d9657ddd7b603f81fb8b..98e39e4951c3e26b7bc3f60a7ec863bef890e1bb 100644 (file)
@@ -157,11 +157,15 @@ switch_status_t setMonoDirs()
 #endif \r
 }\r
 \r
-switch_status_t loadModMonoManaged() \r
+switch_status_t loadRuntime() \r
 {\r
        /* Find and load mod_mono_managed.exe */ \r
        char filename[256];\r
 \r
+       if (setMonoDirs() != SWITCH_STATUS_SUCCESS) {\r
+               return SWITCH_STATUS_FALSE;\r
+       }\r
+\r
        switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MANAGED_DLL);\r
        globals.domain = mono_jit_init(filename);\r
 \r
@@ -251,59 +255,6 @@ switch_status_t findLoader()
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all loader functions.\n");\r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
-\r
-SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load) \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
-       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Loading mod_managed (Common Language Infrastructure), Mono Version\n");\r
-       globals.pool = pool;\r
-\r
-       if (setMonoDirs() != SWITCH_STATUS_SUCCESS) {\r
-               return SWITCH_STATUS_FALSE;\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
-       /* Run loader */ \r
-       MonoObject * objResult;\r
-       MonoObject * exception = NULL;\r
-\r
-       objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\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, "managedrun", "Run a module (ExecuteBackground)", managedrun_api_function, "<module> [<args>]");\r
-       SWITCH_ADD_API(api_interface, "managed", "Run a module as an API function (Execute)", managed_api_function, "<module> [<args>]");\r
-       SWITCH_ADD_APP(app_interface, "managed", "Run Mono IVR", "Run a Mono IVR on a channel", managed_app_function, "<modulename> [<args>]", SAF_NONE);\r
-\r
-       return SWITCH_STATUS_SUCCESS;\r
-}\r
-\r
 #endif\r
 \r
 /**********************************************************\r
@@ -326,7 +277,7 @@ SWITCH_MOD_DECLARE(void) InitManagedSession(ManagedSession *session, inputFuncti
        session->hangupDelegate = hangupDelegate;\r
 }\r
 \r
-switch_status_t loadModDotnetManaged() \r
+switch_status_t loadRuntime() \r
 {\r
        /* Find and load mod_dotnet_managed.dll */ \r
        char filename[256];\r
@@ -362,26 +313,29 @@ switch_status_t findLoader()
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all FreeSWITCH.Loader functions.\n");\r
        return SWITCH_STATUS_SUCCESS;\r
 }\r
+#endif\r
 \r
 SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load) \r
 {\r
+       int success;\r
        /* connect my internal structure to the blank pointer passed to me */ \r
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);\r
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Loading mod_managed (Common Language Infrastructure), Microsoft CLR Version\n");\r
        \r
        globals.pool = pool;\r
        \r
-       if (loadModDotnetManaged() != SWITCH_STATUS_SUCCESS) {                  \r
+       if (loadRuntime() != SWITCH_STATUS_SUCCESS) {                   \r
                return SWITCH_STATUS_FALSE;\r
        }\r
        \r
        if (findLoader() != SWITCH_STATUS_SUCCESS) {            \r
                return SWITCH_STATUS_FALSE;\r
        }\r
-\r
+#ifdef _MANAGED\r
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::loadMethod->Invoke(nullptr, nullptr);\r
+               success = *reinterpret_cast<bool^>(objResult);\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n");\r
        }\r
        catch(Exception^ ex)    {\r
@@ -390,8 +344,24 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load)
                Marshal::FreeHGlobal(msg);\r
                return SWITCH_STATUS_FALSE;\r
        }\r
+#else\r
+       /* Not sure if this is necesary on the loading thread */ \r
+       mono_thread_attach(globals.domain);\r
+\r
+       /* Run loader */ \r
+       MonoObject * objResult;\r
+       MonoObject * exception = NULL;\r
+\r
+       objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\r
+       success = *(int *) mono_object_unbox(objResult);\r
 \r
-       if (*reinterpret_cast<bool^>(objResult)) {\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
+#endif\r
+       if (success) {\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
@@ -407,7 +377,6 @@ 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
-#endif\r
 \r
 SWITCH_STANDARD_API(managedrun_api_function) \r
 {\r
@@ -420,6 +389,7 @@ SWITCH_STANDARD_API(managedrun_api_function)
        Object ^objResult;\r
        try {\r
                objResult = FreeSwitchManaged::executeBackgroundMethod->Invoke(nullptr, gcnew array<Object^> { gcnew String(cmd) } );\r
+               success = *reinterpret_cast<bool^>(objResult);\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n");\r
        } catch(Exception^ ex)  {\r
                IntPtr msg = Marshal::StringToHGlobalAnsi(ex->ToString());\r
@@ -428,7 +398,6 @@ 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
@@ -436,13 +405,13 @@ SWITCH_STANDARD_API(managedrun_api_function)
        args[0] = mono_string_new(globals.domain, cmd);\r
        MonoObject * exception = NULL;\r
        MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception);\r
+       success = *(int *) mono_object_unbox(objResult);\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
@@ -466,13 +435,13 @@ SWITCH_STANDARD_API(managed_api_function)
        try {\r
                objResult = FreeSwitchManaged::executeMethod->Invoke(nullptr, gcnew array<Object^>{gcnew String(cmd),gcnew IntPtr(stream), gcnew IntPtr(stream->param_event)});\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Execute completed successfully.\n");\r
+               success = *reinterpret_cast<bool^>(objResult);\r
        } catch(Exception ^ex)  {\r
                IntPtr msg = Marshal::StringToHGlobalAnsi(ex->ToString());\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute cli %s: %s\n", cmd, static_cast<const char*>(msg.ToPointer()));\r
                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[3];\r
@@ -483,12 +452,12 @@ SWITCH_STANDARD_API(managed_api_function)
 \r
        MonoObject * exception = NULL;\r
        MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception);\r
+       success = *(int *) mono_object_unbox(objResult);\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
@@ -508,6 +477,7 @@ SWITCH_STANDARD_APP(managed_app_function)
        try {\r
                objResult = FreeSwitchManaged::runMethod->Invoke(nullptr, gcnew array<Object^>{gcnew String(data),gcnew IntPtr(session)});\r
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "RunMethod completed successfully.\n");\r
+               success = *reinterpret_cast<bool^>(objResult);\r
        }\r
        catch(Exception ^ex)    {\r
                IntPtr msg = Marshal::StringToHGlobalAnsi(ex->ToString());\r
@@ -515,7 +485,6 @@ SWITCH_STANDARD_APP(managed_app_function)
                Marshal::FreeHGlobal(msg);\r
                return;\r
        }\r
-       success = *reinterpret_cast<bool^>(objResult);\r
 #else\r
        mono_thread_attach(globals.domain);\r
        void *args[2];\r
@@ -525,12 +494,12 @@ SWITCH_STANDARD_APP(managed_app_function)
 \r
        MonoObject * exception = NULL;\r
        MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception);\r
+       success = *(int *) mono_object_unbox(objResult);\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