]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add simple managedlist function to print out loaded APIs/Apps
authorMichael Giagnocavo <mgg@giagnocavo.net>
Thu, 3 Nov 2011 17:44:11 +0000 (11:44 -0600)
committerMichael Giagnocavo <mgg@giagnocavo.net>
Thu, 3 Nov 2011 17:44:11 +0000 (11:44 -0600)
src/mod/languages/mod_managed/managed/Loader.cs
src/mod/languages/mod_managed/mod_managed.cpp

index 8912a4e949a282881a3b82480c74481ebafa19b7..19ab3a52dbdf29a7a62bfa952a73c6d2d9ef0b83 100644 (file)
@@ -47,13 +47,15 @@ namespace FreeSWITCH {
         [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
@@ -83,7 +85,7 @@ namespace FreeSWITCH {
                 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
@@ -405,7 +407,24 @@ namespace FreeSWITCH {
                 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
index bc26e8b1052bb9183368248d3d9722b2449edb82..ee6e87a5fc04e48581d9d8c1ae84eac7b67841cc 100644 (file)
@@ -23,7 +23,7 @@
  *\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
@@ -55,6 +55,7 @@ SWITCH_STANDARD_API(managedrun_api_function); /* ExecuteBackground */
 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
@@ -72,19 +73,23 @@ typedef int (*runFunction)(const char *data, void *sessionPtr);
 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
@@ -361,6 +366,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_managed_load)
        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
@@ -440,4 +446,16 @@ SWITCH_STANDARD_API(managedreload_api_function)
        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