*/ \r
\r
#include <switch.h>\r
-\r
#include "freeswitch_managed.h" \r
\r
#ifdef _MANAGED\r
#include <mscoree.h>\r
using namespace System;\r
using namespace System::Runtime::InteropServices;\r
+#define MOD_MANAGED_VERSION "Microsoft CLR Version"\r
+#else\r
+#define MOD_MANAGED_VERSION "Mono Version"\r
#endif\r
\r
SWITCH_BEGIN_EXTERN_C \r
#define MOD_MANAGED_ASM_V3 2\r
#define MOD_MANAGED_ASM_V4 0\r
#define MOD_MANAGED_DLL MOD_MANAGED_ASM_NAME ".dll"\r
+#define MOD_MANAGED_IMAGE_NAME "FreeSWITCH"\r
+#define MOD_MANAGED_CLASS_NAME "Loader"\r
\r
mod_managed_globals globals = { 0 };\r
\r
}\r
}\r
\r
- if(!found) \r
- { // Check registry\r
+ if (!found) { // Check registry\r
DWORD size = MAX_PATH;\r
if (ERROR_SUCCESS == RegGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\Novell\\Mono\\2.0", "FrameworkAssemblyDirectory", RRF_RT_REG_SZ, NULL, &libPath, &size)) {\r
size = MAX_PATH;\r
}\r
}\r
\r
- if (!found)\r
- { // Scan program files for Mono-2something\r
+ if (!found) { // Scan program files for Mono-2something\r
HANDLE hFind;\r
WIN32_FIND_DATA findData;\r
switch_snprintf(findPath, MAX_PATH, "%s\\Mono-2*", progFilesPath);\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
return method;\r
}\r
\r
-\r
switch_status_t findLoader() \r
{\r
/* Find loader class and methods */ \r
MonoClass * loaderClass;\r
MonoImage * img = mono_assembly_get_image(globals.mod_mono_asm);\r
\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
+ if (!(loaderClass = mono_class_from_name(img, MOD_MANAGED_IMAGE_NAME, MOD_MANAGED_CLASS_NAME))) {\r
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find " MOD_MANAGED_IMAGE_NAME "." MOD_MANAGED_CLASS_NAME " class.\n");\r
return SWITCH_STATUS_FALSE;\r
}\r
\r
- if (!(globals.loadMethod = getMethod("FreeSWITCH.Loader:Load()", loaderClass))) {\r
+ if (!(globals.loadMethod = getMethod(MOD_MANAGED_IMAGE_NAME "." MOD_MANAGED_CLASS_NAME ":Load()", loaderClass))) {\r
return SWITCH_STATUS_FALSE;\r
}\r
\r
switch_status_t findLoader() \r
{\r
try {\r
- FreeSwitchManaged::loadMethod = FreeSwitchManaged::mod_dotnet_managed->GetType("FreeSWITCH.Loader")->GetMethod("Load");\r
+ FreeSwitchManaged::loadMethod = FreeSwitchManaged::mod_dotnet_managed->GetType(MOD_MANAGED_IMAGE_NAME "." MOD_MANAGED_CLASS_NAME)->GetMethod("Load");\r
} catch(Exception^ ex) {\r
IntPtr msg = Marshal::StringToHGlobalAnsi(ex->ToString());\r
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not load FreeSWITCH.Loader class: %s\n", static_cast<const char*>(msg.ToPointer()));\r
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not load " MOD_MANAGED_IMAGE_NAME "." MOD_MANAGED_CLASS_NAME " class: %s\n", static_cast<const char*>(msg.ToPointer()));\r
Marshal::FreeHGlobal(msg);\r
return SWITCH_STATUS_FALSE;\r
}\r
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all FreeSWITCH.Loader functions.\n");\r
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all " MOD_MANAGED_IMAGE_NAME "." MOD_MANAGED_CLASS_NAME " functions.\n");\r
return SWITCH_STATUS_SUCCESS;\r
}\r
#endif\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
-#ifdef _MANAGED\r
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Loading mod_managed (Common Language Infrastructure), Microsoft CLR Version\n");\r
-#else\r
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Loading mod_managed (Common Language Infrastructure), Mono Version\n");\r
-#endif\r
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Loading mod_managed (Common Language Infrastructure), " MOD_MANAGED_VERSION "\n");\r
+\r
globals.pool = pool;\r
\r
if (loadRuntime() != SWITCH_STATUS_SUCCESS) { \r
return SWITCH_STATUS_FALSE;\r
}\r
#ifdef _MANAGED\r
- Object ^objResult;\r
try {\r
- objResult = FreeSwitchManaged::loadMethod->Invoke(nullptr, nullptr);\r
+ Object ^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
+ catch(Exception^ ex) {\r
IntPtr msg = Marshal::StringToHGlobalAnsi(ex->ToString());\r
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load did not return true. %s\n", static_cast<const char*>(msg.ToPointer()));\r
Marshal::FreeHGlobal(msg);\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
+ MonoObject * objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception);\r
success = *(int *) mono_object_unbox(objResult);\r
\r
if (exception) {\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
- success = executeBackgroundDelegate(cmd);\r
- if (success) {\r
+ if (executeBackgroundDelegate(cmd)) {\r
stream->write_function(stream, "+OK\n");\r
} else { \r
stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module or exception?).\n");\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
- success = executeDelegate(cmd, stream, stream->param_event);\r
- if (!success) {\r
+ if (!(executeDelegate(cmd, stream, stream->param_event))) {\r
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module or exception).\n", cmd); \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
return;\r
}\r
- success = runDelegate(data, session);\r
- if (!success) {\r
+ if (!(runDelegate(data, session))) {\r
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module or exception).\n", data);\r
}\r
}\r
\r
SWITCH_STANDARD_API(managed_loadassembly)\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
- success = loadAssemblyDelegate(cmd);\r
- if (success) {\r
+ if (loadAssemblyDelegate(cmd)) {\r
stream->write_function(stream, "+OK\n");\r
} else { \r
stream->write_function(stream, "-ERR LoadAssembly returned false (invalid file or exception).\n");\r