(closes issue #13557)
[asterisk/asterisk.git] / utils / extconf.c
index 4295abe..78b9113 100644 (file)
@@ -23,6 +23,8 @@
  * for operations outside of asterisk. A huge, awful hack.
  *
  */
+#include "asterisk.h"
+
 #undef DEBUG_THREADS
 
 #include "asterisk/compat.h"
@@ -81,12 +83,6 @@ struct ast_channel
 #define VERBOSE_PREFIX_3 "    -- "
 #define VERBOSE_PREFIX_4 "       > "
 
-/* IN CONFLICT: void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...)
-   __attribute__ ((format (printf, 5, 6))); */
-
-static void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) __attribute__ ((format (printf,5,6)));
-
-
 void ast_backtrace(void);
 
 void ast_queue_log(const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt, ...)
@@ -100,9 +96,6 @@ int ast_unregister_verbose(void (*verboser)(const char *string));
 
 void ast_console_puts(const char *string);
 
-void ast_console_puts_mutable(const char *string);
-void ast_console_toggle_mute(int fd);
-
 #define _A_ __FILE__, __LINE__, __PRETTY_FUNCTION__
 
 #ifdef LOG_DEBUG
@@ -1247,7 +1240,7 @@ static unsigned int safe_system_level = 0;
 static void *safe_system_prev_handler;
 
 /*! \brief NULL handler so we can collect the child exit status */
-static void null_sig_handler(int signal)
+static void null_sig_handler(int sig)
 {
 
 }
@@ -1767,56 +1760,6 @@ static void ast_config_destroy(struct ast_config *cfg)
 #define AST_CACHE_DIR_LEN      512
 #define AST_FILENAME_MAX       80
 
-/*! \ingroup main_options */
-enum ast_option_flags {
-       /*! Allow \#exec in config files */
-       AST_OPT_FLAG_EXEC_INCLUDES = (1 << 0),
-       /*! Do not fork() */
-       AST_OPT_FLAG_NO_FORK = (1 << 1),
-       /*! Keep quiet */
-       AST_OPT_FLAG_QUIET = (1 << 2),
-       /*! Console mode */
-       AST_OPT_FLAG_CONSOLE = (1 << 3),
-       /*! Run in realtime Linux priority */
-       AST_OPT_FLAG_HIGH_PRIORITY = (1 << 4),
-       /*! Initialize keys for RSA authentication */
-       AST_OPT_FLAG_INIT_KEYS = (1 << 5),
-       /*! Remote console */
-       AST_OPT_FLAG_REMOTE = (1 << 6),
-       /*! Execute an asterisk CLI command upon startup */
-       AST_OPT_FLAG_EXEC = (1 << 7),
-       /*! Don't use termcap colors */
-       AST_OPT_FLAG_NO_COLOR = (1 << 8),
-       /*! Are we fully started yet? */
-       AST_OPT_FLAG_FULLY_BOOTED = (1 << 9),
-       /*! Trascode via signed linear */
-       AST_OPT_FLAG_TRANSCODE_VIA_SLIN = (1 << 10),
-       /*! Enable priority jumping in applications */
-       AST_OPT_FLAG_PRIORITY_JUMPING = (1 << 11),
-       /*! Dump core on a seg fault */
-       AST_OPT_FLAG_DUMP_CORE = (1 << 12),
-       /*! Cache sound files */
-       AST_OPT_FLAG_CACHE_RECORD_FILES = (1 << 13),
-       /*! Display timestamp in CLI verbose output */
-       AST_OPT_FLAG_TIMESTAMP = (1 << 14),
-       /*! Override config */
-       AST_OPT_FLAG_OVERRIDE_CONFIG = (1 << 15),
-       /*! Reconnect */
-       AST_OPT_FLAG_RECONNECT = (1 << 16),
-       /*! Transmit Silence during Record() */
-       AST_OPT_FLAG_TRANSMIT_SILENCE = (1 << 17),
-       /*! Suppress some warnings */
-       AST_OPT_FLAG_DONT_WARN = (1 << 18),
-       /*! End CDRs before the 'h' extension */
-       AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN = (1 << 19),
-       /*! Use DAHDI Timing for generators if available */
-       AST_OPT_FLAG_INTERNAL_TIMING = (1 << 20),
-       /*! Always fork, even if verbose or debug settings are non-zero */
-       AST_OPT_FLAG_ALWAYS_FORK = (1 << 21),
-       /*! Disable log/verbose output to remote consoles */
-       AST_OPT_FLAG_MUTE = (1 << 22)
-};
-
 /*! These are the options that set by default when Asterisk starts */
 #define AST_DEFAULT_OPTIONS AST_OPT_FLAG_TRANSCODE_VIA_SLIN
 
