Issue 5852 (casper) Code clean up, adding documentation on new switches. Thanks!
authorOlle Johansson <oej@edvina.net>
Fri, 31 Mar 2006 00:33:28 +0000 (00:33 +0000)
committerOlle Johansson <oej@edvina.net>
Fri, 31 Mar 2006 00:33:28 +0000 (00:33 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@16616 65c4cc65-6c06-0410-ace0-fbb531ad65f3

asterisk.c

index 1177dfd..4e8f259 100644 (file)
@@ -30,7 +30,7 @@
  *
  * \section copyright Copyright and author
  *
- * Copyright (C) 1999 - 2005, Digium, Inc.
+ * Copyright (C) 1999 - 2006, Digium, Inc.
  * Asterisk is a trade mark registered by Digium, Inc.
  *
  * \author Mark Spencer <markster@digium.com>
@@ -216,7 +216,7 @@ char ast_config_AST_CTL_PERMISSIONS[AST_CONFIG_MAX_PATH];
 char ast_config_AST_CTL_OWNER[AST_CONFIG_MAX_PATH] = "\0";
 char ast_config_AST_CTL_GROUP[AST_CONFIG_MAX_PATH] = "\0";
 char ast_config_AST_CTL[AST_CONFIG_MAX_PATH] = "asterisk.ctl";
-char ast_config_AST_SYSTEM_NAME[20]="";
+char ast_config_AST_SYSTEM_NAME[20] = "";
 
 static char *_argv[256];
 static int shuttingdown = 0;
@@ -462,7 +462,7 @@ int ast_safe_system(const char *s)
 static void ast_network_puts(const char *string)
 {
        int x;
-       for (x=0;x<AST_MAX_CONNECTS; x++) {
+       for (x=0; x < AST_MAX_CONNECTS; x++) {
                if (consoles[x].fd > -1) 
                        fdprint(consoles[x].p[1], string);
        }
@@ -503,7 +503,7 @@ static pthread_t lthread;
 static void *netconsole(void *vconsole)
 {
        struct console *con = vconsole;
-       char hostname[MAXHOSTNAMELEN]="";
+       char hostname[MAXHOSTNAMELEN] = "";
        char tmp[512];
        int res;
        struct pollfd fds[2];
@@ -566,11 +566,11 @@ static void *listener(void *unused)
        pthread_attr_t attr;
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-       for(;;) {
+       for (;;) {
                if (ast_socket < 0)
                        return NULL;
                fds[0].fd = ast_socket;
-               fds[0].events= POLLIN;
+               fds[0].events = POLLIN;
                s = poll(fds, 1, -1);
                if (s < 0) {
                        if (errno != EINTR)
@@ -583,7 +583,7 @@ static void *listener(void *unused)
                        if (errno != EINTR)
                                ast_log(LOG_WARNING, "Accept returned %d: %s\n", s, strerror(errno));
                } else {
-                       for (x=0;x<AST_MAX_CONNECTS;x++) {
+                       for (x = 0; x < AST_MAX_CONNECTS; x++) {
                                if (consoles[x].fd < 0) {
                                        if (socketpair(AF_LOCAL, SOCK_STREAM, 0, consoles[x].p)) {
                                                ast_log(LOG_ERROR, "Unable to create pipe: %s\n", strerror(errno));
@@ -829,7 +829,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
                        if (option_verbose && ast_opt_console)
                                ast_verbose("Beginning asterisk %s....\n", restart ? "restart" : "shutdown");
                        time(&s);
-                       for(;;) {
+                       for (;;) {
                                time(&e);
                                /* Wait up to 15 seconds for all channels to go away */
                                if ((e - s) > 15)
@@ -846,7 +846,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
                                ast_begin_shutdown(0);
                        if (option_verbose && ast_opt_console)
                                ast_verbose("Waiting for inactivity to perform %s...\n", restart ? "restart" : "halt");
-                       for(;;) {
+                       for (;;) {
                                if (!ast_active_channels())
                                        break;
                                if (!shuttingdown)
@@ -895,7 +895,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
                if (option_verbose || ast_opt_console)
                        ast_verbose("Preparing for Asterisk restart...\n");
                /* Mark all FD's for closing on exec */
-               for (x=3;x<32768;x++) {
+               for (x=3; x < 32768; x++) {
                        fcntl(x, F_SETFD, FD_CLOEXEC);
                }
                if (option_verbose || ast_opt_console)
@@ -940,7 +940,7 @@ static const char *fix_header(char *outbuf, int maxout, const char *s, char *cmp
 static void console_verboser(const char *s, int pos, int replace, int complete)
 {
        char tmp[80];
-       const char *c=NULL;
+       const char *c = NULL;
        /* Return to the beginning of the line */
        if (!pos) {
                fprintf(stdout, "\r");
@@ -964,7 +964,7 @@ static void console_verboser(const char *s, int pos, int replace, int complete)
 
 static int ast_all_zeros(char *s)
 {
-       while(*s) {
+       while (*s) {
                if (*s > 32)
                        return 0;
                s++;  
@@ -1234,8 +1234,8 @@ static struct ast_cli_entry core_cli[] = {
 
 static int ast_el_read_char(EditLine *el, char *cp)
 {
-       int num_read=0;
-       int lastpos=0;
+       int num_read = 0;
+       int lastpos = 0;
        struct pollfd fds[2];
        int res;
        int max;
@@ -1276,7 +1276,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
                                        int tries;
                                        int reconnects_per_second = 20;
                                        fprintf(stderr, "Attempting to reconnect for 30 seconds\n");
-                                       for (tries=0;tries<30 * reconnects_per_second;tries++) {
+                                       for (tries=0; tries < 30 * reconnects_per_second; tries++) {
                                                if (ast_tryconnect()) {
                                                        fprintf(stderr, "Reconnect succeeded after %.3f seconds\n", 1.0 / reconnects_per_second * tries);
                                                        printf(term_quit());
@@ -1315,7 +1315,7 @@ static char *cli_prompt(EditLine *el)
 {
        static char prompt[200];
        char *pfmt;
-       int color_used=0;
+       int color_used = 0;
        char term_code[20];
 
        if ((pfmt = getenv("ASTERISK_PROMPT"))) {
@@ -1334,100 +1334,100 @@ static char *cli_prompt(EditLine *el)
 
                                t++;
                                switch (*t) {
-                                       case 'C': /* color */
-                                               t++;
-                                               if (sscanf(t, "%d;%d%n", &fgcolor, &bgcolor, &i) == 2) {
-                                                       strncat(p, term_color_code(term_code, fgcolor, bgcolor, sizeof(term_code)),sizeof(prompt) - strlen(prompt) - 1);
-                                                       t += i - 1;
-                                               } else if (sscanf(t, "%d%n", &fgcolor, &i) == 1) {
-                                                       strncat(p, term_color_code(term_code, fgcolor, 0, sizeof(term_code)),sizeof(prompt) - strlen(prompt) - 1);
-                                                       t += i - 1;
-                                               }
+                               case 'C': /* color */
+                                       t++;
+                                       if (sscanf(t, "%d;%d%n", &fgcolor, &bgcolor, &i) == 2) {
+                                               strncat(p, term_color_code(term_code, fgcolor, bgcolor, sizeof(term_code)),sizeof(prompt) - strlen(prompt) - 1);
+                                               t += i - 1;
+                                       } else if (sscanf(t, "%d%n", &fgcolor, &i) == 1) {
+                                               strncat(p, term_color_code(term_code, fgcolor, 0, sizeof(term_code)),sizeof(prompt) - strlen(prompt) - 1);
+                                               t += i - 1;
+                                       }
 
-                                               /* If the color has been reset correctly, then there's no need to reset it later */
-                                               if ((fgcolor == COLOR_WHITE) && (bgcolor == COLOR_BLACK)) {
-                                                       color_used = 0;
-                                               } else {
-                                                       color_used = 1;
-                                               }
-                                               break;
-                                       case 'd': /* date */
-                                               memset(&tm, 0, sizeof(tm));
-                                               time(&ts);
-                                               if (localtime_r(&ts, &tm)) {
-                                                       strftime(p, sizeof(prompt) - strlen(prompt), "%Y-%m-%d", &tm);
-                                               }
-                                               break;
-                                       case 'h': /* hostname */
-                                               if (!gethostname(hostname, sizeof(hostname) - 1)) {
-                                                       strncat(p, hostname, sizeof(prompt) - strlen(prompt) - 1);
-                                               } else {
-                                                       strncat(p, "localhost", sizeof(prompt) - strlen(prompt) - 1);
-                                               }
-                                               break;
-                                       case 'H': /* short hostname */
-                                               if (!gethostname(hostname, sizeof(hostname) - 1)) {
-                                                       for (i=0;i<sizeof(hostname);i++) {
-                                                               if (hostname[i] == '.') {
-                                                                       hostname[i] = '\0';
-                                                                       break;
-                                                               }
+                                       /* If the color has been reset correctly, then there's no need to reset it later */
+                                       if ((fgcolor == COLOR_WHITE) && (bgcolor == COLOR_BLACK)) {
+                                               color_used = 0;
+                                       } else {
+                                               color_used = 1;
+                                       }
+                                       break;
+                               case 'd': /* date */
+                                       memset(&tm, 0, sizeof(tm));
+                                       time(&ts);
+                                       if (localtime_r(&ts, &tm)) {
+                                               strftime(p, sizeof(prompt) - strlen(prompt), "%Y-%m-%d", &tm);
+                                       }
+                                       break;
+                               case 'h': /* hostname */
+                                       if (!gethostname(hostname, sizeof(hostname) - 1)) {
+                                               strncat(p, hostname, sizeof(prompt) - strlen(prompt) - 1);
+                                       } else {
+                                               strncat(p, "localhost", sizeof(prompt) - strlen(prompt) - 1);
+                                       }
+                                       break;
+                               case 'H': /* short hostname */
+                                       if (!gethostname(hostname, sizeof(hostname) - 1)) {
+                                               for (i = 0; i < sizeof(hostname); i++) {
+                                                       if (hostname[i] == '.') {
+                                                               hostname[i] = '\0';
+                                                               break;
                                                        }
-                                                       strncat(p, hostname, sizeof(prompt) - strlen(prompt) - 1);
-                                               } else {
-                                                       strncat(p, "localhost", sizeof(prompt) - strlen(prompt) - 1);
                                                }
-                                               break;
+                                               strncat(p, hostname, sizeof(prompt) - strlen(prompt) - 1);
+                                       } else {
+                                               strncat(p, "localhost", sizeof(prompt) - strlen(prompt) - 1);
+                                       }
+                                       break;
 #ifdef linux
-                                       case 'l': /* load avg */
-                                               t++;
-                                               if ((LOADAVG = fopen("/proc/loadavg", "r"))) {
-                                                       float avg1, avg2, avg3;
-                                                       int actproc, totproc, npid, which;
-                                                       fscanf(LOADAVG, "%f %f %f %d/%d %d",
-                                                               &avg1, &avg2, &avg3, &actproc, &totproc, &npid);
-                                                       if (sscanf(t, "%d", &which) == 1) {
-                                                               switch (which) {
-                                                                       case 1:
-                                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg1);
-                                                                               break;
-                                                                       case 2:
-                                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg2);
-                                                                               break;
-                                                                       case 3:
-                                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg3);
-                                                                               break;
-                                                                       case 4:
-                                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%d/%d", actproc, totproc);
-                                                                               break;
-                                                                       case 5:
-                                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%d", npid);
-                                                                               break;
-                                                               }
+                               case 'l': /* load avg */
+                                       t++;
+                                       if ((LOADAVG = fopen("/proc/loadavg", "r"))) {
+                                               float avg1, avg2, avg3;
+                                               int actproc, totproc, npid, which;
+                                               fscanf(LOADAVG, "%f %f %f %d/%d %d",
+                                                       &avg1, &avg2, &avg3, &actproc, &totproc, &npid);
+                                               if (sscanf(t, "%d", &which) == 1) {
+                                                       switch (which) {
+                                                       case 1:
+                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg1);
+                                                               break;
+                                                       case 2:
+                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg2);
+                                                               break;
+                                                       case 3:
+                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%.2f", avg3);
+                                                               break;
+                                                       case 4:
+                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%d/%d", actproc, totproc);
+                                                               break;
+                                                       case 5:
+                                                               snprintf(p, sizeof(prompt) - strlen(prompt), "%d", npid);
+                                                               break;
                                                        }
                                                }
-                                               break;
+                                       }
+                                       break;
 #endif
-                                       case 't': /* time */
-                                               memset(&tm, 0, sizeof(tm));
-                                               time(&ts);
-                                               if (localtime_r(&ts, &tm)) {
-                                                       strftime(p, sizeof(prompt) - strlen(prompt), "%H:%M:%S", &tm);
-                                               }
-                                               break;
-                                       case '#': /* process console or remote? */
-                                               if (!ast_opt_remote) {
-                                                       strncat(p, "#", sizeof(prompt) - strlen(prompt) - 1);
-                                               } else {
-                                                       strncat(p, ">", sizeof(prompt) - strlen(prompt) - 1);
-                                               }
-                                               break;
-                                       case '%': /* literal % */
-                                               strncat(p, "%", sizeof(prompt) - strlen(prompt) - 1);
-                                               break;
-                                       case '\0': /* % is last character - prevent bug */
-                                               t--;
-                                               break;
+                               case 't': /* time */
+                                       memset(&tm, 0, sizeof(tm));
+                                       time(&ts);
+                                       if (localtime_r(&ts, &tm)) {
+                                               strftime(p, sizeof(prompt) - strlen(prompt), "%H:%M:%S", &tm);
+                                       }
+                                       break;
+                               case '#': /* process console or remote? */
+                                       if (!ast_opt_remote) {
+                                               strncat(p, "#", sizeof(prompt) - strlen(prompt) - 1);
+                                       } else {
+                                               strncat(p, ">", sizeof(prompt) - strlen(prompt) - 1);
+                                       }
+                                       break;
+                               case '%': /* literal % */
+                                       strncat(p, "%", sizeof(prompt) - strlen(prompt) - 1);
+                                       break;
+                               case '\0': /* % is last character - prevent bug */
+                                       t--;
+                                       break;
                                }
                                while (*p != '\0') {
                                        p++;
@@ -1551,7 +1551,7 @@ static int ast_cli_display_match_list(char **matches, int len, int max)
 
 static char *cli_complete(EditLine *el, int ch)
 {
-       int len=0;
+       int len = 0;
        char *ptr;
        int nummatches = 0;
        char **matches;
@@ -1750,7 +1750,7 @@ static void ast_remotecontrol(char * data)
        char *version;
        int pid;
        char tmp[80];
-       char *stringp=NULL;
+       char *stringp = NULL;
 
        char *ebuf;
        int num = 0;
@@ -1758,13 +1758,13 @@ static void ast_remotecontrol(char * data)
        read(ast_consock, buf, sizeof(buf));
        if (data)
                write(ast_consock, data, strlen(data) + 1);
-       stringp=buf;
+       stringp = buf;
        hostname = strsep(&stringp, "/");
        cpid = strsep(&stringp, "/");
        version = strsep(&stringp, "\n");
        if (!version)
                version = "<Version Unknown>";
-       stringp=hostname;
+       stringp = hostname;
        strsep(&stringp, ".");
        if (cpid)
                pid = atoi(cpid);
@@ -1797,7 +1797,7 @@ static void ast_remotecontrol(char * data)
                }
                return;
        }
-       for(;;) {
+       for (;;) {
                ebuf = (char *)el_gets(el, &num);
 
                if (!ast_strlen_zero(ebuf)) {
@@ -1822,7 +1822,7 @@ static int show_version(void)
 }
 
 static int show_cli_help(void) {
-       printf("Asterisk " ASTERISK_VERSION ", Copyright (C) 1999 - 2005, Digium, Inc. and others.\n");
+       printf("Asterisk " ASTERISK_VERSION ", Copyright (C) 1999 - 2006, Digium, Inc. and others.\n");
        printf("Usage: asterisk [OPTIONS]\n");
        printf("Valid Options:\n");
        printf("   -V              Display version number and exit\n");
@@ -1835,6 +1835,9 @@ static int show_cli_help(void) {
        printf("   -g              Dump core in case of a crash\n");
        printf("   -h              This help screen\n");
        printf("   -i              Initialize crypto keys at startup\n");
+       printf("   -I              Enable internal timing if Zaptel timer is available\n");
+       printf("   -L <load>       Limit the maximum load average before rejecting new calls\n");
+       printf("   -M <value>      Limit the maximum number of calls to the specified value\n");
        printf("   -n              Disable console colorization\n");
        printf("   -p              Run as pseudo-realtime thread\n");
        printf("   -q              Quiet mode (suppress output)\n");
@@ -2004,23 +2007,23 @@ int main(int argc, char *argv[])
 {
        int c;
        char filename[80] = "";
-       char hostname[MAXHOSTNAMELEN]="";
+       char hostname[MAXHOSTNAMELEN] = "";
        char tmp[80];
        char * xarg = NULL;
        int x;
        FILE *f;
        sigset_t sigs;
        int num;
-       int is_child_of_nonroot=0;
+       int is_child_of_nonroot = 0;
        char *buf;
-       char *runuser=NULL, *rungroup=NULL;
+       char *runuser = NULL, *rungroup = NULL;
 
        /* Remember original args for restart */
        if (argc > sizeof(_argv) / sizeof(_argv[0]) - 1) {
                fprintf(stderr, "Truncating argument size to %d\n", (int)(sizeof(_argv) / sizeof(_argv[0])) - 1);
                argc = sizeof(_argv) / sizeof(_argv[0]) - 1;
        }
-       for (x=0;x<argc;x++)
+       for (x=0; x<argc; x++)
                _argv[x] = argv[x];
        _argv[x] = NULL;
 
@@ -2039,21 +2042,14 @@ int main(int argc, char *argv[])
        tdd_init();
        /* When Asterisk restarts after it has dropped the root privileges,
         * it can't issue setuid(), setgid(), setgroups() or set_priority() 
-        * */
+        */
        if (getenv("ASTERISK_ALREADY_NONROOT"))
                is_child_of_nonroot=1;
        if (getenv("HOME")) 
                snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME"));
-       /* Check if we're root */
-       /*
-       if (geteuid()) {
-               ast_log(LOG_ERROR, "Must be run as root\n");
-               exit(1);
-       }
-       */
        /* Check for options */
-       while((c=getopt(argc, argv, "tThfdvVqprRgciInx:U:G:C:L:M:")) != -1) {
-               switch(c) {
+       while ((c = getopt(argc, argv, "tThfdvVqprRgciInx:U:G:C:L:M:")) != -1) {
+               switch (c) {
                case 'd':
                        option_debug++;
                        ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
@@ -2091,7 +2087,6 @@ int main(int argc, char *argv[])
                case 'q':
                        ast_set_flag(&ast_options, AST_OPT_FLAG_QUIET);
                        break;
-                       break;
                case 't':
                        ast_set_flag(&ast_options, AST_OPT_FLAG_CACHE_RECORD_FILES);
                        break;
@@ -2112,7 +2107,7 @@ int main(int argc, char *argv[])
                case 'i':
                        ast_set_flag(&ast_options, AST_OPT_FLAG_INIT_KEYS);
                        break;
-               case'g':
+               case 'g':
                        ast_set_flag(&ast_options, AST_OPT_FLAG_DUMP_CORE);
                        break;
                case 'h':
@@ -2160,6 +2155,7 @@ int main(int argc, char *argv[])
                rungroup = ast_config_AST_RUN_GROUP;
        if ((!runuser) && !ast_strlen_zero(ast_config_AST_RUN_USER))
                runuser = ast_config_AST_RUN_USER;
+
 #ifndef __CYGWIN__
 
        if (!is_child_of_nonroot) 
@@ -2205,7 +2201,7 @@ int main(int argc, char *argv[])
                        ast_log(LOG_WARNING, "Unable to setuid to %d (%s)\n", (int)pw->pw_uid, runuser);
                        exit(1);
                }
-               setenv("ASTERISK_ALREADY_NONROOT","yes",1);
+               setenv("ASTERISK_ALREADY_NONROOT", "yes", 1);
                if (option_verbose)
                        ast_verbose("Running as user '%s'\n", runuser);
        }
@@ -2230,7 +2226,6 @@ int main(int argc, char *argv[])
        register_config_cli();
        read_config_maps();
        
-
        if (ast_opt_console) {
                if (el_hist == NULL || el == NULL)
                        ast_el_initialize();
@@ -2259,7 +2254,7 @@ int main(int argc, char *argv[])
                        exit(1);
                }
        } else if (ast_opt_remote || ast_opt_exec) {
-               ast_log(LOG_ERROR, "Unable to connect to remote asterisk (does %s exist?)\n",ast_config_AST_SOCKET);
+               ast_log(LOG_ERROR, "Unable to connect to remote asterisk (does %s exist?)\n", ast_config_AST_SOCKET);
                printf(term_quit());
                exit(1);
        }
@@ -2273,7 +2268,7 @@ int main(int argc, char *argv[])
                ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", ast_config_AST_PID, strerror(errno));
 
        if (!option_verbose && !option_debug && !ast_opt_no_fork && !ast_opt_console) {
-               daemon(0,0);
+               daemon(0, 0);
                /* Blindly re-write pid file since we are forking */
                unlink(ast_config_AST_PID);
                f = fopen(ast_config_AST_PID, "w");
@@ -2390,7 +2385,6 @@ int main(int argc, char *argv[])
        ast_rtp_reload();
 #endif
 
-
        /* We might have the option of showing a console, but for now just
           do nothing... */
        if (ast_opt_console && !option_verbose)
@@ -2423,7 +2417,7 @@ int main(int argc, char *argv[])
                                consolehandler((char *)buf);
                        } else {
                                if (write(STDOUT_FILENO, "\nUse EXIT or QUIT to exit the asterisk console\n",
-                                                                 strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
+                                               strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
                                        /* Whoa, stdout disappeared from under us... Make /dev/null's */
                                        int fd;
                                        fd = open("/dev/null", O_RDWR);
@@ -2431,7 +2425,7 @@ int main(int argc, char *argv[])
                                                dup2(fd, STDOUT_FILENO);
                                                dup2(fd, STDIN_FILENO);
                                        } else
-                                               ast_log(LOG_WARNING, "Failed to open /dev/null to recover from dead console.  Bad things will happen!\n");
+                                               ast_log(LOG_WARNING, "Failed to open /dev/null to recover from dead console. Bad things will happen!\n");
                                        break;
                                }
                        }