[Freeswitch-svn] [commit] r13765 - freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp

FreeSWITCH SVN jmesquita at freeswitch.org
Thu Jun 11 16:03:23 PDT 2009


Author: jmesquita
Date: Thu Jun 11 18:03:23 2009
New Revision: 13765

Log:
Added <khomp show links> api command

Modified:
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile
   freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp

Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile
==============================================================================
--- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile	(original)
+++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/Makefile	Thu Jun 11 18:03:23 2009
@@ -1,5 +1,5 @@
 MODNAME=mod_khomp
-LOCAL_CFLAGS=-I./include -I./commons/include -lk3l -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM -DKHOMP_COMMONS_WITH_CHANNEL -lboost_thread -lboost_regex
+LOCAL_CFLAGS=-I./include -I./commons/include -lk3l -D_REENTRANT -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DK3L_HOSTSYSTEM -DKHOMP_COMMONS_WITH_CHANNEL
 
 LOCAL_OBJS= ./commons/k3lapi.o
 

Modified: freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp
==============================================================================
--- freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp	(original)
+++ freeswitch/trunk/scripts/contrib/jmesquita/mod_khomp/mod_khomp.cpp	Thu Jun 11 18:03:23 2009
@@ -30,7 +30,7 @@
  *
  */
 
-#define KHOMP_SYNTAX "khomp [show]"
+#define KHOMP_SYNTAX "khomp show [info|links]"
 
 /* Our includes */
 #include "k3lapi.hpp"
@@ -38,6 +38,7 @@
 extern "C"
 {
     #include <switch.h>
+    #include "k3l.h"
 }
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_khomp_load);
@@ -125,6 +126,7 @@
 
 /* My function prototypes */
 static void printBoardsInfo(switch_stream_handle_t*);
+static const char* linkStatus(unsigned int device, unsigned int link);
 
 
 
@@ -493,7 +495,7 @@
 
 static switch_status_t load_config(void)
 {
-	char *cf = "khomp.conf";
+	const char *cf = "khomp.conf";
 	switch_xml_t cfg, xml, settings, param;
 
 	memset(&globals, 0, sizeof(globals));
@@ -620,10 +622,8 @@
 }
 
 /* 
-   khomp API
-   Only displays board information right now
+   khomp API definition
 */
-
 SWITCH_STANDARD_API(khomp)
 {
    	char *argv[10] = { 0 };
@@ -640,13 +640,34 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	if ((argc = switch_separate_string(myarg, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) != 1) {
+	if ((argc = switch_separate_string(myarg, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 1) {
 		stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
 		goto done;
 	}
 
-	if (argv[0] && !strncasecmp(argv[0], "show", 6)) {
-        printBoardsInfo(stream);
+    /* Below show ... */
+	if (argv[0] && !strncasecmp(argv[0], "show", 4)) {
+        /* Show the API summary and information */
+        if (argv[1] && !strncasecmp(argv[1], "info", 4)) {
+            printBoardsInfo(stream);
+        }
+        /* Show all the links and their status */
+        if (argv[1] && !strncasecmp(argv[1], "links", 5)) {
+            for(int device=0 ; device < k3l->device_count() ; device++)
+            {
+                stream->write_function(stream, "___________________________________________\n");
+                stream->write_function(stream, "|--------------Khomp Links----------------|\n");
+                stream->write_function(stream, "|----Board----|----Link----|----Status----|\n");
+                for(int link=0 ; link < k3l->link_count(device) ; link++)
+                {
+                    stream->write_function(stream, "|%13d|%12d|%s|\n"
+                                            , device
+                                            , link
+                                            , linkStatus(device, link));
+                }
+            }
+            stream->write_function(stream, "-------------------------------------------\n");
+        }
 
 	} else {
 		stream->write_function(stream, "USAGE: %s\n", KHOMP_SYNTAX);
@@ -658,6 +679,64 @@
 
 }
 
+/* Helper functions */
+static const char * linkStatus(unsigned int device, unsigned int link)
+{
+
+    K3L_LINK_CONFIG & config = k3l->link_config(device, link);
+    K3L_LINK_STATUS   status;
+    
+    KLibraryStatus ret = (KLibraryStatus) k3lGetDeviceStatus (device, link + ksoLink, &status, sizeof(status));
+
+    if (ret == ksSuccess)
+    {
+        switch (config.Signaling)
+        {
+            case ksigInactive:
+                return "[ksigInactive]";
+
+            case ksigAnalog:
+                return "[ksigAnalog]";
+
+            case ksigSIP:
+                return "[ksigSIP]";
+
+            case ksigOpenCAS:
+            case ksigOpenR2:
+            case ksigR2Digital:
+            case ksigUserR2Digital:
+            case ksigOpenCCS:
+            case ksigPRI_EndPoint:
+            case ksigPRI_Network:
+            case ksigPRI_Passive:
+            case ksigLineSide:
+            case ksigCAS_EL7:
+            case ksigAnalogTerminal:
+                if (kesOk == status.E1)
+                {
+                    return "kesOk";
+                }
+                else
+                {
+                    if (kesSignalLost & status.E1)         return "SignalLost";
+                    if (kesNetworkAlarm & status.E1)       return "NetworkAlarm";
+                    if (kesFrameSyncLost & status.E1)      return "FrameSyncLost";
+                    if (kesMultiframeSyncLost & status.E1) return "MultiframeSyncLost";
+                    if (kesRemoteAlarm & status.E1)        return "RemoteAlarm";
+                    if (kesHighErrorRate & status.E1)      return "HighErrorRate";
+                    if (kesUnknownAlarm & status.E1)       return "UnknownAlarm";
+                    if (kesE1Error & status.E1)            return "E1Error";
+
+                }
+            default:
+                return "NotImplementedBoard";
+        }
+    }
+
+    return "<unknown>";
+}
+
+
 static void printBoardsInfo(switch_stream_handle_t* stream) {
 
     K3L_API_CONFIG apiCfg;
@@ -759,6 +838,7 @@
 
     stream->write_function(stream, " ------------------------------------------------------------------\n");
 }
+/* End of helper functions */
 
 
 /* For Emacs:



More information about the Freeswitch-svn mailing list