@@ -1850,8 +1793,6 @@ extern int option_maxcalls;               /*!< Maximum number of simultaneous channels */
 extern double option_maxload;
 extern char defaultlanguage[];
 
-extern time_t ast_startuptime;
-extern time_t ast_lastreloadtime;
 extern pid_t ast_mainpid;
 
 extern char record_cache_dir[AST_CACHE_DIR_LEN];
@@ -2639,8 +2580,8 @@ struct ast_switch {
 };
 
 
-static char *config = "extensions.conf";
-static char *registrar = "conf2ael";
+static char *config_filename = "extensions.conf";
+static char *global_registrar = "conf2ael";
 static char userscontext[AST_MAX_EXTENSION] = "default";
 static int static_config = 0;
 static int write_protect_config = 1;
@@ -2706,14 +2647,6 @@ static const char *ast_var_name(const struct ast_var_t *var)
        return name;
 }
 
-
-/* stolen from asterisk.c */
-
-static struct ast_flags ast_options = { AST_DEFAULT_OPTIONS };
-static int option_verbose = 0;                         /*!< Verbosity level */
-static int option_debug = 0;                           /*!< Debug level */
-
-
 /* experiment 1: see if it's easier just to use existing config code
  *               to read in the extensions.conf file. In this scenario, 
                  I have to rip/copy code from other modules, because they
@@ -2735,7 +2668,7 @@ static void ast_log(int level, const char *file, int line, const char *function,
        va_end(vars);
 }
 
-static void __attribute__((format (printf, 1, 2))) ast_verbose(const char *fmt, ...)
+void __attribute__((format (printf, 1, 2))) ast_verbose(const char *fmt, ...)
 {
        va_list vars;
        va_start(vars,fmt);
@@ -3791,9 +3724,9 @@ static struct ast_config *config_text_file_load(const char *database, const char
                                }
                                
                                if (process_buf) {
-                                       char *buf = ast_strip(process_buf);
-                                       if (!ast_strlen_zero(buf)) {
-                                               if (process_text_line(cfg, &cat, buf, lineno, filename, withcomments, suggested_include_file)) {
+                                       char *stripped_process_buf = ast_strip(process_buf);
+                                       if (!ast_strlen_zero(stripped_process_buf)) {
+                                               if (process_text_line(cfg, &cat, stripped_process_buf, lineno, filename, withcomments, suggested_include_file)) {
                                                        cfg = NULL;
                                                        break;
                                                }
@@ -4473,7 +4406,7 @@ static int ext_cmp1(const char **p)
                return 0x40000; /* XXX make this entry go last... */
        }
 
