make the 'languageprefix' option default to on, and deprecate turning it off
[asterisk/asterisk.git] / main / asterisk.c
index 5d3e572..5a39339 100644 (file)
@@ -151,8 +151,6 @@ int daemon(int, int);  /* defined in libresolv of all places */
  */
 /*! @{ */
 
-extern int ast_language_is_prefix;     /* XXX move to some header */
-
 struct ast_flags ast_options = { AST_DEFAULT_OPTIONS };
 
 int option_verbose = 0;                                /*!< Verbosity level */
@@ -289,7 +287,7 @@ struct thread_list_t {
 
 static AST_LIST_HEAD_STATIC(thread_list, thread_list_t);
 
-static char show_threads_help[] =
+static const char show_threads_help[] =
 "Usage: core show threads\n"
 "       List threads currently active in the system.\n";
 
@@ -447,13 +445,13 @@ static int handle_show_profile(int fd, int argc, char *argv[])
 
        min = 0;
        max = prof_data->entries;
-       if  (argc >= 3) { /* specific entries */
-               if (isdigit(argv[2][0])) {
-                       min = atoi(argv[2]);
-                       if (argc == 4 && strcmp(argv[3], "-"))
-                               max = atoi(argv[3]);
+       if  (argc > 3) { /* specific entries */
+               if (isdigit(argv[3][0])) {
+                       min = atoi(argv[3]);
+                       if (argc == 5 && strcmp(argv[4], "-"))
+                               max = atoi(argv[4]);
                } else
-                       search = argv[2];
+                       search = argv[3];
        }
        if (max > prof_data->entries)
                max = prof_data->entries;
@@ -483,7 +481,7 @@ static int handle_show_profile(int fd, int argc, char *argv[])
        return 0;
 }
 
-static char show_version_files_help[] = 
+static const char show_version_files_help[] = 
 "Usage: core show file version [like <pattern>]\n"
 "       Lists the revision numbers of the files used to build this copy of Asterisk.\n"
 "       Optional regular expression pattern is used to filter the file list.\n";
@@ -1013,6 +1011,29 @@ static void child_handler(int sig)
        signal(sig, child_handler);
 }
 
+/*! \brief Set maximum open files */
+static void set_ulimit(int value)
+{
+       struct rlimit l = {0, 0};
+       
+       if (value <= 0) {
+               ast_log(LOG_WARNING, "Unable to change max files open to invalid value %i\n",value);
+               return;
+       }
+       
+       l.rlim_cur = value;
+       l.rlim_max = value;
+       
+       if (setrlimit(RLIMIT_NOFILE, &l)) {
+               ast_log(LOG_WARNING, "Unable to disable core size resource limit: %s\n",strerror(errno));
+               return;
+       }
+       
+       ast_log(LOG_NOTICE, "Setting max files open to %d\n",value);
+       
+       return;
+}
+
 /*! \brief Set an X-term or screen title */
 static void set_title(char *text)
 {
@@ -1273,57 +1294,57 @@ static int remoteconsolehandler(char *s)
        return ret;
 }
 
-static char abort_halt_help[] = 
+static const char abort_halt_help[] = 
 "Usage: abort shutdown\n"
 "       Causes Asterisk to abort an executing shutdown or restart, and resume normal\n"
 "       call operations.\n";
 
-static char shutdown_now_help[] = 
+static const char shutdown_now_help[] = 
 "Usage: stop now\n"
 "       Shuts down a running Asterisk immediately, hanging up all active calls .\n";
 
-static char shutdown_gracefully_help[] = 
+static const char shutdown_gracefully_help[] = 
 "Usage: stop gracefully\n"
 "       Causes Asterisk to not accept new calls, and exit when all\n"
 "       active calls have terminated normally.\n";
 
-static char shutdown_when_convenient_help[] = 
+static const char shutdown_when_convenient_help[] = 
 "Usage: stop when convenient\n"
 "       Causes Asterisk to perform a shutdown when all active calls have ended.\n";
 
-static char restart_now_help[] = 
+static const char restart_now_help[] = 
 "Usage: restart now\n"
 "       Causes Asterisk to hangup all calls and exec() itself performing a cold\n"
 "       restart.\n";
 
-static char restart_gracefully_help[] = 
+static const char restart_gracefully_help[] = 
 "Usage: restart gracefully\n"
 "       Causes Asterisk to stop accepting new calls and exec() itself performing a cold\n"
 "       restart when all active calls have ended.\n";
 
-static char restart_when_convenient_help[] = 
+static const char restart_when_convenient_help[] = 
 "Usage: restart when convenient\n"
 "       Causes Asterisk to perform a cold restart when all active calls have ended.\n";
 
-static char bang_help[] =
+static const char bang_help[] =
 "Usage: !<command>\n"
 "       Executes a given shell command\n";
 
-static char show_warranty_help[] =
+static const char show_warranty_help[] =
 "Usage: core show warranty\n"
 "      Shows the warranty (if any) for this copy of Asterisk.\n";
 
-static char show_license_help[] =
+static const char show_license_help[] =
 "Usage: core show license\n"
 "      Shows the license(s) for this copy of Asterisk.\n";
 
-static char version_help[] =
+static const char version_help[] =
 "Usage: core show version\n"
 "       Shows Asterisk version information.\n";
 
 static int handle_version(int fd, int argc, char *argv[])
 {
-       if (argc != 2)
+       if (argc != 3)
                return RESULT_SHOWUSAGE;
        ast_cli(fd, "Asterisk %s built by %s @ %s on a %s running %s on %s\n",
                ASTERISK_VERSION, ast_build_user, ast_build_hostname,
@@ -2293,6 +2314,9 @@ static void ast_readconfig(void)
                        } else if ((sscanf(v->value, "%lf", &option_maxload) != 1) || (option_maxload < 0.0)) {
                                option_maxload = 0.0;
                        }
+               /* Set the maximum amount of open files */
+               } else if (!strcasecmp(v->name, "maxfiles")) {
+                       set_ulimit(atoi(v->value));
                /* What user to run as */
                } else if (!strcasecmp(v->name, "runuser")) {
                        ast_copy_string(ast_config_AST_RUN_USER, v->value, sizeof(ast_config_AST_RUN_USER));
@@ -2467,6 +2491,9 @@ int main(int argc, char *argv[])
                ast_verbose("[ Reading Master Configuration ]\n");
        ast_readconfig();
 
+       if (!ast_language_is_prefix && !ast_opt_remote)
+               ast_log(LOG_WARNING, "The 'languageprefix' option in asterisk.conf is deprecated; in a future release it will be removed, and your sound files will need to be organized in the 'new style' language layout.\n");
+
        if (ast_opt_dump_core) {
                struct rlimit l;
                memset(&l, 0, sizeof(l));