aboutsummaryrefslogtreecommitdiffstats
path: root/asterisk.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-04 20:40:46 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-04 20:40:46 +0000
commitcfb1ef47122283b97ab2e05437c47b6e60f7c54f (patch)
tree6f52bce69ee88362d0b801e94372ecc39c5091d2 /asterisk.c
parentdc76ba74df2442efe2e986ee50e13247a263ed81 (diff)
convert most of the option_*'s to a single ast_flags structure. Also, fix some
formatting, remove some unnecessary casts, and other little code cleanups. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7331 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'asterisk.c')
-rw-r--r--asterisk.c181
1 files changed, 81 insertions, 100 deletions
diff --git a/asterisk.c b/asterisk.c
index 93831ac0f..025b5aeea 100644
--- a/asterisk.c
+++ b/asterisk.c
@@ -136,32 +136,17 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
Some of them can be changed in the CLI
*/
/*! @{ */
-int option_verbose=0; /*!< Verbosity level */
-int option_debug=0; /*!< Debug level */
-int option_exec_includes=0; /*!< Allow \#exec in config files? */
-int option_nofork=0; /*!< Do not fork */
-int option_quiet=0; /*!< Keep quiet */
-int option_console=0; /*!< Console mode, no background */
-int option_highpriority=0; /*!< Run in realtime Linux priority */
-int option_remote=0; /*!< Remote CLI */
-int option_exec=0; /*!< */
-int option_initcrypto=0; /*!< Initialize crypto keys for RSA auth */
-int option_nocolor; /*!< Don't use termcap colors */
-int option_dumpcore = 0; /*!< Dump core when failing */
-int option_cache_record_files = 0; /*!< Cache sound files */
-int option_timestamp = 0; /*!< Timestamp in logging */
-int option_overrideconfig = 0; /*!< */
-int option_reconnect = 0; /*!< */
-int option_transcode_slin = 1; /*!< */
-int option_maxcalls = 0; /*!< */
+
+struct ast_flags ast_options = { AST_OPT_FLAG_TRANSCODE_VIA_SLIN | AST_OPT_FLAG_PRIORITY_JUMPING };
+
+int option_verbose = 0; /*!< Verbosity level */
+int option_debug = 0; /*!< Debug level */
+
double option_maxload = 0.0; /*!< Max load avg on system */
-int option_dontwarn = 0; /*!< */
-int option_priority_jumping = 1; /*!< Enable priority jumping as result value for apps */
-int option_transmit_silence_during_record = 0; /*!< Transmit silence during record() app */
+int option_maxcalls = 0; /*!< Max number of active calls */
/*! @} */
-int fully_booted = 0;
char record_cache_dir[AST_CACHE_DIR_LEN] = AST_TMP_DIR;
char debug_filename[AST_FILENAME_MAX] = "";
@@ -831,7 +816,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
if (!nice) {
/* Begin shutdown routine, hanging up active channels */
ast_begin_shutdown(1);
- if (option_verbose && option_console)
+ if (option_verbose && ast_opt_console)
ast_verbose("Beginning asterisk %s....\n", restart ? "restart" : "shutdown");
time(&s);
for(;;) {
@@ -849,7 +834,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
} else {
if (nice < 2)
ast_begin_shutdown(0);
- if (option_verbose && option_console)
+ if (option_verbose && ast_opt_console)
ast_verbose("Waiting for inactivity to perform %s...\n", restart ? "restart" : "halt");
for(;;) {
if (!ast_active_channels())
@@ -861,12 +846,12 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
}
if (!shuttingdown) {
- if (option_verbose && option_console)
+ if (option_verbose && ast_opt_console)
ast_verbose("Asterisk %s cancelled.\n", restart ? "restart" : "shutdown");
return;
}
}
- if (option_console || option_remote) {
+ if (ast_opt_console || ast_opt_remote) {
if (getenv("HOME"))
snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME"));
if (!ast_strlen_zero(filename))
@@ -880,7 +865,7 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
ast_verbose("Executing last minute cleanups\n");
ast_run_atexits();
/* Called on exit */
- if (option_verbose && option_console)
+ if (option_verbose && ast_opt_console)
ast_verbose("Asterisk %s ending (%d).\n", ast_active_channels() ? "uncleanly" : "cleanly", num);
else if (option_debug)
ast_log(LOG_DEBUG, "Asterisk ending (%d).\n", num);
@@ -892,17 +877,18 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart)
if (ast_consock > -1)
close(ast_consock);
if (ast_socket > -1)
- unlink((char *)ast_config_AST_SOCKET);
- if (!option_remote) unlink((char *)ast_config_AST_PID);
+ unlink(ast_config_AST_SOCKET);
+ if (!ast_opt_remote)
+ unlink(ast_config_AST_PID);
printf(term_quit());
if (restart) {
- if (option_verbose || option_console)
+ 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++) {
fcntl(x, F_SETFD, FD_CLOEXEC);
}
- if (option_verbose || option_console)
+ if (option_verbose || ast_opt_console)
ast_verbose("Restarting Asterisk NOW...\n");
restartnow = 1;
@@ -961,7 +947,7 @@ static void console_verboser(const char *s, int pos, int replace, int complete)
fflush(stdout);
if (complete) {
/* Wake up a poll()ing console */
- if (option_console && consolethread != AST_PTHREADT_NULL)
+ if (ast_opt_console && consolethread != AST_PTHREADT_NULL)
pthread_kill(consolethread, SIGURG);
}
}
@@ -1172,7 +1158,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
max = 1;
fds[0].fd = ast_consock;
fds[0].events = POLLIN;
- if (!option_exec) {
+ if (!ast_opt_exec) {
fds[1].fd = STDIN_FILENO;
fds[1].events = POLLIN;
max++;
@@ -1185,7 +1171,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
break;
}
- if (!option_exec && fds[1].revents) {
+ if (!ast_opt_exec && fds[1].revents) {
num_read = read(STDIN_FILENO, cp, 1);
if (num_read < 1) {
break;
@@ -1197,7 +1183,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
/* if the remote side disappears exit */
if (res < 1) {
fprintf(stderr, "\nDisconnected from Asterisk server\n");
- if (!option_reconnect) {
+ if (!ast_opt_reconnect) {
quit_handler(0, 0, 0, 0);
} else {
int tries;
@@ -1222,7 +1208,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
buf[res] = '\0';
- if (!option_exec && !lastpos)
+ if (!ast_opt_exec && !lastpos)
write(STDOUT_FILENO, "\r", 1);
write(STDOUT_FILENO, buf, res);
if ((buf[res-1] == '\n') || (buf[res-2] == '\n')) {
@@ -1343,7 +1329,7 @@ static char *cli_prompt(EditLine *el)
}
break;
case '#': /* process console or remote? */
- if (! option_remote) {
+ if (!ast_opt_remote) {
strncat(p, "#", sizeof(prompt) - strlen(prompt) - 1);
} else {
strncat(p, ">", sizeof(prompt) - strlen(prompt) - 1);
@@ -1497,7 +1483,7 @@ static char *cli_complete(EditLine *el, int ch)
len = lf->cursor - ptr;
- if (option_remote) {
+ if (ast_opt_remote) {
snprintf(buf, sizeof(buf),"_COMMAND NUMMATCHES \"%s\" \"%s\"", lf->buffer, ptr);
fdprint(ast_consock, buf);
res = read(ast_consock, buf, sizeof(buf));
@@ -1707,7 +1693,7 @@ static void ast_remotecontrol(char * data)
if (!ast_strlen_zero(filename))
ast_el_read_history(filename);
- if (option_exec && data) { /* hack to print output then exit if asterisk -rx is used */
+ if (ast_opt_exec && data) { /* hack to print output then exit if asterisk -rx is used */
char tempchar;
struct pollfd fds[0];
fds[0].fd = ast_consock;
@@ -1774,7 +1760,7 @@ static void ast_readconfig(void) {
struct ast_variable *v;
char *config = AST_CONFIG_FILE;
- if (option_overrideconfig == 1) {
+ if (ast_opt_override_config) {
cfg = ast_config_load(ast_config_AST_CONFIG_FILE);
if (!cfg)
ast_log(LOG_WARNING, "Unable to open specified master config file '%s', using built-in defaults\n", ast_config_AST_CONFIG_FILE);
@@ -1843,10 +1829,10 @@ static void ast_readconfig(void) {
option_verbose = atoi(v->value);
/* whether or not to force timestamping. (-T at startup) */
} else if (!strcasecmp(v->name, "timestamp")) {
- option_timestamp = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_TIMESTAMP);
/* whether or not to support #exec in config files */
} else if (!strcasecmp(v->name, "execincludes")) {
- option_exec_includes = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_EXEC_INCLUDES);
/* debug level (-d at startup) */
} else if (!strcasecmp(v->name, "debug")) {
option_debug = 0;
@@ -1855,40 +1841,40 @@ static void ast_readconfig(void) {
}
/* Disable forking (-f at startup) */
} else if (!strcasecmp(v->name, "nofork")) {
- option_nofork = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_NO_FORK);
/* Run quietly (-q at startup ) */
} else if (!strcasecmp(v->name, "quiet")) {
- option_quiet = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_QUIET);
/* Run as console (-c at startup, implies nofork) */
} else if (!strcasecmp(v->name, "console")) {
- option_console = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_CONSOLE);
/* Run with highg priority if the O/S permits (-p at startup) */
} else if (!strcasecmp(v->name, "highpriority")) {
- option_highpriority = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_HIGH_PRIORITY);
/* Initialize RSA auth keys (IAX2) (-i at startup) */
} else if (!strcasecmp(v->name, "initcrypto")) {
- option_initcrypto = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_INIT_KEYS);
/* Disable ANSI colors for console (-c at startup) */
} else if (!strcasecmp(v->name, "nocolor")) {
- option_nocolor = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_NO_COLOR);
/* Disable some usage warnings for picky people :p */
} else if (!strcasecmp(v->name, "dontwarn")) {
- option_dontwarn = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_DONT_WARN);
/* Dump core in case of crash (-g) */
} else if (!strcasecmp(v->name, "dumpcore")) {
- option_dumpcore = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_DUMP_CORE);
/* Cache recorded sound files to another directory during recording */
} else if (!strcasecmp(v->name, "cache_record_files")) {
- option_cache_record_files = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_CACHE_RECORD_FILES);
/* Specify cache directory */
} else if (!strcasecmp(v->name, "record_cache_dir")) {
ast_copy_string(record_cache_dir, v->value, AST_CACHE_DIR_LEN);
/* Build transcode paths via SLINEAR, instead of directly */
} else if (!strcasecmp(v->name, "transcode_via_sln")) {
- option_transcode_slin = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_TRANSCODE_VIA_SLIN);
/* Transmit SLINEAR silence while a channel is being recorded */
} else if (!strcasecmp(v->name, "transmit_silence_during_record")) {
- option_transmit_silence_during_record = ast_true(v->value);
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_TRANSMIT_SILENCE);
} else if (!strcasecmp(v->name, "maxcalls")) {
if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
option_maxcalls = 0;
@@ -1940,8 +1926,7 @@ int main(int argc, char *argv[])
/* if the progname is rasterisk consider it a remote console */
if (argv[0] && (strstr(argv[0], "rasterisk")) != NULL) {
- option_remote++;
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE);
}
if (gethostname(hostname, sizeof(hostname)-1))
ast_copy_string(hostname, "<Unknown>", sizeof(hostname));
@@ -1970,33 +1955,29 @@ int main(int argc, char *argv[])
switch(c) {
case 'd':
option_debug++;
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
case 'c':
- option_console++;
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_CONSOLE);
break;
case 'f':
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
case 'n':
- option_nocolor++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_COLOR);
break;
case 'r':
- option_remote++;
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE);
break;
case 'R':
- option_remote++;
- option_nofork++;
- option_reconnect++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE | AST_OPT_FLAG_RECONNECT);
break;
case 'p':
- option_highpriority++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_HIGH_PRIORITY);
break;
case 'v':
option_verbose++;
- option_nofork++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
case 'M':
if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0))
@@ -2007,27 +1988,27 @@ int main(int argc, char *argv[])
option_maxload = 0.0;
break;
case 'q':
- option_quiet++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_QUIET);
break;
case 't':
- option_cache_record_files++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_CACHE_RECORD_FILES);
break;
case 'T':
- option_timestamp++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_TIMESTAMP);
break;
case 'x':
- option_exec++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_EXEC);
xarg = optarg;
break;
case 'C':
- ast_copy_string((char *)ast_config_AST_CONFIG_FILE,optarg,sizeof(ast_config_AST_CONFIG_FILE));
- option_overrideconfig++;
+ ast_copy_string(ast_config_AST_CONFIG_FILE, optarg, sizeof(ast_config_AST_CONFIG_FILE));
+ ast_set_flag(&ast_options, AST_OPT_FLAG_OVERRIDE_CONFIG);
break;
case 'i':
- option_initcrypto++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_INIT_KEYS);
break;
case'g':
- option_dumpcore++;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_DUMP_CORE);
break;
case 'h':
show_cli_help();
@@ -2049,14 +2030,14 @@ int main(int argc, char *argv[])
/* For remote connections, change the name of the remote connection.
* We do this for the benefit of init scripts (which need to know if/when
* the main asterisk process has died yet). */
- if (option_remote) {
+ if (ast_opt_remote) {
strcpy(argv[0], "rasterisk");
for (x = 1; x < argc; x++) {
argv[x] = argv[0] + 10;
}
}
- if (option_dumpcore) {
+ if (ast_opt_dump_core) {
struct rlimit l;
memset(&l, 0, sizeof(l));
l.rlim_cur = RLIM_INFINITY;
@@ -2066,7 +2047,7 @@ int main(int argc, char *argv[])
}
}
- if (option_console && !option_verbose)
+ if (ast_opt_console && !option_verbose)
ast_verbose("[ Reading Master Configuration ]");
ast_readconfig();
@@ -2077,7 +2058,7 @@ int main(int argc, char *argv[])
#ifndef __CYGWIN__
if (!is_child_of_nonroot)
- ast_set_priority(option_highpriority);
+ ast_set_priority(ast_opt_high_priority);
if (!is_child_of_nonroot && rungroup) {
struct group *gr;
@@ -2120,14 +2101,14 @@ int main(int argc, char *argv[])
printf(term_end());
fflush(stdout);
- if (option_console && !option_verbose)
+ if (ast_opt_console && !option_verbose)
ast_verbose("[ Initializing Custom Configuration Options ]");
/* custom config setup */
register_config_cli();
read_config_maps();
- if (option_console) {
+ if (ast_opt_console) {
if (el_hist == NULL || el == NULL)
ast_el_initialize();
@@ -2137,8 +2118,8 @@ int main(int argc, char *argv[])
if (ast_tryconnect()) {
/* One is already running */
- if (option_remote) {
- if (option_exec) {
+ if (ast_opt_remote) {
+ if (ast_opt_exec) {
ast_remotecontrol(xarg);
quit_handler(0, 0, 0, 0);
exit(0);
@@ -2150,34 +2131,34 @@ int main(int argc, char *argv[])
quit_handler(0, 0, 0, 0);
exit(0);
} else {
- ast_log(LOG_ERROR, "Asterisk already running on %s. Use 'asterisk -r' to connect.\n", (char *)ast_config_AST_SOCKET);
+ ast_log(LOG_ERROR, "Asterisk already running on %s. Use 'asterisk -r' to connect.\n", ast_config_AST_SOCKET);
printf(term_quit());
exit(1);
}
- } else if (option_remote || option_exec) {
+ } 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);
printf(term_quit());
exit(1);
}
/* Blindly write pid file since we couldn't connect */
- unlink((char *)ast_config_AST_PID);
- f = fopen((char *)ast_config_AST_PID, "w");
+ unlink(ast_config_AST_PID);
+ f = fopen(ast_config_AST_PID, "w");
if (f) {
fprintf(f, "%d\n", getpid());
fclose(f);
} else
- ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", (char *)ast_config_AST_PID, strerror(errno));
+ ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", ast_config_AST_PID, strerror(errno));
- if (!option_verbose && !option_debug && !option_nofork && !option_console) {
+ if (!option_verbose && !option_debug && !ast_opt_no_fork && !ast_opt_console) {
daemon(0,0);
/* Blindly re-write pid file since we are forking */
- unlink((char *)ast_config_AST_PID);
- f = fopen((char *)ast_config_AST_PID, "w");
+ unlink(ast_config_AST_PID);
+ f = fopen(ast_config_AST_PID, "w");
if (f) {
fprintf(f, "%d\n", getpid());
fclose(f);
} else
- ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", (char *)ast_config_AST_PID, strerror(errno));
+ ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", ast_config_AST_PID, strerror(errno));
}
/* Test recursive mutex locking. */
@@ -2192,13 +2173,13 @@ int main(int argc, char *argv[])
sigaddset(&sigs, SIGPIPE);
sigaddset(&sigs, SIGWINCH);
pthread_sigmask(SIG_BLOCK, &sigs, NULL);
- if (option_console || option_verbose || option_remote)
+ if (ast_opt_console || option_verbose || ast_opt_remote)
ast_register_verbose(console_verboser);
/* Print a welcome message if desired */
- if (option_verbose || option_console) {
+ if (option_verbose || ast_opt_console) {
WELCOME_MESSAGE;
}
- if (option_console && !option_verbose)
+ if (ast_opt_console && !option_verbose)
ast_verbose("[ Booting...");
signal(SIGURG, urg_handler);
@@ -2285,20 +2266,20 @@ int main(int argc, char *argv[])
/* We might have the option of showing a console, but for now just
do nothing... */
- if (option_console && !option_verbose)
+ if (ast_opt_console && !option_verbose)
ast_verbose(" ]\n");
- if (option_verbose || option_console)
+ if (option_verbose || ast_opt_console)
ast_verbose(term_color(tmp, "Asterisk Ready.\n", COLOR_BRWHITE, COLOR_BLACK, sizeof(tmp)));
- if (option_nofork)
+ if (ast_opt_no_fork)
consolethread = pthread_self();
- fully_booted = 1;
+ ast_set_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED);
pthread_sigmask(SIG_UNBLOCK, &sigs, NULL);
#ifdef __AST_DEBUG_MALLOC
__ast_mm_init();
#endif
time(&ast_startuptime);
ast_cli_register_multiple(core_cli, sizeof(core_cli) / sizeof(core_cli[0]));
- if (option_console) {
+ if (ast_opt_console) {
/* Console stuff now... */
/* Register our quit function */
char title[256];