-       bzero(chars, sizeof(chars));    /* clear all chars in the set */
+       memset(chars, '\0', sizeof(chars));     /* clear all chars in the set */
        for (; *p < end  ; (*p)++) {
                unsigned char c1, c2;   /* first-last char in range */
                c1 = (unsigned char)((*p)[0]);
@@ -5249,16 +5182,16 @@ int localized_context_add_switch2(struct ast_context *con, const char *value,
 
 static struct ast_context *__ast_context_create(struct ast_context **extcontexts, const char *name, const char *registrar, int existsokay)
 {
-       struct ast_context *tmp, **local_contexts;
+       struct ast_context *tmp, **loc_contexts;
        int length = sizeof(struct ast_context) + strlen(name) + 1;
 
        if (!extcontexts) {
                ast_wrlock_contexts();
-               local_contexts = &contexts;
+               loc_contexts = &contexts;
        } else
-               local_contexts = extcontexts;
+               loc_contexts = extcontexts;
 
-       for (tmp = *local_contexts; tmp; tmp = tmp->next) {
+       for (tmp = *loc_contexts; tmp; tmp = tmp->next) {
                if (!strcasecmp(tmp->name, name)) {
                        if (!existsokay) {
                                ast_log(LOG_WARNING, "Tried to register context '%s', already in use\n", name);
@@ -5275,10 +5208,10 @@ static struct ast_context *__ast_context_create(struct ast_context **extcontexts
                strcpy(tmp->name, name);
                tmp->root = NULL;
                tmp->registrar = registrar;
-               tmp->next = *local_contexts;
+               tmp->next = *loc_contexts;
                tmp->includes = NULL;
                tmp->ignorepats = NULL;
-               *local_contexts = tmp;
+               *loc_contexts = tmp;
                if (option_debug)
                        ast_log(LOG_DEBUG, "Registered context '%s'\n", tmp->name);
                if (option_verbose > 2)
@@ -5916,7 +5849,7 @@ static int pbx_load_config(const char *config_file)
                /* All categories but "general" or "globals" are considered contexts */
                if (!strcasecmp(cxt, "general") || !strcasecmp(cxt, "globals"))
                        continue;
-               con=ast_context_find_or_create(&local_contexts,NULL,cxt, registrar);
+               con=ast_context_find_or_create(&local_contexts,NULL,cxt, global_registrar);
                if (con == NULL)
                        continue;
 
@@ -6004,7 +5937,7 @@ static int pbx_load_config(const char *config_file)
                                                lastpri = ipri;
                                                if (!ast_opt_dont_warn && !strcmp(realext, "_."))
                                                        ast_log(LOG_WARNING, "The use of '_.' for an extension is strongly discouraged and can have unexpected behavior.  Please use '_X.' instead at line %d\n", v->lineno);
-                                               if (ast_add_extension2(con, 0, realext, ipri, label, cidmatch, appl, strdup(data), ast_free, registrar)) {
+                                               if (ast_add_extension2(con, 0, realext, ipri, label, cidmatch, appl, strdup(data), ast_free, global_registrar)) {
                                                        ast_log(LOG_WARNING, "Unable to register extension at line %d\n", v->lineno);
                                                }
                                        }
@@ -6013,12 +5946,12 @@ static int pbx_load_config(const char *config_file)
                        } else if (!strcasecmp(v->name, "include")) {
                                memset(realvalue, 0, sizeof(realvalue));
                                pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
-                               if (ast_context_add_include2(con, realvalue, registrar))
+                               if (ast_context_add_include2(con, realvalue, global_registrar))
                                        ast_log(LOG_WARNING, "Unable to include context '%s' in context '%s'\n", v->value, cxt);
                        } else if (!strcasecmp(v->name, "ignorepat")) {
                                memset(realvalue, 0, sizeof(realvalue));
                                pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
-                               if (ast_context_add_ignorepat2(con, realvalue, registrar))
+                               if (ast_context_add_ignorepat2(con, realvalue, global_registrar))
                                        ast_log(LOG_WARNING, "Unable to include ignorepat '%s' in context '%s'\n", v->value, cxt);
                        } else if (!strcasecmp(v->name, "switch") || !strcasecmp(v->name, "lswitch") || !strcasecmp(v->name, "eswitch")) {
                                char *stringp= realvalue;
@@ -6033,7 +5966,7 @@ static int pbx_load_config(const char *config_file)
                                data = strsep(&stringp, ""); /* XXX what for ? */
                                if (!data)
                                        data = "";
-                               if (ast_context_add_switch2(con, appl, data, !strcasecmp(v->name, "eswitch"), registrar))
+                               if (ast_context_add_switch2(con, appl, data, !strcasecmp(v->name, "eswitch"), global_registrar))
                                        ast_log(LOG_WARNING, "Unable to include switch '%s' in context '%s'\n", v->value, cxt);
                        } else {
                                ast_log(LOG_WARNING, "==!!== Unknown directive: %s at line %d -- IGNORING!!!\n", v->name, v->lineno);
@@ -6193,12 +6126,12 @@ int localized_pbx_load_module(void)
 {
        struct ast_context *con;
 
-       if(!pbx_load_config(config))
+       if(!pbx_load_config(config_filename))
                return -1 /* AST_MODULE_LOAD_DECLINE*/;
 
        /* pbx_load_users(); */ /* does this affect the dialplan? */
 
-       ast_merge_contexts_and_delete(&local_contexts, registrar);
+       ast_merge_contexts_and_delete(&local_contexts, global_registrar);
 
        for (con = NULL; (con = ast_walk_contexts(con));)
                ast_context_verify_includes(con);