#include "asterisk/autoconfig.h"
#include "asterisk/compat.h"
#include "asterisk/paths.h"
Include dependency graph for asterisk.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Defines | |
#define | ASTERISK_FILE_VERSION(file, version) |
Register/unregister a source code file with the core. | |
#define | DEFAULT_LANGUAGE "en" |
#define | DEFAULT_SAMPLE_RATE 8000 |
#define | DEFAULT_SAMPLES_PER_MS ((DEFAULT_SAMPLE_RATE)/1000) |
#define | sched_setscheduler __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__ |
#define | setpriority __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__ |
Functions | |
int | ast_add_profile (const char *, uint64_t scale) |
support for event profiling | |
void | ast_builtins_init (void) |
initialize the _full_cmd string in * each of the builtins. | |
void | ast_channels_init (void) |
int64_t | ast_mark (int, int start1_stop0) |
int | ast_module_reload (const char *name) |
Reload asterisk modules. | |
int64_t | ast_profile (int, int64_t) |
int | ast_register_atexit (void(*func)(void)) |
Register a function to be executed before Asterisk exits. | |
void | ast_register_file_version (const char *file, const char *version) |
Register the version of a source code file with the core. | |
int | ast_set_priority (int) |
We set ourselves to a high priority, that we might pre-empt everything else. If your PBX has heavy activity on it, this is a good thing. | |
int | ast_term_init (void) |
void | ast_unregister_atexit (void(*func)(void)) |
Unregister a function registered with ast_register_atexit(). | |
void | ast_unregister_file_version (const char *file) |
Unregister a source code file from the core. | |
int | astdb_init (void) |
void | close_logger (void) |
int | dnsmgr_init (void) |
int | dnsmgr_reload (void) |
void | dnsmgr_start_refresh (void) |
int | init_framer (void) |
int | init_logger (void) |
int | load_modules (unsigned int) |
int | load_pbx (void) |
int | reload_logger (int) |
void | threadstorage_init (void) |
Variables | |
char | ast_config_AST_AGI_DIR [PATH_MAX] |
char | ast_config_AST_CONFIG_DIR [PATH_MAX] |
char | ast_config_AST_CONFIG_FILE [PATH_MAX] |
char | ast_config_AST_CTL [PATH_MAX] |
char | ast_config_AST_CTL_GROUP [PATH_MAX] |
char | ast_config_AST_CTL_OWNER [PATH_MAX] |
char | ast_config_AST_CTL_PERMISSIONS [PATH_MAX] |
char | ast_config_AST_DATA_DIR [PATH_MAX] |
char | ast_config_AST_DB [PATH_MAX] |
char | ast_config_AST_KEY_DIR [PATH_MAX] |
char | ast_config_AST_LOG_DIR [PATH_MAX] |
char | ast_config_AST_MODULE_DIR [PATH_MAX] |
char | ast_config_AST_MONITOR_DIR [PATH_MAX] |
char | ast_config_AST_PID [PATH_MAX] |
char | ast_config_AST_RUN_DIR [PATH_MAX] |
char | ast_config_AST_SOCKET [PATH_MAX] |
char | ast_config_AST_SPOOL_DIR [PATH_MAX] |
char | ast_config_AST_SYSTEM_NAME [20] |
char | ast_config_AST_VAR_DIR [PATH_MAX] |
Definition in file asterisk.h.
#define ASTERISK_FILE_VERSION | ( | file, | |||
version | ) |
Register/unregister a source code file with the core.
file | the source file name | |
version | the version string (typically a CVS revision keyword string) |
Example:
ASTERISK_FILE_VERSION(__FILE__, "\$Revision\$")
Definition at line 172 of file asterisk.h.
#define DEFAULT_LANGUAGE "en" |
Definition at line 34 of file asterisk.h.
#define DEFAULT_SAMPLE_RATE 8000 |
Definition at line 36 of file asterisk.h.
Referenced by check_header(), ogg_vorbis_rewrite(), setformat(), and write_header().
#define DEFAULT_SAMPLES_PER_MS ((DEFAULT_SAMPLE_RATE)/1000) |
Definition at line 37 of file asterisk.h.
Referenced by ast_stream_fastforward(), ast_stream_rewind(), and isAnsweringMachine().
#define sched_setscheduler __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__ |
#define setpriority __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__ |
int ast_add_profile | ( | const char * | name, | |
uint64_t | scale | |||
) |
support for event profiling
Definition at line 370 of file asterisk.c.
References ast_calloc, ast_realloc, ast_strdup, profile_data::e, profile_data::entries, profile_entry::events, profile_entry::mark, profile_data::max_size, profile_entry::name, prof_data, profile_entry::scale, and profile_entry::value.
Referenced by extension_match_core(), and handle_astobj2_test().
00371 { 00372 int l = sizeof(struct profile_data); 00373 int n = 10; /* default entries */ 00374 00375 if (prof_data == NULL) { 00376 prof_data = ast_calloc(1, l + n*sizeof(struct profile_entry)); 00377 if (prof_data == NULL) 00378 return -1; 00379 prof_data->entries = 0; 00380 prof_data->max_size = n; 00381 } 00382 if (prof_data->entries >= prof_data->max_size) { 00383 void *p; 00384 n = prof_data->max_size + 20; 00385 p = ast_realloc(prof_data, l + n*sizeof(struct profile_entry)); 00386 if (p == NULL) 00387 return -1; 00388 prof_data = p; 00389 prof_data->max_size = n; 00390 } 00391 n = prof_data->entries++; 00392 prof_data->e[n].name = ast_strdup(name); 00393 prof_data->e[n].value = 0; 00394 prof_data->e[n].events = 0; 00395 prof_data->e[n].mark = 0; 00396 prof_data->e[n].scale = scale; 00397 return n; 00398 }
void ast_builtins_init | ( | void | ) |
initialize the _full_cmd string in * each of the builtins.
Provided by cli.c
Definition at line 1496 of file cli.c.
References ast_cli_entry::_full_cmd, ast_cli_register_multiple(), ast_join(), ast_log(), builtins, cli_cli, ast_cli_entry::cmda, LOG_WARNING, and strdup.
Referenced by main().
01497 { 01498 struct ast_cli_entry *e; 01499 01500 for (e = builtins; e->cmda[0] != NULL; e++) { 01501 char buf[80]; 01502 ast_join(buf, sizeof(buf), e->cmda); 01503 e->_full_cmd = strdup(buf); 01504 if (!e->_full_cmd) 01505 ast_log(LOG_WARNING, "-- cannot allocate <%s>\n", buf); 01506 } 01507 01508 ast_cli_register_multiple(cli_cli, sizeof(cli_cli) / sizeof(struct ast_cli_entry)); 01509 }
void ast_channels_init | ( | void | ) |
Provided by channel.c
Definition at line 4592 of file channel.c.
References ast_cli_register_multiple(), and cli_channel.
Referenced by main().
04593 { 04594 ast_cli_register_multiple(cli_channel, sizeof(cli_channel) / sizeof(struct ast_cli_entry)); 04595 }
int64_t ast_mark | ( | int | , | |
int | start1_stop0 | |||
) |
Definition at line 432 of file asterisk.c.
References profile_data::e, profile_data::entries, profile_entry::events, profile_entry::mark, prof_data, rdtsc(), profile_entry::scale, and profile_entry::value.
Referenced by extension_match_core(), and handle_astobj2_test().
00433 { 00434 if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */ 00435 return 0; 00436 if (startstop == 1) 00437 prof_data->e[i].mark = rdtsc(); 00438 else { 00439 prof_data->e[i].mark = (rdtsc() - prof_data->e[i].mark); 00440 if (prof_data->e[i].scale > 1) 00441 prof_data->e[i].mark /= prof_data->e[i].scale; 00442 prof_data->e[i].value += prof_data->e[i].mark; 00443 prof_data->e[i].events++; 00444 } 00445 return prof_data->e[i].mark; 00446 }
int ast_module_reload | ( | const char * | name | ) |
Reload asterisk modules.
name | the name of the module to reload |
Definition at line 546 of file loader.c.
References ast_lastreloadtime, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_mutex_trylock(), ast_mutex_unlock(), ast_verbose(), ast_module::declined, ast_module_info::description, ast_module::flags, ast_module::info, option_verbose, ast_module_info::reload, resource_name_match(), ast_module::running, and VERBOSE_PREFIX_3.
Referenced by action_updateconfig(), handle_reload(), handle_reload_deprecated(), and monitor_sig_flags().
00547 { 00548 struct ast_module *cur; 00549 int res = 0; /* return value. 0 = not found, others, see below */ 00550 int i; 00551 00552 if (ast_mutex_trylock(&reloadlock)) { 00553 ast_verbose("The previous reload command didn't finish yet\n"); 00554 return -1; /* reload already in progress */ 00555 } 00556 ast_lastreloadtime = time(NULL); 00557 00558 /* Call "predefined" reload here first */ 00559 for (i = 0; reload_classes[i].name; i++) { 00560 if (!name || !strcasecmp(name, reload_classes[i].name)) { 00561 reload_classes[i].reload_fn(); /* XXX should check error ? */ 00562 res = 2; /* found and reloaded */ 00563 } 00564 } 00565 00566 if (name && res) { 00567 ast_mutex_unlock(&reloadlock); 00568 return res; 00569 } 00570 00571 AST_LIST_LOCK(&module_list); 00572 AST_LIST_TRAVERSE(&module_list, cur, entry) { 00573 const struct ast_module_info *info = cur->info; 00574 00575 if (name && resource_name_match(name, cur->resource)) 00576 continue; 00577 00578 if (!(cur->flags.running || cur->flags.declined)) 00579 continue; 00580 00581 if (!info->reload) { /* cannot be reloaded */ 00582 if (res < 1) /* store result if possible */ 00583 res = 1; /* 1 = no reload() method */ 00584 continue; 00585 } 00586 00587 res = 2; 00588 if (option_verbose > 2) 00589 ast_verbose(VERBOSE_PREFIX_3 "Reloading module '%s' (%s)\n", cur->resource, info->description); 00590 info->reload(); 00591 } 00592 AST_LIST_UNLOCK(&module_list); 00593 00594 ast_mutex_unlock(&reloadlock); 00595 00596 return res; 00597 }
int64_t ast_profile | ( | int | , | |
int64_t | ||||
) |
Definition at line 400 of file asterisk.c.
References profile_data::e, profile_data::entries, profile_entry::events, prof_data, profile_entry::scale, and profile_entry::value.
00401 { 00402 if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */ 00403 return 0; 00404 if (prof_data->e[i].scale > 1) 00405 delta /= prof_data->e[i].scale; 00406 prof_data->e[i].value += delta; 00407 prof_data->e[i].events++; 00408 return prof_data->e[i].value; 00409 }
int ast_register_atexit | ( | void(*)(void) | func | ) |
Register a function to be executed before Asterisk exits.
func | The callback function to use. |
Definition at line 700 of file asterisk.c.
References ast_calloc, AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_UNLOCK, and ast_unregister_atexit().
Referenced by do_reload(), and load_module().
00701 { 00702 int res = -1; 00703 struct ast_atexit *ae; 00704 ast_unregister_atexit(func); 00705 AST_LIST_LOCK(&atexits); 00706 if ((ae = ast_calloc(1, sizeof(*ae)))) { 00707 AST_LIST_INSERT_HEAD(&atexits, ae, list); 00708 ae->func = func; 00709 res = 0; 00710 } 00711 AST_LIST_UNLOCK(&atexits); 00712 return res; 00713 }
void ast_register_file_version | ( | const char * | file, | |
const char * | version | |||
) |
Register the version of a source code file with the core.
file | the source file name | |
version | the version string (typically a CVS revision keyword string) |
Definition at line 254 of file asterisk.c.
References ast_calloc, AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_UNLOCK, ast_strdupa, and ast_strip_quoted().
00255 { 00256 struct file_version *new; 00257 char *work; 00258 size_t version_length; 00259 00260 work = ast_strdupa(version); 00261 work = ast_strip(ast_strip_quoted(work, "$", "$")); 00262 version_length = strlen(work) + 1; 00263 00264 if (!(new = ast_calloc(1, sizeof(*new) + version_length))) 00265 return; 00266 00267 new->file = file; 00268 new->version = (char *) new + sizeof(*new); 00269 memcpy(new->version, work, version_length); 00270 AST_LIST_LOCK(&file_versions); 00271 AST_LIST_INSERT_HEAD(&file_versions, new, list); 00272 AST_LIST_UNLOCK(&file_versions); 00273 }
int ast_set_priority | ( | int | ) |
We set ourselves to a high priority, that we might pre-empt everything else. If your PBX has heavy activity on it, this is a good thing.
Provided by asterisk.c
Definition at line 1189 of file asterisk.c.
References ast_log(), ast_verbose(), LOG_WARNING, sched_setscheduler, and setpriority.
Referenced by app_exec(), ast_safe_system(), icesencode(), launch_script(), main(), mp3play(), NBScatplay(), send_waveform_to_fd(), spawn_mp3(), and spawn_ras().
01190 { 01191 struct sched_param sched; 01192 memset(&sched, 0, sizeof(sched)); 01193 #ifdef __linux__ 01194 if (pri) { 01195 sched.sched_priority = 10; 01196 if (sched_setscheduler(0, SCHED_RR, &sched)) { 01197 ast_log(LOG_WARNING, "Unable to set high priority\n"); 01198 return -1; 01199 } else 01200 if (option_verbose) 01201 ast_verbose("Set to realtime thread\n"); 01202 } else { 01203 sched.sched_priority = 0; 01204 /* According to the manpage, these parameters can never fail. */ 01205 sched_setscheduler(0, SCHED_OTHER, &sched); 01206 } 01207 #else 01208 if (pri) { 01209 if (setpriority(PRIO_PROCESS, 0, -10) == -1) { 01210 ast_log(LOG_WARNING, "Unable to set high priority\n"); 01211 return -1; 01212 } else 01213 if (option_verbose) 01214 ast_verbose("Set to high priority\n"); 01215 } else { 01216 /* According to the manpage, these parameters can never fail. */ 01217 setpriority(PRIO_PROCESS, 0, 0); 01218 } 01219 #endif 01220 return 0; 01221 }
int ast_term_init | ( | void | ) |
Provided by term.c
Definition at line 75 of file term.c.
References ast_opt_console, ast_opt_no_color, ast_opt_no_fork, ATTR_BRIGHT, ATTR_RESET, COLOR_BLACK, COLOR_BROWN, COLOR_WHITE, convshort(), and ESC.
Referenced by main().
00076 { 00077 char *term = getenv("TERM"); 00078 char termfile[256] = ""; 00079 char buffer[512] = ""; 00080 int termfd = -1, parseokay = 0, i; 00081 00082 if (!term) 00083 return 0; 00084 if (!ast_opt_console || ast_opt_no_color || !ast_opt_no_fork) 00085 return 0; 00086 00087 for (i=0 ;; i++) { 00088 if (termpath[i] == NULL) { 00089 break; 00090 } 00091 snprintf(termfile, sizeof(termfile), "%s/%c/%s", termpath[i], *term, term); 00092 termfd = open(termfile, O_RDONLY); 00093 if (termfd > -1) { 00094 break; 00095 } 00096 } 00097 if (termfd > -1) { 00098 int actsize = read(termfd, buffer, sizeof(buffer) - 1); 00099 short sz_names = convshort(buffer + 2); 00100 short sz_bools = convshort(buffer + 4); 00101 short n_nums = convshort(buffer + 6); 00102 00103 /* if ((sz_names + sz_bools) & 1) 00104 sz_bools++; */ 00105 00106 if (sz_names + sz_bools + n_nums < actsize) { 00107 /* Offset 13 is defined in /usr/include/term.h, though we do not 00108 * include it here, as it conflicts with include/asterisk/term.h */ 00109 short max_colors = convshort(buffer + 12 + sz_names + sz_bools + 13 * 2); 00110 if (max_colors > 0) { 00111 vt100compat = 1; 00112 } 00113 parseokay = 1; 00114 } 00115 close(termfd); 00116 } 00117 00118 if (!parseokay) { 00119 /* These comparisons should not be substrings nor case-insensitive, as 00120 * terminal types are very particular about how they treat suffixes and 00121 * capitalization. For example, terminal type 'linux-m' does NOT 00122 * support color, while 'linux' does. Not even all vt100* terminals 00123 * support color, either (e.g. 'vt100+fnkeys'). */ 00124 if (!strcmp(term, "linux")) { 00125 vt100compat = 1; 00126 } else if (!strcmp(term, "xterm")) { 00127 vt100compat = 1; 00128 } else if (!strcmp(term, "xterm-color")) { 00129 vt100compat = 1; 00130 } else if (!strncmp(term, "Eterm", 5)) { 00131 /* Both entries which start with Eterm support color */ 00132 vt100compat = 1; 00133 } else if (!strcmp(term, "vt100")) { 00134 vt100compat = 1; 00135 } else if (!strncmp(term, "crt", 3)) { 00136 /* Both crt terminals support color */ 00137 vt100compat = 1; 00138 } 00139 } 00140 00141 if (vt100compat) { 00142 /* Make commands show up in nice colors */ 00143 snprintf(prepdata, sizeof(prepdata), "%c[%d;%d;%dm", ESC, ATTR_BRIGHT, COLOR_BROWN, COLOR_BLACK + 10); 00144 snprintf(enddata, sizeof(enddata), "%c[%d;%d;%dm", ESC, ATTR_RESET, COLOR_WHITE, COLOR_BLACK + 10); 00145 snprintf(quitdata, sizeof(quitdata), "%c[0m", ESC); 00146 } 00147 return 0; 00148 }
void ast_unregister_atexit | ( | void(*)(void) | func | ) |
Unregister a function registered with ast_register_atexit().
func | The callback function to unregister. |
Definition at line 715 of file asterisk.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, and ast_atexit::func.
Referenced by ast_register_atexit(), and do_reload().
00716 { 00717 struct ast_atexit *ae; 00718 AST_LIST_LOCK(&atexits); 00719 AST_LIST_TRAVERSE_SAFE_BEGIN(&atexits, ae, list) { 00720 if (ae->func == func) { 00721 AST_LIST_REMOVE_CURRENT(&atexits, list); 00722 break; 00723 } 00724 } 00725 AST_LIST_TRAVERSE_SAFE_END 00726 AST_LIST_UNLOCK(&atexits); 00727 }
void ast_unregister_file_version | ( | const char * | file | ) |
Unregister a source code file from the core.
file | the source file name |
Definition at line 275 of file asterisk.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, and free.
00276 { 00277 struct file_version *find; 00278 00279 AST_LIST_LOCK(&file_versions); 00280 AST_LIST_TRAVERSE_SAFE_BEGIN(&file_versions, find, list) { 00281 if (!strcasecmp(find->file, file)) { 00282 AST_LIST_REMOVE_CURRENT(&file_versions, list); 00283 break; 00284 } 00285 } 00286 AST_LIST_TRAVERSE_SAFE_END; 00287 AST_LIST_UNLOCK(&file_versions); 00288 if (find) 00289 free(find); 00290 }
int astdb_init | ( | void | ) |
Provided by db.c
Definition at line 584 of file db.c.
References ast_cli_register_multiple(), ast_manager_register, cli_database, dbinit(), EVENT_FLAG_SYSTEM, manager_dbget(), and manager_dbput().
Referenced by main().
00585 { 00586 dbinit(); 00587 ast_cli_register_multiple(cli_database, sizeof(cli_database) / sizeof(struct ast_cli_entry)); 00588 ast_manager_register("DBGet", EVENT_FLAG_SYSTEM, manager_dbget, "Get DB Entry"); 00589 ast_manager_register("DBPut", EVENT_FLAG_SYSTEM, manager_dbput, "Put DB Entry"); 00590 return 0; 00591 }
void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 620 of file logger.c.
References AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, eventlog, f, and qlog.
Referenced by quit_handler().
00621 { 00622 struct logchannel *f; 00623 00624 AST_LIST_LOCK(&logchannels); 00625 00626 if (eventlog) { 00627 fclose(eventlog); 00628 eventlog = NULL; 00629 } 00630 00631 if (qlog) { 00632 fclose(qlog); 00633 qlog = NULL; 00634 } 00635 00636 AST_LIST_TRAVERSE(&logchannels, f, list) { 00637 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00638 fclose(f->fileptr); 00639 f->fileptr = NULL; 00640 } 00641 } 00642 00643 closelog(); /* syslog */ 00644 00645 AST_LIST_UNLOCK(&logchannels); 00646 00647 return; 00648 }
int dnsmgr_init | ( | void | ) |
Provided by dnsmgr.c
Definition at line 337 of file dnsmgr.c.
References ast_cli_register(), ast_log(), cli_reload, cli_status, do_reload(), LOG_ERROR, sched, and sched_context_create().
Referenced by main().
00338 { 00339 if (!(sched = sched_context_create())) { 00340 ast_log(LOG_ERROR, "Unable to create schedule context.\n"); 00341 return -1; 00342 } 00343 ast_cli_register(&cli_reload); 00344 ast_cli_register(&cli_status); 00345 return do_reload(1); 00346 }
int dnsmgr_reload | ( | void | ) |
Provided by dnsmgr.c
Definition at line 348 of file dnsmgr.c.
References do_reload().
00349 { 00350 return do_reload(0); 00351 }
void dnsmgr_start_refresh | ( | void | ) |
Provided by dnsmgr.c
Definition at line 252 of file dnsmgr.c.
References ast_sched_add_variable(), ast_sched_del(), master_refresh_info, refresh_list(), and sched.
Referenced by main().
00253 { 00254 if (refresh_sched > -1) { 00255 ast_sched_del(sched, refresh_sched); 00256 refresh_sched = ast_sched_add_variable(sched, 100, refresh_list, &master_refresh_info, 1); 00257 } 00258 }
int init_framer | ( | void | ) |
Provided by frame.c
Definition at line 1036 of file frame.c.
References ast_cli_register_multiple(), and my_clis.
Referenced by main().
01037 { 01038 ast_cli_register_multiple(my_clis, sizeof(my_clis) / sizeof(struct ast_cli_entry)); 01039 return 0; 01040 }
int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 581 of file logger.c.
References ast_cli_register_multiple(), ast_config_AST_LOG_DIR, ast_log(), ast_queue_log(), ast_verbose(), cli_logger, eventlog, EVENTLOG, handle_SIGXFSZ(), init_logger_chain(), LOG_ERROR, LOG_EVENT, logfiles, option_verbose, qlog, and QUEUELOG.
Referenced by main().
00582 { 00583 char tmp[256]; 00584 int res = 0; 00585 00586 /* auto rotate if sig SIGXFSZ comes a-knockin */ 00587 (void) signal(SIGXFSZ,(void *) handle_SIGXFSZ); 00588 00589 /* register the logger cli commands */ 00590 ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry)); 00591 00592 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00593 00594 /* create log channels */ 00595 init_logger_chain(); 00596 00597 /* create the eventlog */ 00598 if (logfiles.event_log) { 00599 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00600 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00601 eventlog = fopen((char *)tmp, "a"); 00602 if (eventlog) { 00603 ast_log(LOG_EVENT, "Started Asterisk Event Logger\n"); 00604 if (option_verbose) 00605 ast_verbose("Asterisk Event Logger Started %s\n",(char *)tmp); 00606 } else { 00607 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00608 res = -1; 00609 } 00610 } 00611 00612 if (logfiles.queue_log) { 00613 snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00614 qlog = fopen(tmp, "a"); 00615 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); 00616 } 00617 return res; 00618 }
int load_modules | ( | unsigned | int | ) |
Provided by loader.c
Definition at line 725 of file loader.c.
References add_to_load_order(), ast_config_AST_MODULE_DIR, ast_config_load(), AST_LIST_HEAD_INIT_NOLOCK, AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, ast_log(), AST_MODULE_CONFIG, ast_opt_quiet, ast_true(), ast_variable_browse(), ast_variable_retrieve(), ast_verbose(), embedding, find_resource(), ast_module::flags, free, ast_module::lib, ast_variable::name, ast_variable::next, option_verbose, load_order_entry::resource, resource_name_match(), ast_module::running, and ast_variable::value.
Referenced by main().
00726 { 00727 struct ast_config *cfg; 00728 struct ast_module *mod; 00729 struct load_order_entry *order; 00730 struct ast_variable *v; 00731 unsigned int load_count; 00732 struct load_order load_order; 00733 int res = 0; 00734 #if LOADABLE_MODULES 00735 struct dirent *dirent; 00736 DIR *dir; 00737 #endif 00738 00739 /* all embedded modules have registered themselves by now */ 00740 embedding = 0; 00741 00742 if (option_verbose) 00743 ast_verbose("Asterisk Dynamic Loader Starting:\n"); 00744 00745 AST_LIST_HEAD_INIT_NOLOCK(&load_order); 00746 00747 AST_LIST_LOCK(&module_list); 00748 00749 if (!(cfg = ast_config_load(AST_MODULE_CONFIG))) { 00750 ast_log(LOG_WARNING, "No '%s' found, no modules will be loaded.\n", AST_MODULE_CONFIG); 00751 goto done; 00752 } 00753 00754 /* first, find all the modules we have been explicitly requested to load */ 00755 for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) { 00756 if (!strcasecmp(v->name, preload_only ? "preload" : "load")) 00757 add_to_load_order(v->value, &load_order); 00758 } 00759 00760 /* check if 'autoload' is on */ 00761 if (!preload_only && ast_true(ast_variable_retrieve(cfg, "modules", "autoload"))) { 00762 /* if so, first add all the embedded modules that are not already running to the load order */ 00763 AST_LIST_TRAVERSE(&module_list, mod, entry) { 00764 /* if it's not embedded, skip it */ 00765 if (mod->lib) 00766 continue; 00767 00768 if (mod->flags.running) 00769 continue; 00770 00771 order = add_to_load_order(mod->resource, &load_order); 00772 } 00773 00774 #if LOADABLE_MODULES 00775 /* if we are allowed to load dynamic modules, scan the directory for 00776 for all available modules and add them as well */ 00777 if ((dir = opendir(ast_config_AST_MODULE_DIR))) { 00778 while ((dirent = readdir(dir))) { 00779 int ld = strlen(dirent->d_name); 00780 00781 /* Must end in .so to load it. */ 00782 00783 if (ld < 4) 00784 continue; 00785 00786 if (strcasecmp(dirent->d_name + ld - 3, ".so")) 00787 continue; 00788 00789 /* if there is already a module by this name in the module_list, 00790 skip this file */ 00791 if (find_resource(dirent->d_name, 0)) 00792 continue; 00793 00794 add_to_load_order(dirent->d_name, &load_order); 00795 } 00796 00797 closedir(dir); 00798 } else { 00799 if (!ast_opt_quiet) 00800 ast_log(LOG_WARNING, "Unable to open modules directory '%s'.\n", 00801 ast_config_AST_MODULE_DIR); 00802 } 00803 #endif 00804 } 00805 00806 /* now scan the config for any modules we are prohibited from loading and 00807 remove them from the load order */ 00808 for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) { 00809 if (strcasecmp(v->name, "noload")) 00810 continue; 00811 00812 AST_LIST_TRAVERSE_SAFE_BEGIN(&load_order, order, entry) { 00813 if (!resource_name_match(order->resource, v->value)) { 00814 AST_LIST_REMOVE_CURRENT(&load_order, entry); 00815 free(order->resource); 00816 free(order); 00817 } 00818 } 00819 AST_LIST_TRAVERSE_SAFE_END; 00820 } 00821 00822 /* we are done with the config now, all the information we need is in the 00823 load_order list */ 00824 ast_config_destroy(cfg); 00825 00826 load_count = 0; 00827 AST_LIST_TRAVERSE(&load_order, order, entry) 00828 load_count++; 00829 00830 if (load_count) 00831 ast_log(LOG_NOTICE, "%d modules will be loaded.\n", load_count); 00832 00833 /* first, load only modules that provide global symbols */ 00834 AST_LIST_TRAVERSE_SAFE_BEGIN(&load_order, order, entry) { 00835 switch (load_resource(order->resource, 1)) { 00836 case AST_MODULE_LOAD_SUCCESS: 00837 case AST_MODULE_LOAD_DECLINE: 00838 AST_LIST_REMOVE_CURRENT(&load_order, entry); 00839 free(order->resource); 00840 free(order); 00841 break; 00842 case AST_MODULE_LOAD_FAILURE: 00843 res = -1; 00844 goto done; 00845 case AST_MODULE_LOAD_SKIP: 00846 /* try again later */ 00847 break; 00848 } 00849 } 00850 AST_LIST_TRAVERSE_SAFE_END; 00851 00852 /* now load everything else */ 00853 AST_LIST_TRAVERSE_SAFE_BEGIN(&load_order, order, entry) { 00854 switch (load_resource(order->resource, 0)) { 00855 case AST_MODULE_LOAD_SUCCESS: 00856 case AST_MODULE_LOAD_DECLINE: 00857 AST_LIST_REMOVE_CURRENT(&load_order, entry); 00858 free(order->resource); 00859 free(order); 00860 break; 00861 case AST_MODULE_LOAD_FAILURE: 00862 res = -1; 00863 goto done; 00864 case AST_MODULE_LOAD_SKIP: 00865 /* should not happen */ 00866 break; 00867 } 00868 } 00869 AST_LIST_TRAVERSE_SAFE_END; 00870 00871 done: 00872 while ((order = AST_LIST_REMOVE_HEAD(&load_order, entry))) { 00873 free(order->resource); 00874 free(order); 00875 } 00876 00877 AST_LIST_UNLOCK(&module_list); 00878 00879 return res; 00880 }
int load_pbx | ( | void | ) |
Provided by pbx.c
Definition at line 6047 of file pbx.c.
References ast_cli_register_multiple(), ast_log(), ast_register_application(), ast_verbose(), builtins, LOG_ERROR, option_verbose, pbx_cli, and VERBOSE_PREFIX_1.
Referenced by main().
06048 { 06049 int x; 06050 06051 /* Initialize the PBX */ 06052 if (option_verbose) { 06053 ast_verbose( "Asterisk PBX Core Initializing\n"); 06054 ast_verbose( "Registering builtin applications:\n"); 06055 } 06056 ast_cli_register_multiple(pbx_cli, sizeof(pbx_cli) / sizeof(struct ast_cli_entry)); 06057 06058 /* Register builtin applications */ 06059 for (x=0; x<sizeof(builtins) / sizeof(struct pbx_builtin); x++) { 06060 if (option_verbose) 06061 ast_verbose( VERBOSE_PREFIX_1 "[%s]\n", builtins[x].name); 06062 if (ast_register_application(builtins[x].name, builtins[x].execute, builtins[x].synopsis, builtins[x].description)) { 06063 ast_log(LOG_ERROR, "Unable to register builtin application '%s'\n", builtins[x].name); 06064 return -1; 06065 } 06066 } 06067 return 0; 06068 }
int reload_logger | ( | int | ) |
Provided by logger.c
Definition at line 368 of file logger.c.
References ast_config_AST_LOG_DIR, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_log(), ast_queue_log(), ast_verbose(), EVENT_FLAG_SYSTEM, EVENTLOG, eventlog, f, init_logger_chain(), LOG_ERROR, LOG_EVENT, logfiles, manager_event(), option_verbose, qlog, and QUEUELOG.
Referenced by ast_log(), handle_logger_reload(), and handle_logger_rotate().
00369 { 00370 char old[PATH_MAX] = ""; 00371 char new[PATH_MAX]; 00372 int event_rotate = rotate, queue_rotate = rotate; 00373 struct logchannel *f; 00374 FILE *myf; 00375 int x, res = 0; 00376 00377 AST_LIST_LOCK(&logchannels); 00378 00379 if (eventlog) 00380 fclose(eventlog); 00381 else 00382 event_rotate = 0; 00383 eventlog = NULL; 00384 00385 if (qlog) 00386 fclose(qlog); 00387 else 00388 queue_rotate = 0; 00389 qlog = NULL; 00390 00391 mkdir((char *)ast_config_AST_LOG_DIR, 0755); 00392 00393 AST_LIST_TRAVERSE(&logchannels, f, list) { 00394 if (f->disabled) { 00395 f->disabled = 0; /* Re-enable logging at reload */ 00396 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); 00397 } 00398 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00399 fclose(f->fileptr); /* Close file */ 00400 f->fileptr = NULL; 00401 if (rotate) { 00402 ast_copy_string(old, f->filename, sizeof(old)); 00403 00404 for (x = 0; ; x++) { 00405 snprintf(new, sizeof(new), "%s.%d", f->filename, x); 00406 myf = fopen((char *)new, "r"); 00407 if (myf) 00408 fclose(myf); 00409 else 00410 break; 00411 } 00412 00413 /* do it */ 00414 if (rename(old,new)) 00415 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); 00416 } 00417 } 00418 } 00419 00420 filesize_reload_needed = 0; 00421 00422 init_logger_chain(); 00423 00424 if (logfiles.event_log) { 00425 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); 00426 if (event_rotate) { 00427 for (x=0;;x++) { 00428 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); 00429 myf = fopen((char *)new, "r"); 00430 if (myf) /* File exists */ 00431 fclose(myf); 00432 else 00433 break; 00434 } 00435 00436 /* do it */ 00437 if (rename(old,new)) 00438 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00439 } 00440 00441 eventlog = fopen(old, "a"); 00442 if (eventlog) { 00443 ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n"); 00444 if (option_verbose) 00445 ast_verbose("Asterisk Event Logger restarted\n"); 00446 } else { 00447 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00448 res = -1; 00449 } 00450 } 00451 00452 if (logfiles.queue_log) { 00453 snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, QUEUELOG); 00454 if (queue_rotate) { 00455 for (x = 0; ; x++) { 00456 snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, QUEUELOG, x); 00457 myf = fopen((char *)new, "r"); 00458 if (myf) /* File exists */ 00459 fclose(myf); 00460 else 00461 break; 00462 } 00463 00464 /* do it */ 00465 if (rename(old, new)) 00466 ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new); 00467 } 00468 00469 qlog = fopen(old, "a"); 00470 if (qlog) { 00471 ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); 00472 ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n"); 00473 if (option_verbose) 00474 ast_verbose("Asterisk Queue Logger restarted\n"); 00475 } else { 00476 ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); 00477 res = -1; 00478 } 00479 } 00480 00481 AST_LIST_UNLOCK(&logchannels); 00482 00483 return res; 00484 }
void threadstorage_init | ( | void | ) |
char ast_config_AST_AGI_DIR[PATH_MAX] |
Definition at line 211 of file asterisk.c.
char ast_config_AST_CONFIG_DIR[PATH_MAX] |
Definition at line 203 of file asterisk.c.
char ast_config_AST_CONFIG_FILE[PATH_MAX] |
Definition at line 204 of file asterisk.c.
char ast_config_AST_CTL[PATH_MAX] |
Definition at line 222 of file asterisk.c.
char ast_config_AST_CTL_GROUP[PATH_MAX] |
Definition at line 221 of file asterisk.c.
char ast_config_AST_CTL_OWNER[PATH_MAX] |
Definition at line 220 of file asterisk.c.
char ast_config_AST_CTL_PERMISSIONS[PATH_MAX] |
Definition at line 219 of file asterisk.c.
char ast_config_AST_DATA_DIR[PATH_MAX] |
Definition at line 209 of file asterisk.c.
char ast_config_AST_DB[PATH_MAX] |
Definition at line 212 of file asterisk.c.
char ast_config_AST_KEY_DIR[PATH_MAX] |
Definition at line 213 of file asterisk.c.
char ast_config_AST_LOG_DIR[PATH_MAX] |
Definition at line 210 of file asterisk.c.
char ast_config_AST_MODULE_DIR[PATH_MAX] |
Definition at line 205 of file asterisk.c.
char ast_config_AST_MONITOR_DIR[PATH_MAX] |
Definition at line 207 of file asterisk.c.
char ast_config_AST_PID[PATH_MAX] |
Definition at line 214 of file asterisk.c.
char ast_config_AST_RUN_DIR[PATH_MAX] |
Definition at line 216 of file asterisk.c.
char ast_config_AST_SOCKET[PATH_MAX] |
Definition at line 215 of file asterisk.c.
char ast_config_AST_SPOOL_DIR[PATH_MAX] |
Definition at line 206 of file asterisk.c.
char ast_config_AST_SYSTEM_NAME[20] |
Definition at line 223 of file asterisk.c.
char ast_config_AST_VAR_DIR[PATH_MAX] |
Definition at line 208 of file asterisk.c.