Asterisk Logger. More...
#include "asterisk.h"#include "asterisk/_private.h"#include "asterisk/paths.h"#include <signal.h>#include <time.h>#include <sys/stat.h>#include <fcntl.h>#include <syslog.h>#include "asterisk/logger.h"#include "asterisk/lock.h"#include "asterisk/channel.h"#include "asterisk/config.h"#include "asterisk/term.h"#include "asterisk/cli.h"#include "asterisk/utils.h"#include "asterisk/manager.h"#include "asterisk/threadstorage.h"#include "asterisk/strings.h"#include "asterisk/pbx.h"#include "asterisk/app.h"
Go to the source code of this file.
Data Structures | |
| struct | logchannel |
| struct | logmsg |
| struct | verb |
Defines | |
| #define | _ASTERISK_LOGGER_H |
| #define | FORMATL "%-35.35s %-8.8s %-9.9s " |
| #define | GETTID() getpid() |
| #define | LOG_BUF_INIT_SIZE 256 |
| #define | SYSLOG_NAMES |
| #define | SYSLOG_NLEVELS sizeof(syslog_level_map) / sizeof(int) |
| #define | VERBOSE_BUF_INIT_SIZE 256 |
Enumerations | |
| enum | logmsgtypes { LOGMSG_NORMAL = 0, LOGMSG_VERBOSE } |
| enum | logtypes { LOGTYPE_SYSLOG, LOGTYPE_FILE, LOGTYPE_CONSOLE } |
| enum | rotatestrategy { SEQUENTIAL = 1 << 0, ROTATE = 1 << 1, TIMESTAMP = 1 << 2 } |
Functions | |
| void | __ast_verbose (const char *file, int line, const char *func, const char *fmt,...) |
| This works like ast_log, but prints verbose messages to the console depending on verbosity level set. ast_verbose(VERBOSE_PREFIX_3 "Whatever %s is happening\n", "nothing"); This will print the message to the console if the verbose level is set to a level >= 3 Note the abscence of a comma after the VERBOSE_PREFIX_3. This is important. VERBOSE_PREFIX_1 through VERBOSE_PREFIX_3 are defined. | |
| void | __ast_verbose_ap (const char *file, int line, const char *func, const char *fmt, va_list ap) |
| void | ast_backtrace (void) |
| void | ast_child_verbose (int level, const char *fmt,...) |
| static | AST_LIST_HEAD_STATIC (logmsgs, logmsg) |
| void | ast_log (int level, const char *file, int line, const char *function, const char *fmt,...) |
| send log messages to syslog and/or the console | |
| static void | ast_log_vsyslog (int level, const char *file, int line, const char *function, char *str, long pid) |
| void | ast_queue_log (const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt,...) |
| int | ast_register_verbose (void(*v)(const char *string)) |
| static | AST_RWLIST_HEAD_STATIC (verbosers, verb) |
| static | AST_RWLIST_HEAD_STATIC (logchannels, logchannel) |
| AST_THREADSTORAGE (log_buf) | |
| AST_THREADSTORAGE (verbose_buf) | |
| int | ast_unregister_verbose (void(*v)(const char *string)) |
| void | ast_verbose (const char *fmt,...) |
| void | close_logger (void) |
| static char * | handle_logger_reload (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
| static char * | handle_logger_rotate (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
| static char * | handle_logger_set_level (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
| static char * | handle_logger_show_channels (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
| CLI command to show logging system configuration. | |
| static int | handle_SIGXFSZ (int sig) |
| int | init_logger (void) |
| static void | init_logger_chain (int locked) |
| static void | logger_print_normal (struct logmsg *logmsg) |
| Print a normal log message to the channels. | |
| static void | logger_print_verbose (struct logmsg *logmsg) |
| Print a verbose message to the verbosers. | |
| int | logger_reload (void) |
| Reload the logger module without rotating log files (also used from loader.c during a full Asterisk reload). | |
| static void * | logger_thread (void *data) |
| Actual logging thread. | |
| static int | make_components (const char *s, int lineno) |
| static struct logchannel * | make_logchannel (const char *channel, const char *components, int lineno) |
| static int | reload_logger (int rotate) |
| static int | rotate_file (const char *filename) |
Variables | |
| static struct ast_cli_entry | cli_logger [] |
| static int | close_logger_thread |
| static int | colors [] |
| Colors used in the console for logging. | |
| static char | dateformat [256] = "%b %e %T" |
| static FILE * | eventlog |
| static char | exec_after_rotate [256] = "" |
| static int | filesize_reload_needed |
| static int | global_logmask = -1 |
| static char | hostname [MAXHOSTNAMELEN] |
| static char * | levels [] |
| Logging channels used in the Asterisk logging system. | |
| static ast_cond_t | logcond |
| struct { | |
| unsigned int event_log:1 | |
| unsigned int queue_log:1 | |
| } | logfiles |
| static pthread_t | logthread = AST_PTHREADT_NULL |
| static FILE * | qlog |
| static char | queue_log_name [256] = QUEUELOG |
| static int | syslog_level_map [] |
Asterisk Logger.
Logging routines
Definition in file logger.c.
| #define FORMATL "%-35.35s %-8.8s %-9.9s " |
Referenced by handle_logger_show_channels().
| #define SYSLOG_NLEVELS sizeof(syslog_level_map) / sizeof(int) |
Definition at line 63 of file logger.c.
Referenced by ast_log_vsyslog().
| #define VERBOSE_BUF_INIT_SIZE 256 |
Definition at line 176 of file logger.c.
Referenced by __ast_verbose_ap().
| enum logmsgtypes |
Definition at line 128 of file logger.c.
00128 { 00129 LOGMSG_NORMAL = 0, 00130 LOGMSG_VERBOSE, 00131 };
| enum logtypes |
Definition at line 110 of file logger.c.
00110 { 00111 LOGTYPE_SYSLOG, 00112 LOGTYPE_FILE, 00113 LOGTYPE_CONSOLE, 00114 };
| enum rotatestrategy |
Definition at line 97 of file logger.c.
00097 { 00098 SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */ 00099 ROTATE = 1 << 1, /* Rotate all files, such that the oldest file has the highest suffix */ 00100 TIMESTAMP = 1 << 2, /* Append the epoch timestamp onto the end of the archived file */ 00101 } rotatestrategy = SEQUENTIAL;
| void __ast_verbose | ( | const char * | file, | |
| int | line, | |||
| const char * | func, | |||
| const char * | fmt, | |||
| ... | ||||
| ) |
This works like ast_log, but prints verbose messages to the console depending on verbosity level set. ast_verbose(VERBOSE_PREFIX_3 "Whatever %s is happening\n", "nothing"); This will print the message to the console if the verbose level is set to a level >= 3 Note the abscence of a comma after the VERBOSE_PREFIX_3. This is important. VERBOSE_PREFIX_1 through VERBOSE_PREFIX_3 are defined.
Send a verbose message (based on verbose level)
Definition at line 1290 of file logger.c.
References __ast_verbose_ap().
01291 { 01292 va_list ap; 01293 va_start(ap, fmt); 01294 __ast_verbose_ap(file, line, func, fmt, ap); 01295 va_end(ap); 01296 }
| void __ast_verbose_ap | ( | const char * | file, | |
| int | line, | |||
| const char * | func, | |||
| const char * | fmt, | |||
| va_list | ap | |||
| ) |
Definition at line 1234 of file logger.c.
References __LOG_VERBOSE, ast_calloc, ast_cond_signal(), AST_DYNSTR_BUILD_FAILED, ast_free, AST_LIST_INSERT_TAIL, AST_LIST_LOCK, AST_LIST_UNLOCK, ast_localtime(), ast_log(), ast_opt_timestamp, AST_PTHREADT_NULL, ast_str_set_va(), ast_str_thread_get(), ast_strftime(), ast_tvnow(), buf, logcond, logger_print_verbose(), LOGMSG_VERBOSE, logthread, ast_str::str, logmsg::type, and VERBOSE_BUF_INIT_SIZE.
Referenced by __ast_verbose(), and ast_verbose().
01235 { 01236 struct logmsg *logmsg = NULL; 01237 struct ast_str *buf = NULL; 01238 int res = 0; 01239 01240 if (!(buf = ast_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE))) 01241 return; 01242 01243 if (ast_opt_timestamp) { 01244 struct timeval now; 01245 struct ast_tm tm; 01246 char date[40]; 01247 char *datefmt; 01248 01249 now = ast_tvnow(); 01250 ast_localtime(&now, &tm, NULL); 01251 ast_strftime(date, sizeof(date), dateformat, &tm); 01252 datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); 01253 sprintf(datefmt, "%c[%s] %s", 127, date, fmt); 01254 fmt = datefmt; 01255 } else { 01256 char *tmp = alloca(strlen(fmt) + 2); 01257 sprintf(tmp, "%c%s", 127, fmt); 01258 fmt = tmp; 01259 } 01260 01261 /* Build string */ 01262 res = ast_str_set_va(&buf, 0, fmt, ap); 01263 01264 /* If the build failed then we can drop this allocated message */ 01265 if (res == AST_DYNSTR_BUILD_FAILED) 01266 return; 01267 01268 if (!(logmsg = ast_calloc(1, sizeof(*logmsg) + res + 1))) 01269 return; 01270 01271 strcpy(logmsg->str, buf->str); 01272 01273 ast_log(__LOG_VERBOSE, file, line, func, "%s", logmsg->str + 1); 01274 01275 /* Set type */ 01276 logmsg->type = LOGMSG_VERBOSE; 01277 01278 /* Add to the list and poke the thread if possible */ 01279 if (logthread != AST_PTHREADT_NULL) { 01280 AST_LIST_LOCK(&logmsgs); 01281 AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); 01282 ast_cond_signal(&logcond); 01283 AST_LIST_UNLOCK(&logmsgs); 01284 } else { 01285 logger_print_verbose(logmsg); 01286 ast_free(logmsg); 01287 } 01288 }
| void ast_backtrace | ( | void | ) |
Definition at line 1207 of file logger.c.
References ast_bt::addresses, ast_bt_create(), ast_bt_destroy(), ast_debug, ast_log(), free, LOG_DEBUG, LOG_WARNING, and ast_bt::num_frames.
01208 { 01209 #ifdef HAVE_BKTR 01210 struct ast_bt *bt; 01211 int i = 0; 01212 char **strings; 01213 01214 if (!(bt = ast_bt_create())) { 01215 ast_log(LOG_WARNING, "Unable to allocate space for backtrace structure\n"); 01216 return; 01217 } 01218 01219 if ((strings = backtrace_symbols(bt->addresses, bt->num_frames))) { 01220 ast_debug(1, "Got %d backtrace record%c\n", bt->num_frames, bt->num_frames != 1 ? 's' : ' '); 01221 for (i = 0; i < bt->num_frames; i++) { 01222 ast_log(LOG_DEBUG, "#%d: [%p] %s\n", i, bt->addresses[i], strings[i]); 01223 } 01224 free(strings); 01225 } else { 01226 ast_debug(1, "Could not allocate memory for backtrace\n"); 01227 } 01228 ast_bt_destroy(bt); 01229 #else 01230 ast_log(LOG_WARNING, "Must run configure with '--with-execinfo' for stack backtraces.\n"); 01231 #endif 01232 }
| void ast_child_verbose | ( | int | level, | |
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 412 of file logger.c.
References ast_free, ast_malloc, msg, and option_verbose.
Referenced by launch_script().
00413 { 00414 char *msg = NULL, *emsg = NULL, *sptr, *eptr; 00415 va_list ap, aq; 00416 int size; 00417 00418 /* Don't bother, if the level isn't that high */ 00419 if (option_verbose < level) { 00420 return; 00421 } 00422 00423 va_start(ap, fmt); 00424 va_copy(aq, ap); 00425 if ((size = vsnprintf(msg, 0, fmt, ap)) < 0) { 00426 va_end(ap); 00427 va_end(aq); 00428 return; 00429 } 00430 va_end(ap); 00431 00432 if (!(msg = ast_malloc(size + 1))) { 00433 va_end(aq); 00434 return; 00435 } 00436 00437 vsnprintf(msg, size + 1, fmt, aq); 00438 va_end(aq); 00439 00440 if (!(emsg = ast_malloc(size * 2 + 1))) { 00441 ast_free(msg); 00442 return; 00443 } 00444 00445 for (sptr = msg, eptr = emsg; ; sptr++) { 00446 if (*sptr == '"') { 00447 *eptr++ = '\\'; 00448 } 00449 *eptr++ = *sptr; 00450 if (*sptr == '\0') { 00451 break; 00452 } 00453 } 00454 ast_free(msg); 00455 00456 fprintf(stdout, "verbose \"%s\" %d\n", emsg, level); 00457 fflush(stdout); 00458 ast_free(emsg); 00459 }
| static AST_LIST_HEAD_STATIC | ( | logmsgs | , | |
| logmsg | ||||
| ) | [static] |
| void ast_log | ( | int | level, | |
| const char * | file, | |||
| int | line, | |||
| const char * | function, | |||
| const char * | fmt, | |||
| ... | ||||
| ) |
send log messages to syslog and/or the console
Used for sending a log message This is the standard logger function. Probably the only way you will invoke it would be something like this: ast_log(AST_LOG_WHATEVER, "Problem with the %s Captain. We should get some more. Will %d be enough?\n", "flux capacitor", 10); where WHATEVER is one of ERROR, DEBUG, EVENT, NOTICE, or WARNING depending on which log you wish to output to. These are implemented as macros, that will provide the function with the needed arguments.
Definition at line 1085 of file logger.c.
References __LOG_DEBUG, __LOG_VERBOSE, ast_calloc, ast_cond_signal(), ast_copy_string(), AST_DYNSTR_BUILD_FAILED, ast_free, AST_LIST_INSERT_TAIL, AST_LIST_LOCK, AST_LIST_UNLOCK, ast_localtime(), AST_PTHREADT_NULL, AST_RWLIST_EMPTY, ast_str_set_va(), ast_str_thread_get(), ast_strftime(), ast_tvnow(), buf, logmsg::date, logmsg::file, logmsg::function, GETTID, logmsg::level, logmsg::line, LOG_BUF_INIT_SIZE, logcond, logger_print_normal(), LOGMSG_NORMAL, logthread, option_debug, option_verbose, logmsg::process_id, ast_str::str, term_filter_escapes(), and logmsg::type.
Referenced by __adsi_transmit_messages(), __agent_start_monitoring(), __ao2_callback(), __ao2_ref(), __ast_answer(), __ast_channel_alloc_ap(), __ast_check_signature(), __ast_check_signature_bin(), __ast_cli_register(), __ast_cli_unregister(), __ast_custom_function_register(), __ast_decrypt_bin(), __ast_dsp_call_progress(), __ast_encrypt_bin(), __ast_format_register(), __ast_http_load(), __ast_pbx_run(), __ast_play_and_record(), __ast_queue_frame(), __ast_read(), __ast_register_translator(), __ast_request_and_dial(), __ast_rtp_reload(), __ast_sign_bin(), __ast_smoother_feed(), __ast_string_field_init(), __ast_udptl_reload(), __ast_verbose_ap(), __attempt_transmit(), __auto_congest(), __dahdi_exception(), __find_callno(), __iax2_poke_noanswer(), __init_manager(), __mgcp_xmit(), __oh323_destroy(), __oh323_new(), __oh323_rtp_create(), __oh323_update_info(), __set_address_from_contact(), __sip_autodestruct(), __sip_destroy(), __sip_pretend_ack(), __sip_reliable_xmit(), __sip_xmit(), __transmit_response(), __unload_module(), _ast_adsi_get_cpeid(), _ast_adsi_get_cpeinfo(), _ast_adsi_load_session(), _ast_adsi_transmit_message_full(), _dsp_init(), _enum_array_map(), _extension_match_core(), _macro_exec(), _while_exec(), accept_thread(), access_counter_file(), acf_channel_read(), acf_channel_write(), acf_curl_exec(), acf_cut_exec(), acf_iaxvar_write(), acf_if(), acf_isexten_exec(), acf_jabberstatus_read(), acf_mailbox_exists(), acf_meetme_info(), acf_odbc_read(), acf_odbc_write(), acf_sort_exec(), acf_sprintf(), acf_strftime(), acf_strptime(), ack_trans(), action_bridge(), action_command(), action_getvar(), action_login(), add_agent(), add_agi_cmd(), add_calltoken_ignore(), add_cfg_entry(), add_codec_to_answer(), add_email_attachment(), add_exten_to_pattern_tree(), add_features_datastores(), add_header(), add_in_calls(), add_line(), add_out_calls(), add_pri_lockopt(), add_realm_authentication(), add_redirect(), add_rt_multi_cfg_entry(), add_sdp(), add_sip_domain(), add_to_agi(), add_user_extension(), admin_exec(), adsi_begin(), adsi_careful_send(), adsi_process(), adsi_prog(), advanced_options(), agent_answer(), agent_call(), agent_fixup(), agent_get_base_channel(), agent_hangup(), agent_new(), agent_read(), agent_request(), agent_set_base_channel(), agentmonitoroutgoing_exec(), agi_exec_full(), aji_act_hook(), aji_client_connect(), aji_client_info_handler(), aji_create_buddy(), aji_create_client(), aji_dinfo_handler(), aji_ditems_handler(), aji_find_version(), aji_handle_presence(), aji_handle_subscribe(), aji_initialize(), aji_load_config(), aji_pruneregister(), aji_recv(), aji_recv_loop(), aji_register_approve_handler(), aji_register_query_handler(), aji_reload(), aji_send_exec(), aji_set_presence(), aji_start_sasl(), aji_status_exec(), alarmreceiver_exec(), alloc_expr_node(), alloc_resampler(), alloc_sub(), alsa_card_init(), alsa_indicate(), alsa_new(), alsa_read(), alsa_request(), alsa_write(), announce_thread(), answer_call(), anti_injection(), app_exec(), apply_general_options(), apply_option(), apply_outgoing(), aqm_exec(), ast_add_extension2_lockopt(), ast_agi_register(), ast_agi_send(), ast_agi_unregister(), ast_aji_create_chat(), ast_aji_invite_chat(), ast_aji_join_chat(), ast_aji_send_chat(), ast_alaw_init(), ast_app_dtget(), ast_app_parse_options(), ast_app_parse_options64(), ast_append_ha(), ast_async_goto(), ast_audiohook_write_frame(), ast_autoservice_start(), ast_backtrace(), ast_best_codec(), ast_bridge_call(), ast_bridge_call_thread(), ast_call_forward(), ast_careful_fwrite(), ast_carefulwrite(), ast_cdr_alloc(), ast_cdr_end(), ast_cdr_engine_init(), ast_cdr_merge(), ast_cdr_noanswer(), ast_cdr_register(), ast_cdr_serialize_variables(), ast_cdr_setvar(), ast_cdr_submit_batch(), ast_channel_audiohook_count_by_source(), ast_channel_audiohook_count_by_source_running(), ast_channel_bridge(), ast_channel_free(), ast_channel_make_compatible_helper(), ast_channel_masquerade(), ast_channel_queryoption(), ast_channel_register(), ast_channel_setoption(), ast_channel_start_silence_generator(), ast_channel_stop_silence_generator(), ast_check_timing(), ast_codec_get_len(), ast_codec_get_samples(), ast_config_engine_register(), ast_config_internal_load(), ast_context_find_or_create(), ast_context_remove_extension_callerid2(), ast_context_verify_includes(), ast_db_get(), ast_db_gettree(), ast_db_put(), ast_device_state_engine_init(), ast_do_masquerade(), ast_dsp_call_progress(), ast_dsp_noise(), ast_dsp_process(), ast_dsp_silence(), ast_dtmf_stream(), ast_el_read_char(), ast_enable_distributed_devstate(), ast_enable_packet_fragmentation(), ast_event_check_subscriber(), ast_event_get_cached(), ast_event_get_ie_pltype(), ast_event_get_ie_type_name(), ast_event_get_type_name(), ast_event_new(), ast_event_queue(), ast_event_queue_and_cache(), ast_event_subscribe_new(), ast_extension_close(), ast_feature_request_and_dial(), ast_filehelper(), ast_find_ourip(), ast_format_unregister(), ast_func_read(), ast_func_write(), ast_get_encoded_char(), ast_get_enum(), ast_get_group(), ast_get_indication_zone(), ast_get_ip_or_srv(), ast_hangup(), ast_heap_create(), ast_http_uri_link(), ast_iax2_new(), ast_include_new(), ast_indicate_data(), ast_io_remove(), ast_ivr_menu_run_internal(), ast_jb_put(), ast_linear_stream(), ast_lock_path_flock(), ast_lock_path_lockfile(), ast_makesocket(), ast_manager_register_struct(), ast_manager_unregister(), ast_merge_contexts_and_delete(), ast_module_reload(), ast_moh_files_next(), ast_monitor_change_fname(), ast_monitor_start(), ast_monitor_stop(), ast_netsock_bindaddr(), ast_netsock_set_qos(), ast_odbc_direct_execute(), ast_odbc_find_table(), ast_odbc_prepare_and_execute(), ast_odbc_request_obj(), ast_odbc_sanity_check(), ast_odbc_smart_execute(), ast_openstream_full(), ast_openvstream(), ast_ouraddrfor(), ast_park_call_full(), ast_parse_allow_disallow(), ast_pbx_outgoing_app(), ast_pbx_outgoing_exten(), ast_pbx_run_app(), ast_pbx_start(), ast_pickup_call(), ast_playtones_start(), ast_process_pending_reloads(), ast_prod(), ast_pthread_create_detached_stack(), ast_pthread_create_stack(), ast_read_image(), ast_read_textfile(), ast_readaudio_callback(), ast_readconfig(), ast_readfile(), ast_readvideo_callback(), ast_record_review(), ast_register_application2(), ast_register_feature(), ast_register_switch(), ast_remotecontrol(), ast_request(), ast_rtcp_read(), ast_rtcp_write_rr(), ast_rtcp_write_sr(), ast_rtp_bridge(), ast_rtp_codec_setpref(), ast_rtp_early_bridge(), ast_rtp_get_qosvalue(), ast_rtp_make_compatible(), ast_rtp_new_with_bindaddr(), ast_rtp_proto_register(), ast_rtp_read(), ast_rtp_sendcng(), ast_rtp_senddigit_begin(), ast_rtp_senddigit_continuation(), ast_rtp_senddigit_end(), ast_rtp_write(), ast_safe_fork(), ast_safe_system(), ast_say_date_with_format_da(), ast_say_date_with_format_de(), ast_say_date_with_format_en(), ast_say_date_with_format_es(), ast_say_date_with_format_fr(), ast_say_date_with_format_gr(), ast_say_date_with_format_he(), ast_say_date_with_format_it(), ast_say_date_with_format_nl(), ast_say_date_with_format_pl(), ast_say_date_with_format_pt(), ast_say_date_with_format_th(), ast_say_date_with_format_zh(), ast_say_enumeration_full_he(), ast_say_number_full_pt(), ast_say_number_full_zh(), ast_sched_del(), ast_sched_runq(), ast_search_dns(), ast_set_priority(), ast_sip_ouraddrfor(), ast_slinfactory_feed(), ast_smoother_read(), ast_speech_register(), ast_stopstream(), ast_streamfile(), ast_stun_request(), ast_taskprocessor_get(), ast_taskprocessor_name(), ast_taskprocessor_push(), ast_tcptls_client_start(), ast_tcptls_server_read(), ast_tcptls_server_root(), ast_tcptls_server_start(), ast_tcptls_server_write(), ast_tps_init(), ast_translate_path_steps(), ast_translator_build_path(), ast_tryconnect(), ast_udptl_bridge(), ast_udptl_get_error_correction_scheme(), ast_udptl_get_far_max_datagram(), ast_udptl_get_local_max_datagram(), ast_udptl_new_with_bindaddr(), ast_udptl_proto_register(), ast_udptl_read(), ast_udptl_set_error_correction_scheme(), ast_udptl_set_far_max_datagram(), ast_udptl_write(), ast_ulaw_init(), ast_unload_resource(), ast_unlock_path_flock(), ast_unlock_path_lockfile(), ast_unregister_indication_country(), ast_wait_for_output(), ast_waitfor_nandfds(), ast_waitfordigit_full(), ast_write(), ast_writefile(), ast_writestream(), ast_yyerror(), async_wait(), asyncgoto_exec(), attempt_reconnect(), attempt_thread(), attempt_transfer(), audiohook_read_frame_both(), auth_exec(), authenticate(), authenticate_reply(), authenticate_verify(), autoservice_run(), available(), background_detect_exec(), base64_decode(), base64_encode(), base_encode(), birdbath(), blr_ebl(), blr_txt(), bridge_exec(), bridge_native_loop(), bridge_p2p_loop(), build_alias(), build_callno_limits(), build_channels(), build_conf(), build_device(), build_filename(), build_gateway(), build_mapping(), build_parkinglot(), build_peer(), build_reply_digest(), build_route(), build_rpid(), build_user(), builtin_atxfer(), builtin_automixmonitor(), builtin_automonitor(), builtin_blindtransfer(), bump_gains(), cache_get_callno_locked(), calc_cost(), calc_metric(), callerid_feed(), callerid_feed_jp(), callerid_get_dtmf(), callerid_read(), callerid_write(), callerpres_write(), canary_thread(), canmatch(), careful_write(), cb_events(), cb_extensionstate(), cdr_handler(), cdr_merge_vars(), chan_misdn_log(), chan_ringing(), chanavail_exec(), chandup(), channel_admin_exec(), channel_revert(), channel_spy(), channel_steer(), channel_to_session(), chanspy_exec(), check_access(), check_auth(), check_compat(), check_for_conference(), check_freq_ic706(), check_header(), check_key(), check_password(), check_post(), check_rtp_timeout(), check_srcaddr(), check_tx_freq(), check_user_full(), check_vars(), check_via(), cleanup_connection(), clear_caller(), clearcbone(), cleardisplay(), clearflag(), cleartimer(), close_call(), close_client(), close_mailbox(), collect_function_digits(), compile_script(), complete_dialplan_add_extension(), complete_dialplan_add_ignorepat(), complete_dialplan_add_include(), complete_dialplan_remove_extension(), complete_dialplan_remove_ignorepat(), complete_dialplan_remove_include(), complete_span_helper(), complete_transfer(), compose_func_args(), compress_subclass(), conf_add(), conf_del(), conf_exec(), conf_flush(), conf_queue_dtmf(), conf_run(), config_curl(), config_function_read(), config_handler(), config_ldap(), config_module(), config_odbc(), config_pgsql(), config_text_file_load(), connect_link(), connection_made(), console_autoanswer(), console_cmd(), console_indicate(), console_request(), console_video_start(), context_merge(), controlplayback_exec(), convertcap(), copy(), copy_header(), copy_message(), copy_rules(), copy_via_headers(), count_exec(), create_addr(), create_dirpath(), create_jb(), create_match_char_tree(), create_queue_member(), create_video_frame(), create_vmaccount(), crypto_load(), csv_log(), custom_log(), custom_prepare(), cut_internal(), dahdi_answer(), dahdi_bridge(), dahdi_call(), dahdi_callwait(), dahdi_confmute(), dahdi_decoder_framein(), dahdi_decoder_frameout(), dahdi_digit_begin(), dahdi_disable_ec(), dahdi_enable_ec(), dahdi_encoder_framein(), dahdi_encoder_frameout(), dahdi_fake_event(), dahdi_get_index(), dahdi_handle_dtmfup(), dahdi_handle_event(), dahdi_hangup(), dahdi_indicate(), dahdi_link(), dahdi_loopback(), dahdi_new(), dahdi_open(), dahdi_pri_error(), dahdi_pri_message(), dahdi_read(), dahdi_request(), dahdi_restart(), dahdi_ring_phone(), dahdi_sendtext(), dahdi_set_hook(), dahdi_setoption(), dahdi_show_channel(), dahdi_ss7_error(), dahdi_test_timer(), dahdi_timer_set_rate(), dahdi_train_ec(), dahdi_translate(), dahdi_write(), dahdi_write_frame(), dahdiras_exec(), dbinit(), deadagi_exec(), dec_init(), del_exec(), destroy_curl(), destroy_odbc(), destroy_pgsql(), destroy_session(), destroy_trans(), device_state_cb(), devstate_cache_cb(), devstate_change_collector_cb(), devstate_write(), dial_exec_full(), dialgroup_read(), dialgroup_write(), dialog_ref(), dictate_exec(), digitcollect(), digitdirect(), directory_exec(), disa_exec(), disable_jack_hook(), diskavail(), dispatch_thread_handler(), display_last_error(), dns_parse_answer(), dnsmgr_init(), dnsmgr_refresh(), do_autokill(), do_directory(), do_dtmf_local(), do_forward(), do_idle_thread(), do_monitor(), do_register(), do_reload(), do_say(), do_scheduler(), do_timelimit(), do_waiting(), donodelog(), dump_agents(), dump_queue(), dump_queue_members(), dundi_answer_entity(), dundi_answer_query(), dundi_discover(), dundi_encrypt(), dundi_error_output(), dundi_exec(), dundi_helper(), dundi_lookup_internal(), dundi_precache_full(), dundi_precache_internal(), dundi_prop_precache(), dundi_query(), dundi_query_read(), dundi_result_read(), dundi_rexmit(), dundi_send(), dundi_xmit(), dundifunc_read(), eagi_exec(), ebl_callback(), enable_jack_hook(), encode_open_type(), enum_callback(), enum_query_read(), enum_result_read(), exec(), exec_exec(), execif_exec(), exists(), ext_cmp1(), extenspy_exec(), external_rtp_create(), extstate_read(), fax_generator_generate(), fbuf_append(), feature_exec_app(), festival_exec(), ffmpeg_decode(), ffmpeg_encode(), file_read(), filter(), find_account(), find_cache(), find_call_locked(), find_conf(), find_conf_realtime(), find_desc(), find_desc_usb(), find_engine(), find_line_by_instance(), find_matching_endwhile(), find_or_create(), find_parkinglot(), find_queue_by_name_rt(), find_sdp(), find_speeddial_by_instance(), find_subchannel_and_lock(), find_subchannel_by_instance_reference(), find_subchannel_by_name(), find_subchannel_by_reference(), find_table(), find_transcoders(), findmeexec(), finish_bookmark(), flash_exec(), flush_telem(), fn_wrapper(), forkcdr_exec(), forward_message(), framein(), func_args(), func_channel_read(), func_channel_write(), func_channels_read(), func_check_sipdomain(), func_header_read(), func_inheritance_write(), function_agent(), function_autopatchup(), function_cop(), function_db_delete(), function_db_exists(), function_db_read(), function_db_write(), function_enum(), function_eval(), function_ilink(), function_realtime_read(), function_realtime_readdestroy(), function_realtime_store(), function_realtime_write(), function_remote(), function_sipchaninfo_read(), function_sippeer(), function_txtcidname(), g723_len(), g723_read(), g723_write(), g726_read(), g726_write(), g729_read(), g729_write(), generic_execute(), generic_http_callback(), generic_prepare(), get_agi_cmd(), get_alarms(), get_also_info(), get_button_template(), get_canmatch_exten(), get_destination(), get_in_brackets(), get_input(), get_ip_and_port_from_sdp(), get_lock(), get_mem_set(), get_member_penalty(), get_mohbyname(), get_params(), get_range(), get_rdnis(), get_refer_info(), get_timerange(), get_to_address(), get_token(), get_unused_callno(), getdisplaybyname(), getflagbyname(), getkeybyname(), getstatebyname(), getsubbyname(), gosub_exec(), gosubif_exec(), goto_exten(), goto_line(), goto_line_rel(), group_count_function_read(), group_function_write(), gsm_read(), gsm_seek(), gsm_write(), gsmtolin_framein(), gtalk_alloc(), gtalk_call(), gtalk_create_candidates(), gtalk_create_member(), gtalk_digit(), gtalk_free_pvt(), gtalk_handle_dtmf(), gtalk_hangup_farend(), gtalk_indicate(), gtalk_invite(), gtalk_invite_response(), gtalk_is_accepted(), gtalk_is_answered(), gtalk_load_config(), gtalk_new(), gtalk_newcall(), gtalk_parser(), gtalk_request(), gtalk_sendhtml(), gtalk_show_channels(), gtalk_write(), h261_decap(), h263_decap(), h263_encap(), h263_open(), h263_read(), h263_write(), h263p_decap(), h263p_encap(), h264_decap(), h264_encap(), h264_open(), h264_read(), h264_write(), handle_alarms(), handle_call_token(), handle_callforward_button(), handle_capabilities_res_message(), handle_cli_agi_add_cmd(), handle_cli_h323_cycle_gk(), handle_cli_indication_add(), handle_cli_indication_remove(), handle_command_response(), handle_common_options(), handle_devstate_change(), handle_enbloc_call_message(), handle_error(), handle_exec(), handle_getoption(), handle_gosub(), handle_hd_hf(), handle_incoming(), handle_init_event(), handle_input(), handle_invite_replaces(), handle_jack_audio(), handle_keypad_button_message(), handle_link_data(), handle_message(), handle_offhook_message(), handle_onhook_message(), handle_open_receive_channel_ack_message(), handle_options(), handle_playtones(), handle_recordfile(), handle_register_message(), handle_remote_data(), handle_remote_dtmf_digit(), handle_request(), handle_request_bye(), handle_request_do(), handle_request_info(), handle_request_invite(), handle_request_notify(), handle_request_register(), handle_request_subscribe(), handle_response(), handle_response_invite(), handle_response_notify(), handle_response_peerpoke(), handle_response_refer(), handle_response_register(), handle_soft_key_event_message(), handle_stimulus_message(), handle_tls_connection(), handle_transfer_button(), handle_updates(), HandleCallIncoming(), HandleCallOutgoing(), hidthread(), hint_read(), http_post_callback(), httpd_helper_thread(), iax2_ack_registry(), iax2_bridge(), iax2_call(), iax2_canmatch(), iax2_devicestate(), iax2_do_register(), iax2_dup_variable_datastore(), iax2_exec(), iax2_exists(), iax2_fixup(), iax2_hangup(), iax2_matchmore(), iax2_poke_peer(), iax2_prov_app(), iax2_read(), iax2_register(), iax2_request(), iax2_send(), iax2_trunk_queue(), iax_error_output(), iax_frame_wrap(), iax_park(), iax_park_thread(), iax_process_template(), iax_provision_reload(), iax_template_parse(), ic706_pltocode(), ices_exec(), icesencode(), iconv_read(), iftime(), ilbc_read(), ilbc_write(), ilbctolin_framein(), import_ch(), in_band_indication(), increase_call_count(), ind_load_module(), init_acf_query(), init_app_class(), init_jack_data(), init_logger(), init_req(), init_resp(), init_timing_thread(), insert_penaltychange(), inspect_module(), INTERNAL_OBJ(), invent_message(), is_valid_dtmf(), isAnsweringMachine(), isexten_function_read(), ivr_dispatch(), jack_hook_callback(), jack_hook_write(), jb_error_output(), jb_get_and_deliver(), jb_warning_output(), jingle_alloc(), jingle_call(), jingle_create_candidates(), jingle_create_member(), jingle_digit(), jingle_free_pvt(), jingle_handle_dtmf(), jingle_hangup_farend(), jingle_indicate(), jingle_is_answered(), jingle_load_config(), jingle_new(), jingle_newcall(), jingle_parser(), jingle_request(), jingle_sendhtml(), jingle_show_channels(), jingle_write(), jpeg_read_image(), jpeg_write_image(), key_call(), Keyfavorite(), kickptt(), launch_asyncagi(), launch_monitor_thread(), launch_netscript(), launch_script(), launch_service(), ldap_loadentry(), ldap_reconnect(), leave_voicemail(), linear_alloc(), linear_generator(), linear_release(), linkcount(), linkset_addsigchan(), lintogsm_framein(), lintolpc10_framein(), lintoulaw(), listener(), load_column_config(), load_config(), load_config_meetme(), load_module(), load_modules(), load_moh_classes(), load_odbc_config(), load_or_reload_lua_stuff(), load_pbx(), load_realtime_queue(), load_resource(), load_rpt_vars(), load_values_config(), local_alloc(), local_answer(), local_ast_moh_start(), local_call(), local_devicestate(), local_dtmf_helper(), local_fixup(), local_new(), local_write(), log_exec(), log_jack_status(), logger_print_normal(), login_exec(), lookup_iface(), lpc10tolin_framein(), lua_find_extension(), lua_get_state(), lua_read_extensions_file(), macroif_exec(), main(), make_email_file(), make_number(), make_str(), make_trunk(), manage_parkinglot(), manager_modulecheck(), manager_show_dialplan_helper(), map_video_codec(), masq_park_call(), matchmore(), math(), md5(), measurenoise(), meetmemute(), memcpy_decrypt(), memcpy_encrypt(), message_template_build(), message_template_parse_emailbody(), message_template_parse_filebody(), mgcp_call(), mgcp_fixup(), mgcp_indicate(), mgcp_new(), mgcp_reload(), mgcp_request(), mgcp_rtp_read(), mgcp_senddigit_begin(), mgcp_senddigit_end(), mgcp_ss(), mgcp_write(), mgcpsock_read(), milliwatt_generate(), minivm_accmess_exec(), minivm_account_func_read(), minivm_counter_func_read(), minivm_counter_func_write(), minivm_delete_exec(), minivm_greet_exec(), minivm_notify_exec(), minivm_record_exec(), misdn_answer(), misdn_bridge(), misdn_call(), misdn_cfg_get(), misdn_cfg_get_config_string(), misdn_cfg_init(), misdn_cfg_is_msn_valid(), misdn_cfg_update_ptp(), misdn_check_l2l1(), misdn_digit_end(), misdn_facility_exec(), misdn_hangup(), misdn_indication(), misdn_new(), misdn_request(), misdn_send_text(), misdn_set_opt_exec(), misdn_write(), mixmonitor_exec(), mixmonitor_thread(), mkif(), mkintf(), moh_alloc(), moh_class_destructor(), moh_files_generator(), moh_files_release(), moh_generate(), moh_register(), moh_release(), moh_scan_files(), mohalloc(), monmp3thread(), morsecode_exec(), mp3_exec(), mp3play(), mpeg4_decode(), mssql_connect(), mute_fragment(), mwi_send_thread(), mwi_sub_event_cb(), mwi_thread(), nbs_alloc(), nbs_call(), nbs_hangup(), nbs_new(), nbs_request(), nbs_xwrite(), NBScat_exec(), NBScatplay(), netconsole(), new_find_extension(), notify_new_message(), odbc_load_module(), odbc_log(), odbc_obj_connect(), odbc_obj_disconnect(), odbc_register_class(), ogg_vorbis_open(), ogg_vorbis_read(), ogg_vorbis_rewrite(), ogg_vorbis_seek(), ogg_vorbis_tell(), ogg_vorbis_trunc(), ogg_vorbis_write(), oh323_alloc(), oh323_call(), oh323_digit_begin(), oh323_digit_end(), oh323_fixup(), oh323_hangup(), oh323_indicate(), oh323_read(), oh323_request(), oh323_rtp_read(), oh323_set_rtp_peer(), oh323_write(), old_milliwatt_exec(), onevent(), op_colon(), op_div(), op_eq(), op_eqtilde(), op_func(), op_minus(), op_negate(), op_plus(), op_rem(), op_times(), open_mailbox(), open_stream(), OpenHistory(), openserial(), osp_check_destination(), osp_create_provider(), osp_load(), ospauth_exec(), ospfinished_exec(), osplookup_exec(), ospnext_exec(), oss_indicate(), oss_new(), oss_request(), page_exec(), park_call_exec(), park_exec_full(), park_space_reserve(), parkandannounce_exec(), parkinglot_addref(), parkinglot_unref(), parse(), parse_args(), parse_config(), parse_cookies(), parse_gain_value(), parse_ie(), parse_minse(), parse_naptr(), parse_register_contact(), parse_request(), parse_session_expires(), parse_srv(), ParseBookmark(), parsing(), pbx_builtin_background(), pbx_builtin_execiftime(), pbx_builtin_gotoif(), pbx_builtin_gotoiftime(), pbx_builtin_hangup(), pbx_builtin_importvar(), pbx_builtin_pushvar_helper(), pbx_builtin_saynumber(), pbx_builtin_serialize_variables(), pbx_builtin_setvar(), pbx_builtin_setvar_multiple(), pbx_builtin_waitexten(), pbx_exec(), pbx_extension_helper(), pbx_find_extension(), pbx_load_config(), pbx_load_module(), pbx_load_users(), pbx_parseable_goto(), pbx_substitute_variables_helper_full(), pcm_read(), pcm_seek(), pcm_write(), peer_set_srcaddr(), peercnt_add(), pgsql_log(), pgsql_reconnect(), phase_e_handler(), phone_call(), phone_digit_end(), phone_exception(), phone_hangup(), phone_indicate(), phone_mini_packet(), phone_new(), phone_read(), phone_request(), phone_setup(), phone_write(), phone_write_buf(), phoneprov_callback(), pickup_do(), pickup_exec(), pickupchan_exec(), play_message(), play_message_category(), play_message_datetime(), play_message_in_bridged_call(), play_moh_exec(), play_record_review(), playback_exec(), playtones_alloc(), playtones_generator(), pop_exec(), post_raw(), powerof(), pp_each_extension_exec(), pqm_exec(), precache_trans(), precache_transactions(), prep_email_sub_vars(), pri_create_spanmap(), pri_create_trunkgroup(), pri_dchannel(), pri_find_dchan(), pri_fixup_principle(), pri_resolve_span(), privacy_exec(), private_enum_init(), proc_422_rsp(), proc_session_timer(), process_ast_dsp(), process_dahdi(), process_echocancel(), process_message_callback(), process_opcode(), process_request(), process_request_queue(), process_returncode(), process_rfc2833(), process_rfc3389(), process_sdp(), process_text_line(), profile_set_param(), progress(), proxy_update(), pthread_timer_set_rate(), purge_old_messages(), pw_cb(), ql_exec(), queue_exec(), queue_function_memberpenalty_read(), queue_function_memberpenalty_write(), queue_function_qac(), queue_function_qac_dep(), queue_function_queuememberlist(), queue_function_queuewaitingcount(), queue_function_var(), queue_reload_request(), queue_set_param(), queue_transfer_fixup(), queue_voice_frame(), quote(), radio_tune(), radius_log(), rbi_out(), rcv_mac_addr(), rcvfax_exec(), read_agent_config(), read_config(), read_config_maps(), read_exec(), read_pipe(), read_samples(), readexten_exec(), readfile_exec(), realtime_curl(), realtime_destroy_handler(), realtime_directory(), realtime_exec(), realtime_handler(), realtime_ldap_base_ap(), realtime_multi_curl(), realtime_multi_handler(), realtime_multi_ldap(), realtime_multi_odbc(), realtime_multi_pgsql(), realtime_odbc(), realtime_peer(), realtime_pgsql(), realtime_require_handler(), realtime_store_handler(), realtime_update_handler(), realtime_user(), receive_digit(), receive_message(), record_exec(), refresh_list(), regex(), register_exten(), register_group(), register_group_feature(), register_peer_exten(), register_verify(), registry_rerequest(), reload(), reload_agents(), reload_config(), reload_firmware(), reload_followme(), reload_logger(), reload_queue_members(), reload_queue_rules(), reload_queues(), remove_by_peercallno(), remove_by_transfercallno(), remove_from_queue(), replace_callno(), reply_digest(), require_curl(), require_odbc(), require_pgsql(), resample_frame(), reset_conf(), restart_monitor(), restart_session_timer(), restore_conference(), restore_gains(), retrans_pkt(), retreive_memory(), retrydial_exec(), return_exec(), rotate_file(), rpt(), rpt_call(), rpt_do_lstats(), rpt_do_stats(), rpt_exec(), rpt_manager_do_stats(), rpt_master(), rpt_push_alt_macro(), rpt_tele_thread(), rpt_telemetry(), rqm_exec(), rtp_socket(), run_agi(), run_externnotify(), run_ras(), s_streamwait3(), safe_append(), save_conference(), save_to_folder(), say_date(), say_date_with_format(), say_datetime(), say_datetime_from_now(), say_init_mode(), say_number_full(), say_stub(), say_time(), saycharstr(), sayfile(), saynum(), scan_service(), scan_thread(), schedule(), scheduled_destroy(), select_entry(), send_callerid(), send_client(), send_delay(), send_dtmf(), send_request(), send_retransmit(), send_select_output(), send_tone_burst(), send_usb_txt(), send_waveform_to_channel(), send_waveform_to_fd(), senddtmf_exec(), sendimage_exec(), sendkenwood(), sendmail(), sendpage(), sendtext_exec(), sendurl_exec(), serial_remote_io(), session_do(), set(), set_active(), set_bridge_features_on_config(), set_config(), set_ctcss_mode_ic706(), set_destination(), set_format(), set_freq_ic706(), set_full_cmd(), set_ic706(), set_insecure_flags(), set_member_paused(), set_member_penalty(), set_mode_ic706(), set_moh_exec(), set_offset_ic706(), set_state(), set_ulimit(), set_var(), setcallerid_pres_exec(), setdtr(), setflag(), setformat(), setrem(), setup_dahdi(), setup_incoming_call(), setup_privacy_args(), setup_rtp_connection(), setup_transfer_datastore(), sha1(), shared_read(), shared_write(), shell_helper(), show_dialplan_helper(), showdisplay(), showkeys(), sip_addheader(), sip_alloc(), sip_call(), sip_cli_notify(), sip_dtmfmode(), sip_dump_history(), sip_fixup(), sip_hangup(), sip_indicate(), sip_new(), sip_park(), sip_park_thread(), sip_parse_host(), sip_poke_noanswer(), sip_poke_peer(), sip_queryoption(), sip_reg_timeout(), sip_register(), sip_request_call(), sip_reregister(), sip_scheddestroy(), sip_sendhtml(), sip_sipredirect(), sip_st_alloc(), sip_write(), sipsock_read(), skel_exec(), skinny_call(), skinny_fixup(), skinny_indicate(), skinny_new(), skinny_newcall(), skinny_register(), skinny_req_parse(), skinny_request(), skinny_ss(), skinny_transfer(), skinny_write(), sla_add_trunk_to_station(), sla_build_station(), sla_build_trunk(), sla_load_config(), sla_queue_event_conf(), sla_state(), sla_station_exec(), sla_trunk_exec(), slinear_read(), slinear_write(), smdi_load(), smdi_msg_read(), smdi_msg_retrieve_read(), smdi_read(), smdi_toggle_mwi(), smoother_frame_feed(), sms_exec(), sms_generate(), sms_handleincoming(), sms_log(), sms_messagerx2(), sms_process(), sms_readfile(), sms_writefile(), sndfax_exec(), socket_process(), socket_process_meta(), socket_read(), softhangup_exec(), soundcard_init(), soundcard_writeframe(), span_message(), spawn_dp_lookup(), spawn_mp3(), speex_get_wb_sz_at(), speex_read(), speex_samples(), speex_write(), speextolin_framein(), spy_generate(), sqlite3_log(), sqlite_log(), ss7_handle_cqm(), ss7_linkset(), ss7_start_call(), ss_thread(), start_moh_exec(), start_monitor_exec(), start_network_thread(), start_pri(), start_rtp(), start_session_timer(), start_spying(), start_stream(), starttimer(), static_callback(), statpost(), stop_session_timer(), store_boost(), store_by_peercallno(), store_by_transfercallno(), store_config(), store_config_core(), store_curl(), store_digit(), store_mixer(), store_odbc(), store_pgsql(), store_rxcdtype(), store_rxdemod(), store_rxsdtype(), store_txmixa(), store_txmixb(), store_txtoctype(), stub_ast_key_get(), subscript(), substitute_escapes(), swap_subs(), sysinfo_helper(), system_exec_helper(), t38_tx_packet_handler(), tdd_feed(), tdd_new(), tds_error_handler(), tds_load_module(), tds_log(), tds_message_handler(), telem_lookup(), testclient_exec(), testserver_exec(), timed_read(), timeout_read(), timeout_write(), timezone_add(), to_number(), to_string(), tonepair_alloc(), tonepair_generator(), tps_processing_function(), tps_taskprocessor_destroy(), tps_taskprocessor_pop(), transfer_exec(), TransferCallStep1(), transmit(), transmit_audio(), transmit_invite(), transmit_refer(), transmit_register(), transmit_request_with_auth(), transmit_response(), transmit_response_using_temp(), transmit_response_with_auth(), transmit_response_with_sdp(), transmit_response_with_t38_sdp(), transmit_state_notify(), transmit_t38(), try_calling(), try_firmware(), try_load_key(), try_suggested_sip_codec(), try_transfer(), tryexec_exec(), tvfix(), txt_callback(), udptl_build_packet(), unalloc_sub(), unistim_answer(), unistim_call(), unistim_do_senddigit(), unistim_fixup(), unistim_hangup(), unistim_indicate(), unistim_new(), unistim_request(), unistim_rtp_read(), unistim_senddigit_end(), unistim_sendtext(), unistim_ss(), unistim_write(), unistimsock_read(), unload_module(), unlock_read(), unregister_exten(), update_call_counter(), update_common_options(), update_config(), update_curl(), update_header(), update_key(), update_ldap(), update_odbc(), update_pgsql(), update_registry(), update_scoreboard(), upqm_exec(), uridecode(), uriencode(), usbradio_fixup(), usbradio_indicate(), usbradio_new(), usbradio_read(), usbradio_request(), usbradio_text(), usbradio_write(), used_blocks(), userevent_exec(), verbose_exec(), vm_authenticate(), vm_box_exists(), vm_change_password(), vm_check_password_shell(), vm_exec(), vm_execmain(), vm_newuser(), vm_options(), vox_read(), vox_write(), wait_file(), wait_file2(), wait_for_answer(), wait_for_winner(), wait_interval(), wait_moh_exec(), waitfor_exec(), waitforring_exec(), waitstream_core(), waituntil_exec(), wav_close(), wav_read(), wav_seek(), wav_write(), write_byte(), write_header(), write_history(), write_stream(), writefile(), and xpmr_config().
01086 { 01087 struct logmsg *logmsg = NULL; 01088 struct ast_str *buf = NULL; 01089 struct ast_tm tm; 01090 struct timeval now = ast_tvnow(); 01091 int res = 0; 01092 va_list ap; 01093 01094 if (!(buf = ast_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) 01095 return; 01096 01097 if (AST_RWLIST_EMPTY(&logchannels)) { 01098 /* 01099 * we don't have the logger chain configured yet, 01100 * so just log to stdout 01101 */ 01102 if (level != __LOG_VERBOSE) { 01103 int result; 01104 va_start(ap, fmt); 01105 result = ast_str_set_va(&buf, BUFSIZ, fmt, ap); /* XXX BUFSIZ ? */ 01106 va_end(ap); 01107 if (result != AST_DYNSTR_BUILD_FAILED) { 01108 term_filter_escapes(buf->str); 01109 fputs(buf->str, stdout); 01110 } 01111 } 01112 return; 01113 } 01114 01115 /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug 01116 are non-zero; LOG_DEBUG messages can still be displayed if option_debug 01117 is zero, if option_verbose is non-zero (this allows for 'level zero' 01118 LOG_DEBUG messages to be displayed, if the logmask on any channel 01119 allows it) 01120 */ 01121 if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) 01122 return; 01123 01124 /* Ignore anything that never gets logged anywhere */ 01125 if (!(global_logmask & (1 << level))) 01126 return; 01127 01128 /* Build string */ 01129 va_start(ap, fmt); 01130 res = ast_str_set_va(&buf, BUFSIZ, fmt, ap); 01131 va_end(ap); 01132 01133 /* If the build failed, then abort and free this structure */ 01134 if (res == AST_DYNSTR_BUILD_FAILED) 01135 return; 01136 01137 /* Create a new logging message */ 01138 if (!(logmsg = ast_calloc(1, sizeof(*logmsg) + res + 1))) 01139 return; 01140 01141 /* Copy string over */ 01142 strcpy(logmsg->str, buf->str); 01143 01144 /* Set type to be normal */ 01145 logmsg->type = LOGMSG_NORMAL; 01146 01147 /* Create our date/time */ 01148 ast_localtime(&now, &tm, NULL); 01149 ast_strftime(logmsg->date, sizeof(logmsg->date), dateformat, &tm); 01150 01151 /* Copy over data */ 01152 logmsg->level = level; 01153 logmsg->line = line; 01154 ast_copy_string(logmsg->file, file, sizeof(logmsg->file)); 01155 ast_copy_string(logmsg->function, function, sizeof(logmsg->function)); 01156 logmsg->process_id = (long) GETTID(); 01157 01158 /* If the logger thread is active, append it to the tail end of the list - otherwise skip that step */ 01159 if (logthread != AST_PTHREADT_NULL) { 01160 AST_LIST_LOCK(&logmsgs); 01161 AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); 01162 ast_cond_signal(&logcond); 01163 AST_LIST_UNLOCK(&logmsgs); 01164 } else { 01165 logger_print_normal(logmsg); 01166 ast_free(logmsg); 01167 } 01168 01169 return; 01170 }
| static void ast_log_vsyslog | ( | int | level, | |
| const char * | file, | |||
| int | line, | |||
| const char * | function, | |||
| char * | str, | |||
| long | pid | |||
| ) | [static] |
Definition at line 833 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_VERBOSE, buf, levels, SYSLOG_NLEVELS, and term_strip().
Referenced by logger_print_normal().
00834 { 00835 char buf[BUFSIZ]; 00836 00837 if (level >= SYSLOG_NLEVELS) { 00838 /* we are locked here, so cannot ast_log() */ 00839 fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); 00840 return; 00841 } 00842 00843 if (level == __LOG_VERBOSE) { 00844 snprintf(buf, sizeof(buf), "VERBOSE[%ld]: %s", pid, str); 00845 level = __LOG_DEBUG; 00846 } else if (level == __LOG_DTMF) { 00847 snprintf(buf, sizeof(buf), "DTMF[%ld]: %s", pid, str); 00848 level = __LOG_DEBUG; 00849 } else { 00850 snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: %s", 00851 levels[level], pid, file, line, function, str); 00852 } 00853 00854 term_strip(buf, buf, strlen(buf) + 1); 00855 syslog(syslog_level_map[level], "%s", buf); 00856 }
| void ast_queue_log | ( | const char * | queuename, | |
| const char * | callid, | |||
| const char * | agent, | |||
| const char * | event, | |||
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 461 of file logger.c.
References ast_check_realtime(), AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK, ast_store_realtime(), qlog, and SENTINEL.
Referenced by agent_logoff_maintenance(), aqm_exec(), find_queue_by_name_rt(), handle_queue_add_member(), handle_queue_remove_member(), init_logger(), login_exec(), manager_add_queue_member(), manager_queue_log_custom(), manager_remove_queue_member(), ql_exec(), queue_exec(), queue_transfer_fixup(), reload_logger(), rna(), rqm_exec(), rt_handle_member_record(), set_member_paused(), set_member_penalty(), try_calling(), update_realtime_members(), and wait_our_turn().
00462 { 00463 va_list ap; 00464 char qlog_msg[8192]; 00465 int qlog_len; 00466 char time_str[16]; 00467 00468 if (ast_check_realtime("queue_log")) { 00469 va_start(ap, fmt); 00470 vsnprintf(qlog_msg, sizeof(qlog_msg), fmt, ap); 00471 va_end(ap); 00472 snprintf(time_str, sizeof(time_str), "%ld", (long)time(NULL)); 00473 ast_store_realtime("queue_log", "time", time_str, 00474 "callid", callid, 00475 "queuename", queuename, 00476 "agent", agent, 00477 "event", event, 00478 "data", qlog_msg, 00479 SENTINEL); 00480 } else { 00481 if (qlog) { 00482 va_start(ap, fmt); 00483 qlog_len = snprintf(qlog_msg, sizeof(qlog_msg), "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event); 00484 vsnprintf(qlog_msg + qlog_len, sizeof(qlog_msg) - qlog_len, fmt, ap); 00485 va_end(ap); 00486 } 00487 AST_RWLIST_RDLOCK(&logchannels); 00488 if (qlog) { 00489 fprintf(qlog, "%s\n", qlog_msg); 00490 fflush(qlog); 00491 } 00492 AST_RWLIST_UNLOCK(&logchannels); 00493 } 00494 }
| int ast_register_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1309 of file logger.c.
References ast_malloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, and verb::verboser.
Referenced by ast_makesocket(), main(), and show_console().
01310 { 01311 struct verb *verb; 01312 01313 if (!(verb = ast_malloc(sizeof(*verb)))) 01314 return -1; 01315 01316 verb->verboser = v; 01317 01318 AST_RWLIST_WRLOCK(&verbosers); 01319 AST_RWLIST_INSERT_HEAD(&verbosers, verb, list); 01320 AST_RWLIST_UNLOCK(&verbosers); 01321 01322 return 0; 01323 }
| static AST_RWLIST_HEAD_STATIC | ( | verbosers | , | |
| verb | ||||
| ) | [static] |
| static AST_RWLIST_HEAD_STATIC | ( | logchannels | , | |
| logchannel | ||||
| ) | [static] |
| AST_THREADSTORAGE | ( | log_buf | ) |
| AST_THREADSTORAGE | ( | verbose_buf | ) |
| int ast_unregister_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1325 of file logger.c.
References ast_free, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, and verb::verboser.
Referenced by exit_now().
01326 { 01327 struct verb *cur; 01328 01329 AST_RWLIST_WRLOCK(&verbosers); 01330 AST_RWLIST_TRAVERSE_SAFE_BEGIN(&verbosers, cur, list) { 01331 if (cur->verboser == v) { 01332 AST_RWLIST_REMOVE_CURRENT(list); 01333 ast_free(cur); 01334 break; 01335 } 01336 } 01337 AST_RWLIST_TRAVERSE_SAFE_END; 01338 AST_RWLIST_UNLOCK(&verbosers); 01339 01340 return cur ? 0 : -1; 01341 }
| void ast_verbose | ( | const char * | fmt, | |
| ... | ||||
| ) |
Definition at line 1301 of file logger.c.
References __ast_verbose_ap().
01302 { 01303 va_list ap; 01304 va_start(ap, fmt); 01305 __ast_verbose_ap("", 0, "", fmt, ap); 01306 va_end(ap); 01307 }
| void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 1043 of file logger.c.
References ast_cond_signal(), AST_LIST_LOCK, AST_LIST_UNLOCK, AST_PTHREADT_NULL, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, close_logger_thread, eventlog, f, logchannel::fileptr, logcond, logthread, and qlog.
Referenced by quit_handler().
01044 { 01045 struct logchannel *f = NULL; 01046 01047 /* Stop logger thread */ 01048 AST_LIST_LOCK(&logmsgs); 01049 close_logger_thread = 1; 01050 ast_cond_signal(&logcond); 01051 AST_LIST_UNLOCK(&logmsgs); 01052 01053 if (logthread != AST_PTHREADT_NULL) 01054 pthread_join(logthread, NULL); 01055 01056 AST_RWLIST_WRLOCK(&logchannels); 01057 01058 if (eventlog) { 01059 fclose(eventlog); 01060 eventlog = NULL; 01061 } 01062 01063 if (qlog) { 01064 fclose(qlog); 01065 qlog = NULL; 01066 } 01067 01068 AST_RWLIST_TRAVERSE(&logchannels, f, list) { 01069 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 01070 fclose(f->fileptr); 01071 f->fileptr = NULL; 01072 } 01073 } 01074 01075 closelog(); /* syslog */ 01076 01077 AST_RWLIST_UNLOCK(&logchannels); 01078 01079 return; 01080 }
| static char* handle_logger_reload | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 690 of file logger.c.
References ast_cli(), CLI_FAILURE, CLI_GENERATE, CLI_INIT, CLI_SUCCESS, ast_cli_entry::command, ast_cli_args::fd, reload_logger(), and ast_cli_entry::usage.
00691 { 00692 switch (cmd) { 00693 case CLI_INIT: 00694 e->command = "logger reload"; 00695 e->usage = 00696 "Usage: logger reload\n" 00697 " Reloads the logger subsystem state. Use after restarting syslogd(8) if you are using syslog logging.\n"; 00698 return NULL; 00699 case CLI_GENERATE: 00700 return NULL; 00701 } 00702 if (reload_logger(0)) { 00703 ast_cli(a->fd, "Failed to reload the logger\n"); 00704 return CLI_FAILURE; 00705 } 00706 return CLI_SUCCESS; 00707 }
| static char* handle_logger_rotate | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 709 of file logger.c.
References ast_cli(), CLI_FAILURE, CLI_GENERATE, CLI_INIT, CLI_SUCCESS, ast_cli_entry::command, ast_cli_args::fd, reload_logger(), and ast_cli_entry::usage.
00710 { 00711 switch (cmd) { 00712 case CLI_INIT: 00713 e->command = "logger rotate"; 00714 e->usage = 00715 "Usage: logger rotate\n" 00716 " Rotates and Reopens the log files.\n"; 00717 return NULL; 00718 case CLI_GENERATE: 00719 return NULL; 00720 } 00721 if (reload_logger(1)) { 00722 ast_cli(a->fd, "Failed to reload the logger and rotate log files\n"); 00723 return CLI_FAILURE; 00724 } 00725 return CLI_SUCCESS; 00726 }
| static char* handle_logger_set_level | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 728 of file logger.c.
References ast_cli_args::argc, ast_cli_args::argv, ast_cli(), ast_console_toggle_loglevel(), ast_true(), CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, ast_cli_args::fd, levels, NUMLOGLEVELS, and ast_cli_entry::usage.
00729 { 00730 int x; 00731 int state; 00732 int level = -1; 00733 00734 switch (cmd) { 00735 case CLI_INIT: 00736 e->command = "logger set level"; 00737 e->usage = 00738 "Usage: logger set level\n" 00739 " Set a specific log level to enabled/disabled for this console.\n"; 00740 return NULL; 00741 case CLI_GENERATE: 00742 return NULL; 00743 } 00744 00745 if (a->argc < 5) 00746 return CLI_SHOWUSAGE; 00747 00748 for (x = 0; x <= NUMLOGLEVELS; x++) { 00749 if (!strcasecmp(a->argv[3], levels[x])) { 00750 level = x; 00751 break; 00752 } 00753 } 00754 00755 state = ast_true(a->argv[4]) ? 1 : 0; 00756 00757 if (level != -1) { 00758 ast_console_toggle_loglevel(a->fd, level, state); 00759 ast_cli(a->fd, "Logger status for '%s' has been set to '%s'.\n", levels[level], state ? "on" : "off"); 00760 } else 00761 return CLI_SHOWUSAGE; 00762 00763 return CLI_SUCCESS; 00764 }
| static char* handle_logger_show_channels | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
CLI command to show logging system configuration.
Definition at line 767 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, ast_cli(), AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, chan, CLI_GENERATE, CLI_INIT, CLI_SUCCESS, ast_cli_entry::command, logchannel::disabled, ast_cli_args::fd, logchannel::filename, FORMATL, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, logchannel::type, and ast_cli_entry::usage.
00768 { 00769 #define FORMATL "%-35.35s %-8.8s %-9.9s " 00770 struct logchannel *chan; 00771 switch (cmd) { 00772 case CLI_INIT: 00773 e->command = "logger show channels"; 00774 e->usage = 00775 "Usage: logger show channels\n" 00776 " List configured logger channels.\n"; 00777 return NULL; 00778 case CLI_GENERATE: 00779 return NULL; 00780 } 00781 ast_cli(a->fd, FORMATL, "Channel", "Type", "Status"); 00782 ast_cli(a->fd, "Configuration\n"); 00783 ast_cli(a->fd, FORMATL, "-------", "----", "------"); 00784 ast_cli(a->fd, "-------------\n"); 00785 AST_RWLIST_RDLOCK(&logchannels); 00786 AST_RWLIST_TRAVERSE(&logchannels, chan, list) { 00787 ast_cli(a->fd, FORMATL, chan->filename, chan->type == LOGTYPE_CONSOLE ? "Console" : (chan->type == LOGTYPE_SYSLOG ? "Syslog" : "File"), 00788 chan->disabled ? "Disabled" : "Enabled"); 00789 ast_cli(a->fd, " - "); 00790 if (chan->logmask & (1 << __LOG_DEBUG)) 00791 ast_cli(a->fd, "Debug "); 00792 if (chan->logmask & (1 << __LOG_DTMF)) 00793 ast_cli(a->fd, "DTMF "); 00794 if (chan->logmask & (1 << __LOG_VERBOSE)) 00795 ast_cli(a->fd, "Verbose "); 00796 if (chan->logmask & (1 << __LOG_WARNING)) 00797 ast_cli(a->fd, "Warning "); 00798 if (chan->logmask & (1 << __LOG_NOTICE)) 00799 ast_cli(a->fd, "Notice "); 00800 if (chan->logmask & (1 << __LOG_ERROR)) 00801 ast_cli(a->fd, "Error "); 00802 if (chan->logmask & (1 << __LOG_EVENT)) 00803 ast_cli(a->fd, "Event "); 00804 ast_cli(a->fd, "\n"); 00805 } 00806 AST_RWLIST_UNLOCK(&logchannels); 00807 ast_cli(a->fd, "\n"); 00808 00809 return CLI_SUCCESS; 00810 }
| static int handle_SIGXFSZ | ( | int | sig | ) | [static] |
Definition at line 826 of file logger.c.
Referenced by init_logger().
00827 { 00828 /* Indicate need to reload */ 00829 filesize_reload_needed = 1; 00830 return 0; 00831 }
| int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 999 of file logger.c.
References ast_cli_register_multiple(), ast_cond_destroy(), ast_cond_init(), ast_config_AST_LOG_DIR, ast_log(), ast_mkdir(), ast_pthread_create, ast_queue_log(), ast_verb, cli_logger, errno, eventlog, EVENTLOG, handle_SIGXFSZ(), init_logger_chain(), LOG_ERROR, LOG_EVENT, logcond, logfiles, logger_thread(), logthread, and qlog.
Referenced by main().
01000 { 01001 char tmp[256]; 01002 int res = 0; 01003 01004 /* auto rotate if sig SIGXFSZ comes a-knockin */ 01005 (void) signal(SIGXFSZ, (void *) handle_SIGXFSZ); 01006 01007 /* start logger thread */ 01008 ast_cond_init(&logcond, NULL); 01009 if (ast_pthread_create(&logthread, NULL, logger_thread, NULL) < 0) { 01010 ast_cond_destroy(&logcond); 01011 return -1; 01012 } 01013 01014 /* register the logger cli commands */ 01015 ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry)); 01016 01017 ast_mkdir(ast_config_AST_LOG_DIR, 0777); 01018 01019 /* create log channels */ 01020 init_logger_chain(0 /* locked */); 01021 01022 /* create the eventlog */ 01023 if (logfiles.event_log) { 01024 snprintf(tmp, sizeof(tmp), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); 01025 eventlog = fopen(tmp, "a"); 01026 if (eventlog) { 01027 ast_log(LOG_EVENT, "Started Asterisk Event Logger\n"); 01028 ast_verb(1, "Asterisk Event Logger Started %s\n", tmp); 01029 } else { 01030 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 01031 res = -1; 01032 } 01033 } 01034 01035 if (logfiles.queue_log) { 01036 snprintf(tmp, sizeof(tmp), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 01037 qlog = fopen(tmp, "a"); 01038 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); 01039 } 01040 return res; 01041 }
| static void init_logger_chain | ( | int | locked | ) | [static] |
Definition at line 316 of file logger.c.
References ast_calloc, ast_config_destroy(), ast_config_load2(), ast_copy_string(), ast_free, AST_RWLIST_INSERT_HEAD, AST_RWLIST_REMOVE_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_true(), ast_variable_browse(), ast_variable_retrieve(), chan, errno, ast_variable::lineno, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, make_logchannel(), ast_variable::name, ast_variable::next, ROTATE, s, SEQUENTIAL, TIMESTAMP, logchannel::type, ast_variable::value, and var.
Referenced by init_logger(), and reload_logger().
00317 { 00318 struct logchannel *chan; 00319 struct ast_config *cfg; 00320 struct ast_variable *var; 00321 const char *s; 00322 struct ast_flags config_flags = { 0 }; 00323 00324 if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags))) 00325 return; 00326 00327 /* delete our list of log channels */ 00328 if (!locked) 00329 AST_RWLIST_WRLOCK(&logchannels); 00330 while ((chan = AST_RWLIST_REMOVE_HEAD(&logchannels, list))) 00331 ast_free(chan); 00332 if (!locked) 00333 AST_RWLIST_UNLOCK(&logchannels); 00334 00335 global_logmask = 0; 00336 errno = 0; 00337 /* close syslog */ 00338 closelog(); 00339 00340 /* If no config file, we're fine, set default options. */ 00341 if (!cfg) { 00342 if (errno) 00343 fprintf(stderr, "Unable to open logger.conf: %s; default settings will be used.\n", strerror(errno)); 00344 else 00345 fprintf(stderr, "Errors detected in logger.conf: see above; default settings will be used.\n"); 00346 if (!(chan = ast_calloc(1, sizeof(*chan)))) 00347 return; 00348 chan->type = LOGTYPE_CONSOLE; 00349 chan->logmask = 28; /*warning,notice,error */ 00350 if (!locked) 00351 AST_RWLIST_WRLOCK(&logchannels); 00352 AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); 00353 if (!locked) 00354 AST_RWLIST_UNLOCK(&logchannels); 00355 global_logmask |= chan->logmask; 00356 return; 00357 } 00358 00359 if ((s = ast_variable_retrieve(cfg, "general", "appendhostname"))) { 00360 if (ast_true(s)) { 00361 if (gethostname(hostname, sizeof(hostname) - 1)) { 00362 ast_copy_string(hostname, "unknown", sizeof(hostname)); 00363 fprintf(stderr, "What box has no hostname???\n"); 00364 } 00365 } else 00366 hostname[0] = '\0'; 00367 } else 00368 hostname[0] = '\0'; 00369 if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) 00370 ast_copy_string(dateformat, s, sizeof(dateformat)); 00371 else 00372 ast_copy_string(dateformat, "%b %e %T", sizeof(dateformat)); 00373 if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) 00374 logfiles.queue_log = ast_true(s); 00375 if ((s = ast_variable_retrieve(cfg, "general", "event_log"))) 00376 logfiles.event_log = ast_true(s); 00377 if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name"))) 00378 ast_copy_string(queue_log_name, s, sizeof(queue_log_name)); 00379 if ((s = ast_variable_retrieve(cfg, "general", "exec_after_rotate"))) 00380 ast_copy_string(exec_after_rotate, s, sizeof(exec_after_rotate)); 00381 if ((s = ast_variable_retrieve(cfg, "general", "rotatestrategy"))) { 00382 if (strcasecmp(s, "timestamp") == 0) 00383 rotatestrategy = TIMESTAMP; 00384 else if (strcasecmp(s, "rotate") == 0) 00385 rotatestrategy = ROTATE; 00386 else if (strcasecmp(s, "sequential") == 0) 00387 rotatestrategy = SEQUENTIAL; 00388 else 00389 fprintf(stderr, "Unknown rotatestrategy: %s\n", s); 00390 } else { 00391 if ((s = ast_variable_retrieve(cfg, "general", "rotatetimestamp"))) { 00392 rotatestrategy = ast_true(s) ? TIMESTAMP : SEQUENTIAL; 00393 fprintf(stderr, "rotatetimestamp option has been deprecated. Please use rotatestrategy instead.\n"); 00394 } 00395 } 00396 00397 if (!locked) 00398 AST_RWLIST_WRLOCK(&logchannels); 00399 var = ast_variable_browse(cfg, "logfiles"); 00400 for (; var; var = var->next) { 00401 if (!(chan = make_logchannel(var->name, var->value, var->lineno))) 00402 continue; 00403 AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); 00404 global_logmask |= chan->logmask; 00405 } 00406 if (!locked) 00407 AST_RWLIST_UNLOCK(&logchannels); 00408 00409 ast_config_destroy(cfg); 00410 }
| static void logger_print_normal | ( | struct logmsg * | logmsg | ) | [static] |
Print a normal log message to the channels.
Definition at line 859 of file logger.c.
References __LOG_EVENT, __LOG_VERBOSE, ast_console_puts_mutable(), ast_log(), ast_log_vsyslog(), AST_RWLIST_EMPTY, AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, ast_strlen_zero(), ast_verb, buf, chan, COLOR_BRWHITE, colors, logmsg::date, logchannel::disabled, errno, EVENT_FLAG_SYSTEM, eventlog, logmsg::file, logchannel::filename, logchannel::fileptr, logmsg::function, logmsg::level, levels, logmsg::line, LOG_EVENT, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, manager_event, logmsg::process_id, reload_logger(), term_color(), and logchannel::type.
Referenced by ast_log(), and logger_thread().
00860 { 00861 struct logchannel *chan = NULL; 00862 char buf[BUFSIZ]; 00863 00864 AST_RWLIST_RDLOCK(&logchannels); 00865 00866 if (logfiles.event_log && logmsg->level == __LOG_EVENT) { 00867 fprintf(eventlog, "%s asterisk[%ld]: %s", logmsg->date, (long)getpid(), logmsg->str); 00868 fflush(eventlog); 00869 AST_RWLIST_UNLOCK(&logchannels); 00870 return; 00871 } 00872 00873 if (!AST_RWLIST_EMPTY(&logchannels)) { 00874 AST_RWLIST_TRAVERSE(&logchannels, chan, list) { 00875 /* If the channel is disabled, then move on to the next one */ 00876 if (chan->disabled) 00877 continue; 00878 /* Check syslog channels */ 00879 if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << logmsg->level))) { 00880 ast_log_vsyslog(logmsg->level, logmsg->file, logmsg->line, logmsg->function, logmsg->str, logmsg->process_id); 00881 /* Console channels */ 00882 } else if (chan->type == LOGTYPE_CONSOLE && (chan->logmask & (1 << logmsg->level))) { 00883 char linestr[128]; 00884 char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; 00885 00886 /* If the level is verbose, then skip it */ 00887 if (logmsg->level == __LOG_VERBOSE) 00888 continue; 00889 00890 /* Turn the numerical line number into a string */ 00891 snprintf(linestr, sizeof(linestr), "%d", logmsg->line); 00892 /* Build string to print out */ 00893 snprintf(buf, sizeof(buf), "[%s] %s[%ld]: %s:%s %s: %s", 00894 logmsg->date, 00895 term_color(tmp1, levels[logmsg->level], colors[logmsg->level], 0, sizeof(tmp1)), 00896 logmsg->process_id, 00897 term_color(tmp2, logmsg->file, COLOR_BRWHITE, 0, sizeof(tmp2)), 00898 term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), 00899 term_color(tmp4, logmsg->function, COLOR_BRWHITE, 0, sizeof(tmp4)), 00900 logmsg->str); 00901 /* Print out */ 00902 ast_console_puts_mutable(buf, logmsg->level); 00903 /* File channels */ 00904 } else if (chan->type == LOGTYPE_FILE && (chan->logmask & (1 << logmsg->level))) { 00905 int res = 0; 00906 00907 /* If no file pointer exists, skip it */ 00908 if (!chan->fileptr) 00909 continue; 00910 00911 /* Print out to the file */ 00912 res = fprintf(chan->fileptr, "[%s] %s[%ld] %s: %s", 00913 logmsg->date, levels[logmsg->level], logmsg->process_id, logmsg->file, logmsg->str); 00914 if (res <= 0 && !ast_strlen_zero(logmsg->str)) { 00915 fprintf(stderr, "**** Asterisk Logging Error: ***********\n"); 00916 if (errno == ENOMEM || errno == ENOSPC) 00917 fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); 00918 else 00919 fprintf(stderr, "Logger Warning: Unable to write to log file '%s': %s (disabled)\n", chan->filename, strerror(errno)); 00920 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); 00921 chan->disabled = 1; 00922 } else if (res > 0) { 00923 fflush(chan->fileptr); 00924 } 00925 } 00926 } 00927 } else if (logmsg->level != __LOG_VERBOSE) { 00928 fputs(logmsg->str, stdout); 00929 } 00930 00931 AST_RWLIST_UNLOCK(&logchannels); 00932 00933 /* If we need to reload because of the file size, then do so */ 00934 if (filesize_reload_needed) { 00935 reload_logger(-1); 00936 ast_log(LOG_EVENT, "Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00937 ast_verb(1, "Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00938 } 00939 00940 return; 00941 }
| static void logger_print_verbose | ( | struct logmsg * | logmsg | ) | [static] |
Print a verbose message to the verbosers.
Definition at line 944 of file logger.c.
References AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, and verb::verboser.
Referenced by __ast_verbose_ap(), and logger_thread().
00945 { 00946 struct verb *v = NULL; 00947 00948 /* Iterate through the list of verbosers and pass them the log message string */ 00949 AST_RWLIST_RDLOCK(&verbosers); 00950 AST_RWLIST_TRAVERSE(&verbosers, v, list) 00951 v->verboser(logmsg->str); 00952 AST_RWLIST_UNLOCK(&verbosers); 00953 00954 return; 00955 }
| int logger_reload | ( | void | ) |
Reload the logger module without rotating log files (also used from loader.c during a full Asterisk reload).
Reload logger without rotating log files.
Definition at line 683 of file logger.c.
References reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
00684 { 00685 if(reload_logger(0)) 00686 return RESULT_FAILURE; 00687 return RESULT_SUCCESS; 00688 }
| static void* logger_thread | ( | void * | data | ) | [static] |
Actual logging thread.
Definition at line 958 of file logger.c.
References ast_cond_wait(), ast_free, AST_LIST_EMPTY, AST_LIST_FIRST, AST_LIST_HEAD_INIT_NOLOCK, AST_LIST_LOCK, AST_LIST_NEXT, AST_LIST_UNLOCK, close_logger_thread, logcond, logger_print_normal(), logger_print_verbose(), LOGMSG_NORMAL, LOGMSG_VERBOSE, and msg.
Referenced by init_logger().
00959 { 00960 struct logmsg *next = NULL, *msg = NULL; 00961 00962 for (;;) { 00963 /* We lock the message list, and see if any message exists... if not we wait on the condition to be signalled */ 00964 AST_LIST_LOCK(&logmsgs); 00965 if (AST_LIST_EMPTY(&logmsgs)) { 00966 if (close_logger_thread) { 00967 break; 00968 } else { 00969 ast_cond_wait(&logcond, &logmsgs.lock); 00970 } 00971 } 00972 next = AST_LIST_FIRST(&logmsgs); 00973 AST_LIST_HEAD_INIT_NOLOCK(&logmsgs); 00974 AST_LIST_UNLOCK(&logmsgs); 00975 00976 /* Otherwise go through and process each message in the order added */ 00977 while ((msg = next)) { 00978 /* Get the next entry now so that we can free our current structure later */ 00979 next = AST_LIST_NEXT(msg, list); 00980 00981 /* Depending on the type, send it to the proper function */ 00982 if (msg->type == LOGMSG_NORMAL) 00983 logger_print_normal(msg); 00984 else if (msg->type == LOGMSG_VERBOSE) 00985 logger_print_verbose(msg); 00986 00987 /* Free the data since we are done */ 00988 ast_free(msg); 00989 } 00990 00991 /* If we should stop, then stop */ 00992 if (close_logger_thread) 00993 break; 00994 } 00995 00996 return NULL; 00997 }
| static int make_components | ( | const char * | s, | |
| int | lineno | |||
| ) | [static] |
Definition at line 181 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, ast_skip_blanks(), ast_strdupa, and strsep().
Referenced by make_logchannel().
00182 { 00183 char *w; 00184 int res = 0; 00185 char *stringp = ast_strdupa(s); 00186 00187 while ((w = strsep(&stringp, ","))) { 00188 w = ast_skip_blanks(w); 00189 if (!strcasecmp(w, "error")) 00190 res |= (1 << __LOG_ERROR); 00191 else if (!strcasecmp(w, "warning")) 00192 res |= (1 << __LOG_WARNING); 00193 else if (!strcasecmp(w, "notice")) 00194 res |= (1 << __LOG_NOTICE); 00195 else if (!strcasecmp(w, "event")) 00196 res |= (1 << __LOG_EVENT); 00197 else if (!strcasecmp(w, "debug")) 00198 res |= (1 << __LOG_DEBUG); 00199 else if (!strcasecmp(w, "verbose")) 00200 res |= (1 << __LOG_VERBOSE); 00201 else if (!strcasecmp(w, "dtmf")) 00202 res |= (1 << __LOG_DTMF); 00203 else { 00204 fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno); 00205 } 00206 } 00207 00208 return res; 00209 }
| static struct logchannel* make_logchannel | ( | const char * | channel, | |
| const char * | components, | |||
| int | lineno | |||
| ) | [static, read] |
Definition at line 211 of file logger.c.
References ast_calloc, ast_config_AST_LOG_DIR, ast_free, ast_strlen_zero(), chan, errno, logchannel::facility, logchannel::filename, logchannel::fileptr, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, make_components(), and logchannel::type.
Referenced by init_logger_chain().
00212 { 00213 struct logchannel *chan; 00214 char *facility; 00215 #ifndef SOLARIS 00216 CODE *cptr; 00217 #endif 00218 00219 if (ast_strlen_zero(channel) || !(chan = ast_calloc(1, sizeof(*chan)))) 00220 return NULL; 00221 00222 if (!strcasecmp(channel, "console")) { 00223 chan->type = LOGTYPE_CONSOLE; 00224 } else if (!strncasecmp(channel, "syslog", 6)) { 00225 /* 00226 * syntax is: 00227 * syslog.facility => level,level,level 00228 */ 00229 facility = strchr(channel, '.'); 00230 if (!facility++ || !facility) { 00231 facility = "local0"; 00232 } 00233 00234 #ifndef SOLARIS 00235 /* 00236 * Walk through the list of facilitynames (defined in sys/syslog.h) 00237 * to see if we can find the one we have been given 00238 */ 00239 chan->facility = -1; 00240 cptr = facilitynames; 00241 while (cptr->c_name) { 00242 if (!strcasecmp(facility, cptr->c_name)) { 00243 chan->facility = cptr->c_val; 00244 break; 00245 } 00246 cptr++; 00247 } 00248 #else 00249 chan->facility = -1; 00250 if (!strcasecmp(facility, "kern")) 00251 chan->facility = LOG_KERN; 00252 else if (!strcasecmp(facility, "USER")) 00253 chan->facility = LOG_USER; 00254 else if (!strcasecmp(facility, "MAIL")) 00255 chan->facility = LOG_MAIL; 00256 else if (!strcasecmp(facility, "DAEMON")) 00257 chan->facility = LOG_DAEMON; 00258 else if (!strcasecmp(facility, "AUTH")) 00259 chan->facility = LOG_AUTH; 00260 else if (!strcasecmp(facility, "SYSLOG")) 00261 chan->facility = LOG_SYSLOG; 00262 else if (!strcasecmp(facility, "LPR")) 00263 chan->facility = LOG_LPR; 00264 else if (!strcasecmp(facility, "NEWS")) 00265 chan->facility = LOG_NEWS; 00266 else if (!strcasecmp(facility, "UUCP")) 00267 chan->facility = LOG_UUCP; 00268 else if (!strcasecmp(facility, "CRON")) 00269 chan->facility = LOG_CRON; 00270 else if (!strcasecmp(facility, "LOCAL0")) 00271 chan->facility = LOG_LOCAL0; 00272 else if (!strcasecmp(facility, "LOCAL1")) 00273 chan->facility = LOG_LOCAL1; 00274 else if (!strcasecmp(facility, "LOCAL2")) 00275 chan->facility = LOG_LOCAL2; 00276 else if (!strcasecmp(facility, "LOCAL3")) 00277 chan->facility = LOG_LOCAL3; 00278 else if (!strcasecmp(facility, "LOCAL4")) 00279 chan->facility = LOG_LOCAL4; 00280 else if (!strcasecmp(facility, "LOCAL5")) 00281 chan->facility = LOG_LOCAL5; 00282 else if (!strcasecmp(facility, "LOCAL6")) 00283 chan->facility = LOG_LOCAL6; 00284 else if (!strcasecmp(facility, "LOCAL7")) 00285 chan->facility = LOG_LOCAL7; 00286 #endif /* Solaris */ 00287 00288 if (0 > chan->facility) { 00289 fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n"); 00290 ast_free(chan); 00291 return NULL; 00292 } 00293 00294 chan->type = LOGTYPE_SYSLOG; 00295 snprintf(chan->filename, sizeof(chan->filename), "%s", channel); 00296 openlog("asterisk", LOG_PID, chan->facility); 00297 } else { 00298 if (!ast_strlen_zero(hostname)) { 00299 snprintf(chan->filename, sizeof(chan->filename), "%s/%s.%s", 00300 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel, hostname); 00301 } else { 00302 snprintf(chan->filename, sizeof(chan->filename), "%s/%s", 00303 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel); 00304 } 00305 chan->fileptr = fopen(chan->filename, "a"); 00306 if (!chan->fileptr) { 00307 /* Can't log here, since we're called with a lock */ 00308 fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno)); 00309 } 00310 chan->type = LOGTYPE_FILE; 00311 } 00312 chan->logmask = make_components(components, lineno); 00313 return chan; 00314 }
| static int reload_logger | ( | int | rotate | ) | [static] |
Definition at line 582 of file logger.c.
References ast_config_AST_LOG_DIR, ast_log(), ast_mkdir(), ast_queue_log(), AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_verb, logchannel::disabled, errno, EVENT_FLAG_SYSTEM, EVENTLOG, eventlog, f, logchannel::filename, logchannel::fileptr, init_logger_chain(), LOG_ERROR, LOG_EVENT, logfiles, manager_event, qlog, and rotate_file().
Referenced by handle_logger_reload(), handle_logger_rotate(), logger_print_normal(), and logger_reload().
00583 { 00584 char old[PATH_MAX] = ""; 00585 int event_rotate = rotate, queue_rotate = rotate; 00586 struct logchannel *f; 00587 int res = 0; 00588 struct stat st; 00589 00590 AST_RWLIST_WRLOCK(&logchannels); 00591 00592 if (eventlog) { 00593 if (rotate < 0) { 00594 /* Check filesize - this one typically doesn't need an auto-rotate */ 00595 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); 00596 if (stat(old, &st) != 0 || st.st_size > 0x40000000) { /* Arbitrarily, 1 GB */ 00597 fclose(eventlog); 00598 eventlog = NULL; 00599 } else 00600 event_rotate = 0; 00601 } else { 00602 fclose(eventlog); 00603 eventlog = NULL; 00604 } 00605 } else 00606 event_rotate = 0; 00607 00608 if (qlog) { 00609 if (rotate < 0) { 00610 /* Check filesize - this one typically doesn't need an auto-rotate */ 00611 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 00612 if (stat(old, &st) != 0 || st.st_size > 0x40000000) { /* Arbitrarily, 1 GB */ 00613 fclose(qlog); 00614 qlog = NULL; 00615 } else 00616 queue_rotate = 0; 00617 } else { 00618 fclose(qlog); 00619 qlog = NULL; 00620 } 00621 } else 00622 queue_rotate = 0; 00623 00624 ast_mkdir(ast_config_AST_LOG_DIR, 0777); 00625 00626 AST_RWLIST_TRAVERSE(&logchannels, f, list) { 00627 if (f->disabled) { 00628 f->disabled = 0; /* Re-enable logging at reload */ 00629 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); 00630 } 00631 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00632 fclose(f->fileptr); /* Close file */ 00633 f->fileptr = NULL; 00634 if (rotate) 00635 rotate_file(f->filename); 00636 } 00637 } 00638 00639 filesize_reload_needed = 0; 00640 00641 init_logger_chain(1 /* locked */); 00642 00643 if (logfiles.event_log) { 00644 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); 00645 if (event_rotate) 00646 rotate_file(old); 00647 00648 eventlog = fopen(old, "a"); 00649 if (eventlog) { 00650 ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n"); 00651 ast_verb(1, "Asterisk Event Logger restarted\n"); 00652 } else { 00653 ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); 00654 res = -1; 00655 } 00656 } 00657 00658 if (logfiles.queue_log) { 00659 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 00660 if (queue_rotate) 00661 rotate_file(old); 00662 00663 qlog = fopen(old, "a"); 00664 if (qlog) { 00665 AST_RWLIST_UNLOCK(&logchannels); 00666 ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); 00667 AST_RWLIST_WRLOCK(&logchannels); 00668 ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n"); 00669 ast_verb(1, "Asterisk Queue Logger restarted\n"); 00670 } else { 00671 ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); 00672 res = -1; 00673 } 00674 } 00675 00676 AST_RWLIST_UNLOCK(&logchannels); 00677 00678 return res; 00679 }
| static int rotate_file | ( | const char * | filename | ) | [static] |
Definition at line 496 of file logger.c.
References ARRAY_LEN, ast_channel_alloc, ast_channel_free(), ast_log(), ast_safe_system(), ast_strlen_zero(), buf, LOG_WARNING, pbx_builtin_setvar_helper(), pbx_substitute_variables_helper(), ROTATE, SEQUENTIAL, and TIMESTAMP.
Referenced by reload_logger().
00497 { 00498 char old[PATH_MAX]; 00499 char new[PATH_MAX]; 00500 int x, y, which, found, res = 0, fd; 00501 char *suffixes[4] = { "", ".gz", ".bz2", ".Z" }; 00502 00503 switch (rotatestrategy) { 00504 case SEQUENTIAL: 00505 for (x = 0; ; x++) { 00506 snprintf(new, sizeof(new), "%s.%d", filename, x); 00507 fd = open(new, O_RDONLY); 00508 if (fd > -1) 00509 close(fd); 00510 else 00511 break; 00512 } 00513 if (rename(filename, new)) { 00514 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00515 res = -1; 00516 } 00517 break; 00518 case TIMESTAMP: 00519 snprintf(new, sizeof(new), "%s.%ld", filename, (long)time(NULL)); 00520 if (rename(filename, new)) { 00521 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00522 res = -1; 00523 } 00524 break; 00525 case ROTATE: 00526 /* Find the next empty slot, including a possible suffix */ 00527 for (x = 0; ; x++) { 00528 found = 0; 00529 for (which = 0; which < ARRAY_LEN(suffixes); which++) { 00530 snprintf(new, sizeof(new), "%s.%d%s", filename, x, suffixes[which]); 00531 fd = open(new, O_RDONLY); 00532 if (fd > -1) { 00533 close(fd); 00534 found = 1; 00535 break; 00536 } 00537 } 00538 if (!found) { 00539 break; 00540 } 00541 } 00542 00543 /* Found an empty slot */ 00544 for (y = x; y > 0; y--) { 00545 for (which = 0; which < ARRAY_LEN(suffixes); which++) { 00546 snprintf(old, sizeof(old), "%s.%d%s", filename, y - 1, suffixes[which]); 00547 fd = open(old, O_RDONLY); 00548 if (fd > -1) { 00549 /* Found the right suffix */ 00550 close(fd); 00551 snprintf(new, sizeof(new), "%s.%d%s", filename, y, suffixes[which]); 00552 if (rename(old, new)) { 00553 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); 00554 res = -1; 00555 } 00556 break; 00557 } 00558 } 00559 } 00560 00561 /* Finally, rename the current file */ 00562 snprintf(new, sizeof(new), "%s.0", filename); 00563 if (rename(filename, new)) { 00564 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00565 res = -1; 00566 } 00567 } 00568 00569 if (!ast_strlen_zero(exec_after_rotate)) { 00570 struct ast_channel *c = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Logger/rotate"); 00571 char buf[512]; 00572 pbx_builtin_setvar_helper(c, "filename", filename); 00573 pbx_substitute_variables_helper(c, exec_after_rotate, buf, sizeof(buf)); 00574 if (ast_safe_system(buf) != -1) { 00575 ast_log(LOG_WARNING, "error executing '%s'\n", buf); 00576 } 00577 ast_channel_free(c); 00578 } 00579 return res; 00580 }
struct ast_cli_entry cli_logger[] [static] |
Definition at line 819 of file logger.c.
Referenced by init_logger().
int close_logger_thread [static] |
Definition at line 148 of file logger.c.
Referenced by close_logger(), and logger_thread().
int colors[] [static] |
Colors used in the console for logging.
Definition at line 165 of file logger.c.
Referenced by logger_print_normal().
char dateformat[256] = "%b %e %T" [static] |
Definition at line 89 of file logger.c.
Referenced by build_device().
FILE* eventlog [static] |
Definition at line 150 of file logger.c.
Referenced by close_logger(), init_logger(), logger_print_normal(), and reload_logger().
char exec_after_rotate[256] = "" [static] |
int filesize_reload_needed [static] |
int global_logmask = -1 [static] |
char hostname[MAXHOSTNAMELEN] [static] |
Definition at line 108 of file logger.c.
Referenced by app_exec(), ast_readconfig(), ast_remotecontrol(), cli_prompt(), iax2_register(), main(), netconsole(), set_destination(), sip_register(), and tds_load_module().
char* levels[] [static] |
Logging channels used in the Asterisk logging system.
Definition at line 154 of file logger.c.
Referenced by ast_log_vsyslog(), ast_network_puts_mutable(), handle_logger_set_level(), and logger_print_normal().
ast_cond_t logcond [static] |
Definition at line 147 of file logger.c.
Referenced by __ast_verbose_ap(), ast_log(), close_logger(), init_logger(), and logger_thread().
struct { ... } logfiles [static] |
Referenced by init_logger(), init_logger_chain(), logger_print_normal(), and reload_logger().
pthread_t logthread = AST_PTHREADT_NULL [static] |
Definition at line 146 of file logger.c.
Referenced by __ast_verbose_ap(), ast_log(), close_logger(), and init_logger().
FILE* qlog [static] |
Definition at line 151 of file logger.c.
Referenced by ast_queue_log(), close_logger(), init_logger(), and reload_logger().
char queue_log_name[256] = QUEUELOG [static] |
int syslog_level_map[] [static] |
1.6.1