Merge OEJ's channel type listing (bug #3187) with slight modifications
authorMark Spencer <markster@digium.com>
Fri, 31 Dec 2004 00:04:41 +0000 (00:04 +0000)
committerMark Spencer <markster@digium.com>
Fri, 31 Dec 2004 00:04:41 +0000 (00:04 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4614 65c4cc65-6c06-0410-ace0-fbb531ad65f3

asterisk.c
asterisk.h
channel.c

index 76e98b3..59e22cf 100755 (executable)
@@ -1832,6 +1832,7 @@ int main(int argc, char *argv[])
                printf(term_quit());
                exit(1);
        }
+       ast_channels_init();
        if (init_manager()) {
                printf(term_quit());
                exit(1);
index 08fc295..e1cf447 100755 (executable)
@@ -50,5 +50,7 @@ extern int reload_logger(int);
 extern int term_init(void);
 /* Provided by db.c */
 extern int astdb_init(void);
+/* Provided by channel.c */
+extern void ast_channels_init(void);
 
 #endif
index c30f383..8be15ea 100755 (executable)
--- a/channel.c
+++ b/channel.c
@@ -29,6 +29,7 @@
 #include <asterisk/logger.h>
 #include <asterisk/say.h>
 #include <asterisk/file.h>
+#include <asterisk/cli.h>
 #include <asterisk/translate.h>
 #include <asterisk/manager.h>
 #include <asterisk/chanvars.h>
@@ -49,6 +50,7 @@
 #error "You need newer zaptel!  Please cvs update zaptel"
 #endif
 #endif
+#include "asterisk.h"
 
 /* uncomment if you have problems with 'monitoring' synchronized files */
 #if 0
@@ -78,6 +80,32 @@ struct ast_channel *channels = NULL;
    
 AST_MUTEX_DEFINE_STATIC(chlock);
 
+static int show_channeltypes(int fd, int argc, char *argv[])
+{
+#define FORMAT  "%-7.7s  %-50.50s\n"
+       struct chanlist *cl = backends;
+       ast_cli(fd, FORMAT, "Type", "Description");
+       ast_cli(fd, FORMAT, "------", "-----------");
+       if (ast_mutex_lock(&chlock)) {
+               ast_log(LOG_WARNING, "Unable to lock channel list\n");
+               return -1;
+       }
+       while (cl) {
+               ast_cli(fd, FORMAT, cl->type, cl->description);
+               cl = cl->next;
+       }
+       ast_mutex_unlock(&chlock);
+       return RESULT_SUCCESS;
+
+}
+
+static char show_channeltypes_usage[] = 
+"Usage: show channeltypes\n"
+"       Shows available channel types registred in your Asterisk server.";
+
+static struct ast_cli_entry cli_show_channeltypes = 
+       { { "show", "channeltypes", NULL }, show_channeltypes, "Show available channel types", show_channeltypes_usage };
+
 int ast_check_hangup(struct ast_channel *chan)
 {
 time_t myt;
@@ -3011,3 +3039,7 @@ void ast_moh_cleanup(struct ast_channel *chan)
         ast_moh_cleanup_ptr(chan);
 }
 
+void ast_channels_init(void)
+{
+       ast_cli_register(&cli_show_channeltypes);
+}