[UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate bool ExecuteBackgroundDelegate(string cmd);\r
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate bool RunDelegate(string cmd, IntPtr session);\r
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate bool ReloadDelegate(string cmd);\r
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate bool ListDelegate(string cmd);\r
static readonly ExecuteDelegate _execute = Execute;\r
static readonly ExecuteBackgroundDelegate _executeBackground = ExecuteBackground;\r
static readonly RunDelegate _run = Run;\r
static readonly ReloadDelegate _reload = Reload;\r
- //SWITCH_MOD_DECLARE_NONSTD(void) InitManagedDelegates(runFunction run, executeFunction execute, executeBackgroundFunction executeBackground, reloadFunction reload)\r
+ static readonly ListDelegate _list = List;\r
+ \r
[DllImport("mod_managed", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]\r
- static extern void InitManagedDelegates(RunDelegate run, ExecuteDelegate execute, ExecuteBackgroundDelegate executeBackground, ReloadDelegate reload);\r
+ static extern void InitManagedDelegates(RunDelegate run, ExecuteDelegate execute, ExecuteBackgroundDelegate executeBackground, ReloadDelegate reload, ListDelegate list);\r
\r
static readonly object loaderLock = new object();\r
\r
return File.Exists(path) ? Assembly.LoadFile(path) : null;\r
};\r
\r
- InitManagedDelegates(_run, _execute, _executeBackground, _reload);\r
+ InitManagedDelegates(_run, _execute, _executeBackground, _reload, _list);\r
\r
configureWatcher();\r
\r
return false;\r
}\r
}\r
+\r
+ public static bool List(string command) {\r
+ try {\r
+ Log.WriteLine(LogLevel.Info, "Available APIs:");\r
+ getApiExecs().Values.ForEach(x => {\r
+ Log.WriteLine(LogLevel.Info, "{0}: {1}", x.Name, String.Join(",", x.Aliases.ToArray()));\r
+ });\r
+ Log.WriteLine(LogLevel.Info, "Available Apps:");\r
+ getAppExecs().Values.ForEach(x => {\r
+ Log.WriteLine(LogLevel.Info, "{0}: {1}", x.Name, String.Join(",", x.Aliases.ToArray()));\r
+ });\r
+ return true;\r
+ } catch (Exception ex) {\r
+ Log.WriteLine(LogLevel.Error, "Exception listing managed modules: {0}", ex.ToString());\r
+ return false;\r
+ }\r
+ }\r
}\r
\r
}\r
-
\ No newline at end of file
+ \r
*\r
* Contributor(s):\r
* \r
- * Michael Giagnocavo <mgg@packetrino.com>\r
+ * Michael Giagnocavo <mgg@giagnocavo.net>\r
* David Brazier <David.Brazier@360crm.co.uk>\r
* Jeff Lenk <jlenk@frontiernet.net> \r
*\r
SWITCH_STANDARD_API(managed_api_function); /* Execute */\r
SWITCH_STANDARD_APP(managed_app_function); /* Run */\r
SWITCH_STANDARD_API(managedreload_api_function); /* Reload */\r
+SWITCH_STANDARD_API(managedlist_api_function); /* List modules */\r
\r
#define MOD_MANAGED_ASM_NAME "FreeSWITCH.Managed"\r
#define MOD_MANAGED_ASM_V1 1\r
typedef int (*executeFunction)(const char *cmd, void *stream, void *Event);\r
typedef int (*executeBackgroundFunction)(const char* cmd);\r
typedef int (*reloadFunction)(const char* cmd);\r
+typedef int (*listFunction)(const char* cmd);\r
static runFunction runDelegate;\r
static executeFunction executeDelegate;\r
static executeBackgroundFunction executeBackgroundDelegate;\r
static reloadFunction reloadDelegate;\r
+static listFunction listDelegate;\r
\r
-SWITCH_MOD_DECLARE_NONSTD(void) InitManagedDelegates(runFunction run, executeFunction execute, executeBackgroundFunction executeBackground, reloadFunction reload) \r
+SWITCH_MOD_DECLARE_NONSTD(void) InitManagedDelegates(runFunction run, executeFunction execute, executeBackgroundFunction executeBackground, reloadFunction reload, listFunction list) \r
{\r
runDelegate = run;\r
executeDelegate = execute;\r
executeBackgroundDelegate = executeBackground;\r
reloadDelegate = reload;\r
+ listDelegate = list;\r
}\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
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 CLI App", "Run an App on a channel", managed_app_function, "<modulename> [<args>]", SAF_SUPPORT_NOMEDIA);\r
SWITCH_ADD_API(api_interface, "managedreload", "Force [re]load of a file", managedreload_api_function, "<filename>");\r
+ SWITCH_ADD_API(api_interface, "managedlist", "Log the list of available APIs and Apps", managedlist_api_function, "");\r
return SWITCH_STATUS_NOUNLOAD;\r
}\r
\r
return SWITCH_STATUS_SUCCESS;\r
}\r
\r
+SWITCH_STANDARD_API(managedlist_api_function)\r
+{\r
+#ifndef _MANAGED\r
+ mono_thread_attach(globals.domain);\r
+#endif\r
+ listDelegate(cmd);\r
+#ifndef _MANAGED\r
+ mono_thread_detach(mono_thread_current());\r
+#endif\r
+ return SWITCH_STATUS_SUCCESS;\r
+}\r
+\r
SWITCH_END_EXTERN_C\r