Adding support for "urgent" voicemail messages. Messages which are
[asterisk/asterisk.git] / pbx / pbx_gtkconsole.c
index 5909130..5e47ac6 100644 (file)
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
-#include <sys/types.h>
-#include <stdlib.h>
 #include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
 #include <signal.h>
 #include <sys/time.h>
 
@@ -48,9 +42,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/config.h"
 #include "asterisk/module.h"
 #include "asterisk/logger.h"
-#include "asterisk/options.h"
 #include "asterisk/cli.h"
 #include "asterisk/utils.h"
+#include "asterisk/paths.h"
+#include "asterisk/term.h"
 
 AST_MUTEX_DEFINE_STATIC(verb_lock);
 
@@ -60,8 +55,6 @@ static int inuse=0;
 static int clipipe[2];
 static int cleanupid = -1;
 
-static char *dtext = "Asterisk PBX Console (GTK Version)";
-
 static GtkWidget *window;
 static GtkWidget *quit;
 static GtkWidget *closew;
@@ -78,7 +71,7 @@ static void update_statusbar(char *msg)
        gtk_statusbar_push(GTK_STATUSBAR(statusbar), 1, msg);
 }
 
-int unload_module(void)
+static int unload_module(void)
 {
        if (inuse) {
                /* Kill off the main thread */
@@ -104,16 +97,19 @@ static int cleanup(void *useless)
 }
 
 
-static void __verboser(const char *stuff, int opos, int replacelast, int complete)
+static void __verboser(const char *_stuff)
 {
        char *s2[2];
        struct timeval tv;
        int ms;
+       char *stuff;
+
+       stuff = ast_strdupa(_stuff);
+       term_strip(stuff, stuff, strlen(stuff) + 1);
+
        s2[0] = (char *)stuff;
        s2[1] = NULL;
        gtk_clist_freeze(GTK_CLIST(verb));
-       if (replacelast) 
-               gtk_clist_remove(GTK_CLIST(verb), GTK_CLIST(verb)->rows - 1);
        gtk_clist_append(GTK_CLIST(verb), s2);
        if (!ast_tvzero(last)) {
                gdk_threads_leave();
@@ -134,11 +130,11 @@ static void __verboser(const char *stuff, int opos, int replacelast, int complet
        }
 }
 
-static void verboser(const char *stuff, int opos, int replacelast, int complete) 
+static void verboser(const char *stuff) 
 {
        ast_mutex_lock(&verb_lock);
        /* Lock appropriately if we're really being called in verbose mode */
-       __verboser(stuff, opos, replacelast, complete);
+       __verboser(stuff);
        ast_mutex_unlock(&verb_lock);
 }
 
@@ -163,7 +159,7 @@ static void cliinput(void *data, int source, GdkInputCondition ic)
                        c++;
                        n = *c;
                        *c = '\0';
-                       __verboser(l, 0, 0, 1);
+                       __verboser(l);
                        *(c - 1) = '\0';
                        *c = n;
                        l = c;
@@ -180,14 +176,13 @@ static void cliinput(void *data, int source, GdkInputCondition ic)
 
 }
 
-
 static void remove_module(void)
 {
        int res;
        char *module;
        char buf[256];
        if (GTK_CLIST(modules)->selection) {
-               module= (char *)gtk_clist_get_row_data(GTK_CLIST(modules), (int) GTK_CLIST(modules)->selection->data);
+               module = (char *) gtk_clist_get_row_data(GTK_CLIST(modules), (long) GTK_CLIST(modules)->selection->data);
                gdk_threads_leave();
                res = ast_unload_resource(module, 0);
                gdk_threads_enter();
@@ -200,13 +195,14 @@ static void remove_module(void)
                }
        }
 }
-static void reload_module(void)
+
+static int reload(void)
 {
        int res, x;
        char *module;
        char buf[256];
        if (GTK_CLIST(modules)->selection) {
-               module= (char *)gtk_clist_get_row_data(GTK_CLIST(modules), (int) GTK_CLIST(modules)->selection->data);
+               module= (char *)gtk_clist_get_row_data(GTK_CLIST(modules), (long) GTK_CLIST(modules)->selection->data);
                module = strdup(module);
                if (module) {
                        gdk_threads_leave();
@@ -236,6 +232,8 @@ static void reload_module(void)
                        free(module);
                }
        }
+
+       return AST_MODULE_LOAD_SUCCESS;
 }
 
 static void file_ok_sel(GtkWidget *w, GtkFileSelection *fs)
@@ -275,15 +273,15 @@ static void add_module(void)
 static int add_mod(const char *module, const char *description, int usecount, const char *like)
 {
        char use[10];
-       char *pass[4];
+       const char *pass[4];
        int row;
        snprintf(use, sizeof(use), "%d", usecount);
        pass[0] = module;
        pass[1] = description;
        pass[2] = use;
        pass[3] = NULL;
-       row = gtk_clist_append(GTK_CLIST(modules), pass);
-       gtk_clist_set_row_data(GTK_CLIST(modules), row, module);
+       row = gtk_clist_append(GTK_CLIST(modules), (char **) pass);
+       gtk_clist_set_row_data(GTK_CLIST(modules), row, (char *) module);
        return 0;       
 }
 
@@ -292,7 +290,7 @@ static int mod_update(void)
        char *module= NULL;
        /* Update the mod stuff */
        if (GTK_CLIST(modules)->selection) {
-               module= (char *)gtk_clist_get_row_data(GTK_CLIST(modules), (int) GTK_CLIST(modules)->selection->data);
+               module= (char *)gtk_clist_get_row_data(GTK_CLIST(modules), (long) GTK_CLIST(modules)->selection->data);
        }
        gtk_clist_freeze(GTK_CLIST(modules));
        gtk_clist_clear(GTK_CLIST(modules));
@@ -311,8 +309,7 @@ static void exit_now(GtkWidget *widget, gpointer data)
        ast_update_use_count();
        ast_unregister_verbose(verboser);
        ast_unload_resource("pbx_gtkconsole", 0);
-       if (option_verbose > 1)
-               ast_verbose(VERBOSE_PREFIX_2 "GTK Console Monitor Exiting\n");
+       ast_verb(2, "GTK Console Monitor Exiting\n");
        /* XXX Trying to quit after calling this makes asterisk segfault XXX */
 }
 
@@ -419,7 +416,7 @@ static int show_console(void)
        gtk_signal_connect(GTK_OBJECT(add), "clicked",
                        GTK_SIGNAL_FUNC (add_module), window);
        gtk_signal_connect(GTK_OBJECT(reloadw), "clicked",
-                       GTK_SIGNAL_FUNC (reload_module), window);
+                       GTK_SIGNAL_FUNC (reload), window);
                
        bbox = gtk_vbox_new(FALSE, 5);
        gtk_widget_show(bbox);
@@ -475,42 +472,31 @@ static int show_console(void)
 }
 
 
-int load_module(void)
+static int load_module(void)
 {
        if (pipe(clipipe)) {
                ast_log(LOG_WARNING, "Unable to create CLI pipe\n");
-               return -1;
+               return AST_MODULE_LOAD_FAILURE;
        }
        g_thread_init(NULL);
        if (gtk_init_check(NULL, NULL))  {
                if (!show_console()) {
                        inuse++;
                        ast_update_use_count();
-                       if (option_verbose > 1)
-                               ast_verbose( VERBOSE_PREFIX_2 "Launched GTK Console monitor\n");                
+                       ast_verb(2, "Launched GTK Console monitor\n");
                } else
                        ast_log(LOG_WARNING, "Unable to start GTK console\n");
        } else {
                if (option_debug)
                        ast_log(LOG_DEBUG, "Unable to start GTK console monitor -- ignoring\n");
-               else if (option_verbose > 1)
-                       ast_verbose( VERBOSE_PREFIX_2 "GTK is not available -- skipping monitor\n");
+               else
+                       ast_verb(2, "GTK is not available -- skipping monitor\n");
        }
-       return 0;
-}
-
-int usecount(void)
-{
-       return inuse;
-}
-
-const char *description(void)
-{
-       return dtext;
-}
-
-const char *key(void)
-{
-       return ASTERISK_GPL_KEY;
+       return AST_MODULE_LOAD_SUCCESS;
 }
 
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "GTK Console",
+               .load = load_module,
+               .unload = unload_module,
+               .reload = reload,
+              );