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 | logchannels |
struct | logmsg |
struct | logmsgs |
struct | verb |
struct | verbosers |
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) |
static void | __fini_logchannels (void) |
static void | __fini_verbosers (void) |
static void | __init_logchannels (void) |
static void | __init_verbosers (void) |
static void | _handle_SIGXFSZ (int sig) |
void | ast_backtrace (void) |
void | ast_child_verbose (int level, const char *fmt,...) |
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)) |
AST_THREADSTORAGE_CUSTOM_SCOPE (log_buf, NULL, ast_free_ptr, static) | |
AST_THREADSTORAGE_CUSTOM_SCOPE (verbose_buf, NULL, ast_free_ptr, static) | |
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. | |
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 = 0 |
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 struct sigaction | handle_SIGXFSZ |
static char | hostname [MAXHOSTNAMELEN] |
static char * | levels [] |
Logging channels used in the Asterisk logging system. | |
static struct logchannels | logchannels |
static ast_cond_t | logcond |
struct { | |
unsigned int event_log:1 | |
unsigned int queue_log:1 | |
} | logfiles |
static struct logmsgs | logmsgs |
static pthread_t | logthread = AST_PTHREADT_NULL |
static FILE * | qlog |
static char | queue_log_name [256] = QUEUELOG |
enum rotatestrategy | rotatestrategy |
static int | syslog_level_map [] |
static struct verbosers | verbosers |
#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 71 of file logger.c.
Referenced by ast_log_vsyslog().
#define VERBOSE_BUF_INIT_SIZE 256 |
Definition at line 184 of file logger.c.
Referenced by __ast_verbose_ap().
enum logmsgtypes |
Definition at line 136 of file logger.c.
{ LOGMSG_NORMAL = 0, LOGMSG_VERBOSE, };
enum logtypes |
enum rotatestrategy |
Definition at line 105 of file logger.c.
{ SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */ ROTATE = 1 << 1, /* Rotate all files, such that the oldest file has the highest suffix */ TIMESTAMP = 1 << 2, /* Append the epoch timestamp onto the end of the archived file */ } 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 1450 of file logger.c.
References __ast_verbose_ap().
{ va_list ap; va_start(ap, fmt); __ast_verbose_ap(file, line, func, fmt, ap); va_end(ap); }
void __ast_verbose_ap | ( | const char * | file, |
int | line, | ||
const char * | func, | ||
const char * | fmt, | ||
va_list | ap | ||
) |
Definition at line 1394 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_buffer(), ast_str_set_va(), ast_str_thread_get(), ast_strftime(), ast_tvnow(), buf, logchannel::list, logcond, logger_print_verbose(), LOGMSG_VERBOSE, logthread, logmsg::str, logmsg::type, and VERBOSE_BUF_INIT_SIZE.
Referenced by __ast_verbose(), and ast_verbose().
{ struct logmsg *logmsg = NULL; struct ast_str *buf = NULL; int res = 0; if (!(buf = ast_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE))) return; if (ast_opt_timestamp) { struct timeval now; struct ast_tm tm; char date[40]; char *datefmt; now = ast_tvnow(); ast_localtime(&now, &tm, NULL); ast_strftime(date, sizeof(date), dateformat, &tm); datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); sprintf(datefmt, "%c[%s] %s", 127, date, fmt); fmt = datefmt; } else { char *tmp = alloca(strlen(fmt) + 2); sprintf(tmp, "%c%s", 127, fmt); fmt = tmp; } /* Build string */ res = ast_str_set_va(&buf, 0, fmt, ap); /* If the build failed then we can drop this allocated message */ if (res == AST_DYNSTR_BUILD_FAILED) return; if (!(logmsg = ast_calloc(1, sizeof(*logmsg) + res + 1))) return; strcpy(logmsg->str, ast_str_buffer(buf)); ast_log(__LOG_VERBOSE, file, line, func, "%s", logmsg->str + 1); /* Set type */ logmsg->type = LOGMSG_VERBOSE; /* Add to the list and poke the thread if possible */ if (logthread != AST_PTHREADT_NULL) { AST_LIST_LOCK(&logmsgs); AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); ast_cond_signal(&logcond); AST_LIST_UNLOCK(&logmsgs); } else { logger_print_verbose(logmsg); ast_free(logmsg); } }
static void _handle_SIGXFSZ | ( | int | sig | ) | [static] |
Definition at line 837 of file logger.c.
{ /* Indicate need to reload */ filesize_reload_needed = 1; }
void ast_backtrace | ( | void | ) |
Definition at line 1367 of file logger.c.
References ast_debug, ast_log(), free, LOG_DEBUG, and LOG_WARNING.
{ #ifdef HAVE_BKTR struct ast_bt *bt; int i = 0; char **strings; if (!(bt = ast_bt_create())) { ast_log(LOG_WARNING, "Unable to allocate space for backtrace structure\n"); return; } if ((strings = ast_bt_get_symbols(bt->addresses, bt->num_frames))) { ast_debug(1, "Got %d backtrace record%c\n", bt->num_frames, bt->num_frames != 1 ? 's' : ' '); for (i = 0; i < bt->num_frames; i++) { ast_log(LOG_DEBUG, "#%d: [%p] %s\n", i, bt->addresses[i], strings[i]); } free(strings); } else { ast_debug(1, "Could not allocate memory for backtrace\n"); } ast_bt_destroy(bt); #else ast_log(LOG_WARNING, "Must run configure with '--with-execinfo' for stack backtraces.\n"); #endif /* defined(HAVE_BKTR) */ }
void ast_child_verbose | ( | int | level, |
const char * | fmt, | ||
... | |||
) |
Definition at line 423 of file logger.c.
References ast_free, ast_malloc, msg, and option_verbose.
Referenced by launch_script().
{ char *msg = NULL, *emsg = NULL, *sptr, *eptr; va_list ap, aq; int size; /* Don't bother, if the level isn't that high */ if (option_verbose < level) { return; } va_start(ap, fmt); va_copy(aq, ap); if ((size = vsnprintf(msg, 0, fmt, ap)) < 0) { va_end(ap); va_end(aq); return; } va_end(ap); if (!(msg = ast_malloc(size + 1))) { va_end(aq); return; } vsnprintf(msg, size + 1, fmt, aq); va_end(aq); if (!(emsg = ast_malloc(size * 2 + 1))) { ast_free(msg); return; } for (sptr = msg, eptr = emsg; ; sptr++) { if (*sptr == '"') { *eptr++ = '\\'; } *eptr++ = *sptr; if (*sptr == '\0') { break; } } ast_free(msg); fprintf(stdout, "verbose \"%s\" %d\n", emsg, level); fflush(stdout); ast_free(emsg); }
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 1101 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_buffer(), ast_str_set_va(), ast_str_thread_get(), ast_strftime(), ast_tvnow(), buf, logmsg::date, logmsg::file, logmsg::function, GETTID, logmsg::level, logmsg::line, logchannel::list, LOG_BUF_INIT_SIZE, logcond, logger_print_normal(), LOGMSG_NORMAL, logthread, option_debug, option_verbose, logmsg::process_id, logmsg::str, term_filter_escapes(), and logmsg::type.
Referenced by __adsi_transmit_messages(), __agent_start_monitoring(), __ao2_callback(), __ao2_ref(), __ast_answer(), __ast_bridge_technology_register(), __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(), _dahdi_get_index(), _enum_array_map(), _extension_match_core(), _get_mohbyname(), _macro_exec(), _moh_register(), _sip_tcp_helper_thread(), _while_exec(), accept_thread(), access_counter_file(), acf_channel_read(), acf_curl_exec(), acf_curlopt_read(), acf_curlopt_write(), 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(), acf_transaction_write(), 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_content(), add_email_attachment(), add_exten_to_pattern_tree(), add_extensions(), add_features_datastores(), add_header(), add_in_calls(), add_line(), add_out_calls(), add_pri_lockopt(), add_publish_event(), add_realm_authentication(), add_redirect(), add_rt_multi_cfg_entry(), add_sdp(), add_sip_domain(), add_subscribe_event(), add_to_agi(), add_user_extension(), admin_exec(), adsi_begin(), adsi_careful_send(), adsi_process(), adsi_prog(), advanced_options(), ael2_print(), aes_helper(), agent_answer(), agent_call(), agent_fixup(), agent_get_base_channel(), agent_hangup(), agent_indicate(), 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_ais_clm_load_module(), ast_ais_clm_unload_module(), ast_ais_evt_load_module(), ast_ais_evt_unload_module(), ast_aji_create_chat(), ast_aji_invite_chat(), ast_aji_join_chat(), ast_aji_send_chat(), ast_alaw_init(), ast_app_dtget(), ast_append_ha(), ast_async_goto(), ast_audiohook_write_frame(), ast_autoservice_start(), ast_backtrace(), ast_best_codec(), ast_bridge_call(), ast_call_forward(), ast_careful_fwrite(), ast_carefulwrite(), ast_cdr_alloc(), ast_cdr_end(), ast_cdr_engine_init(), ast_cdr_merge(), 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_cli_perms_init(), 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_cb(), 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_filehelper(), ast_find_ourip(), ast_format_str_reduce(), ast_format_unregister(), ast_func_read(), ast_func_write(), ast_get_encoded_char(), ast_get_enum(), ast_get_group(), 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_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_obj2(), ast_odbc_sanity_check(), ast_odbc_smart_execute(), ast_openstream_full(), ast_openvstream(), ast_ouraddrfor(), 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_with_duration(), 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_se(), ast_say_number_full_zh(), ast_sched_del(), ast_sched_runq(), ast_sched_thread_create(), 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_create(), 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_new_with_bindaddr(), ast_udptl_proto_register(), ast_udptl_read(), ast_udptl_write(), ast_ulaw_init(), ast_unload_resource(), ast_unlock_path_flock(), ast_unlock_path_lockfile(), 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_array_add(), bridge_call_thread(), bridge_exec(), bridge_make_compatible(), bridge_native_loop(), bridge_p2p_loop(), build_alias(), build_callno_limits(), build_channels(), build_conf(), build_device(), build_event_channel(), build_filename(), build_gateway(), build_mapping(), build_parkinglot(), build_peer(), build_route(), build_rpid(), build_user(), builtin_atxfer(), builtin_automixmonitor(), builtin_automonitor(), builtin_blindtransfer(), bump_gains(), cache_get_callno_locked(), calc_cost(), calc_metric(), calculate_far_max_ifp(), calculate_local_max_datagram(), 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(), channel_admin_exec(), channel_revert(), channel_spy(), channel_steer(), channel_to_session(), chanspy_exec(), check_abstract_reference(), check_access(), check_app_args(), check_auth(), check_break(), check_compat(), check_context_names(), check_continue(), check_day(), check_dow(), check_expr2_input(), check_for_conference(), check_freq_ic706(), check_goto(), check_header(), check_includes(), check_key(), check_label(), check_macro_returns(), check_month(), check_password(), check_post(), check_pval_item(), check_rtp_timeout(), check_srcaddr(), check_switch_expr(), check_timerange(), 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(), commit_exec(), 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_transfer(), compose_func_args(), compress_subclass(), conf_add(), conf_del(), conf_exec(), conf_flush(), conf_queue_dtmf(), conf_run(), confbridge_exec(), config_curl(), config_device(), config_function_read(), config_handler(), config_ldap(), config_line(), config_load(), config_module(), config_odbc(), config_parse_variables(), 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(), csv_quote(), 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_func_write(), dahdi_handle_dtmf(), dahdi_handle_event(), dahdi_hangup(), dahdi_indicate(), dahdi_link(), dahdi_new(), dahdi_open(), dahdi_read(), dahdi_request(), dahdi_restart(), dahdi_ring_phone(), dahdi_sendtext(), dahdi_set_hook(), dahdi_setoption(), dahdi_show_channel(), 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_pval_item(), 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_dtmf_local(), do_forward(), do_magic_pickup(), do_message(), 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(), duplicate_pseudo(), eagi_exec(), ebl_callback(), enable_jack_hook(), encode_open_type(), enum_callback(), enum_query_read(), enum_result_read(), event_channel_destroy(), evt_event_deliver_cb(), exec(), exec_exec(), execif_exec(), exists(), ext_cmp1(), extension_matches(), extenspy_exec(), external_rtp_create(), extstate_read(), fax_generator_generate(), fbuf_append(), feature_exec_app(), feature_request_and_dial(), festival_exec(), ffmpeg_decode(), ffmpeg_encode(), file_read(), filter(), finalize_content(), 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_pval_goto_item(), 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_transaction(), find_transcoders(), findmeexec(), finish_bookmark(), flash_exec(), flush_telem(), fn_wrapper(), forkcdr_exec(), forward_message(), framein(), func_args(), func_channel_read(), func_channel_write_real(), 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_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_orig(), 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_response_subscribe(), handle_soft_key_event_message(), handle_stimulus_message(), handle_t38_options(), handle_tcptls_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(), init_acf_query(), init_app_class(), init_jack_data(), init_logger(), init_req(), init_resp(), init_timing_thread(), inprocess_count(), 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(), join_conference_bridge(), 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(), lintogsm_framein(), lintolpc10_framein(), lintoulaw(), listener(), listfilter(), load_column_config(), load_config(), load_config_meetme(), load_indications(), 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_queue_frame(), local_setoption(), 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_mwi_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_release(), moh_scan_files(), mohalloc(), monmp3thread(), morsecode_exec(), mp3_exec(), mp3play(), mpeg4_decode(), mssql_connect(), multiplexed_bridge_create(), multiplexed_nudge(), multiplexed_thread_function(), mute_fragment(), mwi_send_init(), mwi_send_process_buffer(), mwi_send_process_event(), 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(), odbc_release_obj2(), 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(), originate_exec(), 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_call_full(), park_exec_full(), park_space_reserve(), parkandannounce_exec(), parkinglot_addref(), parkinglot_unref(), parse(), parse_args(), parse_buffers_policy(), parse_config(), parse_empty_options(), parse_gain_value(), parse_ie(), parse_minse(), parse_naptr(), parse_options(), parse_register_contact(), parse_request(), parse_session_expires(), parse_srv(), parse_tone_zone(), parse_via(), 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(), peek_read(), 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(), 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_sdp_a_audio(), process_sdp_c(), process_sdp_o(), process_text_line(), process_via(), profile_set_param(), progress(), proxy_update(), pthread_timer_set_rate(), purge_old_messages(), pvalCheckType(), pvalGlobalsAddStatement(), pvalTopLevAddObject(), 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(), readmimefile(), 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_update2_handler(), realtime_update_handler(), realtime_user(), realtimefield_read(), 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(), reload_single_member(), reload_single_queue(), remove_by_peercallno(), remove_by_transfercallno(), remove_from_queue(), replace_callno(), reply_digest(), require_curl(), require_odbc(), require_pgsql(), resample_frame(), reset_conf(), respprep(), restart_monitor(), restart_session_timer(), restore_conference(), restore_gains(), retrans_pkt(), retreive_memory(), retrydial_exec(), return_exec(), rollback_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(), rt_handle_member_record(), 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_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_sound(), 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_check_authtimeout(), 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_read(), sip_reg_timeout(), sip_register(), sip_removeheader(), sip_request_call(), sip_reregister(), sip_rtp_read(), sip_scheddestroy(), sip_sendhtml(), sip_sipredirect(), sip_st_alloc(), sip_subscribe_mwi(), sip_tcptls_write(), sip_threadinfo_create(), sip_write(), sipsock_read(), siren14read(), siren14write(), siren7read(), siren7write(), 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(), sound_thread(), 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(), sqlite_log(), ss_thread(), start_moh_exec(), start_monitor_exec(), start_network_thread(), 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_tone_zone_ring_cadence(), store_txmixa(), store_txmixb(), store_txtoctype(), stub_ast_key_get(), subscribe_event_destroy(), 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(), timerfd_timer_ack(), timerfd_timer_close(), timerfd_timer_disable_continuous(), timerfd_timer_enable_continuous(), timerfd_timer_get_event(), timerfd_timer_open(), timerfd_timer_set_rate(), 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(), 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(), update2_curl(), update2_ldap(), update2_odbc(), update2_pgsql(), update2_prepare(), 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_intro(), 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_cdr(), write_header(), write_history(), write_stream(), writefile(), xpmr_config(), yyerror(), and yyparse().
{ struct logmsg *logmsg = NULL; struct ast_str *buf = NULL; struct ast_tm tm; struct timeval now = ast_tvnow(); int res = 0; va_list ap; if (!(buf = ast_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) return; if (AST_RWLIST_EMPTY(&logchannels)) { /* * we don't have the logger chain configured yet, * so just log to stdout */ if (level != __LOG_VERBOSE) { int result; va_start(ap, fmt); result = ast_str_set_va(&buf, BUFSIZ, fmt, ap); /* XXX BUFSIZ ? */ va_end(ap); if (result != AST_DYNSTR_BUILD_FAILED) { term_filter_escapes(ast_str_buffer(buf)); fputs(ast_str_buffer(buf), stdout); } } return; } /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug are non-zero; LOG_DEBUG messages can still be displayed if option_debug is zero, if option_verbose is non-zero (this allows for 'level zero' LOG_DEBUG messages to be displayed, if the logmask on any channel allows it) */ if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) return; /* Ignore anything that never gets logged anywhere */ if (!(global_logmask & (1 << level))) return; /* Build string */ va_start(ap, fmt); res = ast_str_set_va(&buf, BUFSIZ, fmt, ap); va_end(ap); /* If the build failed, then abort and free this structure */ if (res == AST_DYNSTR_BUILD_FAILED) return; /* Create a new logging message */ if (!(logmsg = ast_calloc(1, sizeof(*logmsg) + res + 1))) return; /* Copy string over */ strcpy(logmsg->str, ast_str_buffer(buf)); /* Set type to be normal */ logmsg->type = LOGMSG_NORMAL; /* Create our date/time */ ast_localtime(&now, &tm, NULL); ast_strftime(logmsg->date, sizeof(logmsg->date), dateformat, &tm); /* Copy over data */ logmsg->level = level; logmsg->line = line; ast_copy_string(logmsg->file, file, sizeof(logmsg->file)); ast_copy_string(logmsg->function, function, sizeof(logmsg->function)); logmsg->process_id = (long) GETTID(); /* If the logger thread is active, append it to the tail end of the list - otherwise skip that step */ if (logthread != AST_PTHREADT_NULL) { AST_LIST_LOCK(&logmsgs); AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); ast_cond_signal(&logcond); AST_LIST_UNLOCK(&logmsgs); } else { logger_print_normal(logmsg); ast_free(logmsg); } return; }
static void ast_log_vsyslog | ( | int | level, |
const char * | file, | ||
int | line, | ||
const char * | function, | ||
char * | str, | ||
long | pid | ||
) | [static] |
Definition at line 848 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_VERBOSE, buf, levels, SYSLOG_NLEVELS, and term_strip().
Referenced by logger_print_normal().
{ char buf[BUFSIZ]; if (level >= SYSLOG_NLEVELS) { /* we are locked here, so cannot ast_log() */ fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", level); return; } if (level == __LOG_VERBOSE) { snprintf(buf, sizeof(buf), "VERBOSE[%ld]: %s", pid, str); level = __LOG_DEBUG; } else if (level == __LOG_DTMF) { snprintf(buf, sizeof(buf), "DTMF[%ld]: %s", pid, str); level = __LOG_DEBUG; } else { snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: %s", levels[level], pid, file, line, function, str); } term_strip(buf, buf, strlen(buf) + 1); syslog(syslog_level_map[level], "%s", buf); }
void ast_queue_log | ( | const char * | queuename, |
const char * | callid, | ||
const char * | agent, | ||
const char * | event, | ||
const char * | fmt, | ||
... | |||
) |
Definition at line 472 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().
{ va_list ap; char qlog_msg[8192]; int qlog_len; char time_str[16]; if (ast_check_realtime("queue_log")) { va_start(ap, fmt); vsnprintf(qlog_msg, sizeof(qlog_msg), fmt, ap); va_end(ap); snprintf(time_str, sizeof(time_str), "%ld", (long)time(NULL)); ast_store_realtime("queue_log", "time", time_str, "callid", callid, "queuename", queuename, "agent", agent, "event", event, "data", qlog_msg, SENTINEL); } else { if (qlog) { va_start(ap, fmt); qlog_len = snprintf(qlog_msg, sizeof(qlog_msg), "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event); vsnprintf(qlog_msg + qlog_len, sizeof(qlog_msg) - qlog_len, fmt, ap); va_end(ap); } AST_RWLIST_RDLOCK(&logchannels); if (qlog) { fprintf(qlog, "%s\n", qlog_msg); fflush(qlog); } AST_RWLIST_UNLOCK(&logchannels); } }
int ast_register_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1469 of file logger.c.
References ast_malloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, logchannel::list, verb, and verb::verboser.
Referenced by ast_makesocket(), main(), and show_console().
{ struct verb *verb; if (!(verb = ast_malloc(sizeof(*verb)))) return -1; verb->verboser = v; AST_RWLIST_WRLOCK(&verbosers); AST_RWLIST_INSERT_HEAD(&verbosers, verb, list); AST_RWLIST_UNLOCK(&verbosers); return 0; }
AST_THREADSTORAGE_CUSTOM_SCOPE | ( | log_buf | , |
NULL | , | ||
ast_free_ptr | , | ||
static | |||
) |
AST_THREADSTORAGE_CUSTOM_SCOPE | ( | verbose_buf | , |
NULL | , | ||
ast_free_ptr | , | ||
static | |||
) |
int ast_unregister_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1485 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, logchannel::list, and verb::verboser.
Referenced by exit_now().
{ struct verb *cur; AST_RWLIST_WRLOCK(&verbosers); AST_RWLIST_TRAVERSE_SAFE_BEGIN(&verbosers, cur, list) { if (cur->verboser == v) { AST_RWLIST_REMOVE_CURRENT(list); ast_free(cur); break; } } AST_RWLIST_TRAVERSE_SAFE_END; AST_RWLIST_UNLOCK(&verbosers); return cur ? 0 : -1; }
void ast_verbose | ( | const char * | fmt, |
... | |||
) |
Definition at line 1461 of file logger.c.
References __ast_verbose_ap().
Referenced by __agent_start_monitoring(), __ast_bridge_technology_register(), __ast_str_helper(), __sip_destroy(), add_codec_to_sdp(), add_noncodec_to_sdp(), add_sdp(), add_tcodec_to_sdp(), add_vcodec_to_sdp(), aji_handle_presence(), aji_handle_subscribe(), aji_log_hook(), aji_test(), alsa_answer(), alsa_call(), alsa_digit(), alsa_hangup(), alsa_indicate(), alsa_text(), ast_agi_send(), ast_bridge_technology_unregister(), ast_frame_dump(), ast_module_reload(), ast_readconfig(), ast_remotecontrol(), ast_rtcp_read(), ast_rtcp_write_rr(), ast_rtcp_write_sr(), ast_rtp_destroy(), ast_rtp_raw_write(), ast_rtp_read(), ast_rtp_sendcng(), ast_rtp_senddigit_begin(), ast_rtp_senddigit_continuation(), ast_rtp_senddigit_end_with_duration(), ast_say_enumeration_full_he(), ast_say_number_full_he(), ast_set_priority(), astman_append(), attempt_reconnect(), auth_headers(), bridge_p2p_rtp_write(), check_peer_ok(), check_via(), conf_run(), dahdi_request(), dahdi_softhangup_all(), destroy_all_channels(), dialout(), do_register_auth(), dumpchan_exec(), dundi_debug_output(), find_command(), find_gtalk(), find_transcoders(), get_also_info(), get_destination(), get_rdnis(), get_refer_info(), gtalk_do_reload(), gtalk_handle_dtmf(), h323_reload(), handle_cli_misdn_send_facility(), handle_frame(), handle_incoming(), handle_offhook_message(), handle_request(), handle_request_do(), handle_request_info(), handle_request_invite(), handle_request_message(), handle_request_refer(), handle_request_subscribe(), handle_response(), handle_transfer_button(), iax_debug_output(), init_files_class(), initialize_initreq(), ivr_demo_func(), jb_debug_output(), jingle_handle_dtmf(), leave_voicemail(), list_route(), load_config(), load_module(), load_rpt_vars(), main(), mdc1200_notify(), mgcp_reload(), mgcpsock_read(), moh_files_release(), oss_answer(), oss_call(), oss_digit_end(), oss_hangup(), oss_indicate(), oss_text(), parse(), parse_register_contact(), phone_check_exception(), phone_exception(), play_record_review(), process_sdp(), process_sdp_a_audio(), process_sdp_a_text(), process_sdp_a_video(), quit_handler(), receive_message(), resend_response(), retrans_pkt(), rpt(), rpt_exec(), run_agi(), send_request(), send_response(), set_destination(), setformat(), sip_read(), sip_reload(), sip_rtp_read(), sip_scheddestroy(), sip_sendtext(), start_resource(), stun_handle_packet(), stun_process_attr(), timeout_write(), timing_read(), transmit_register(), usbradio_digit_end(), usbradio_indicate(), usbradio_text(), and verbose_exec().
{ va_list ap; va_start(ap, fmt); __ast_verbose_ap("", 0, "", fmt, ap); va_end(ap); }
void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 1059 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, logchannel::list, logcond, logthread, and qlog.
Referenced by quit_handler().
{ struct logchannel *f = NULL; /* Stop logger thread */ AST_LIST_LOCK(&logmsgs); close_logger_thread = 1; ast_cond_signal(&logcond); AST_LIST_UNLOCK(&logmsgs); if (logthread != AST_PTHREADT_NULL) pthread_join(logthread, NULL); AST_RWLIST_WRLOCK(&logchannels); if (eventlog) { fclose(eventlog); eventlog = NULL; } if (qlog) { fclose(qlog); qlog = NULL; } AST_RWLIST_TRAVERSE(&logchannels, f, list) { if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { fclose(f->fileptr); f->fileptr = NULL; } } closelog(); /* syslog */ AST_RWLIST_UNLOCK(&logchannels); return; }
static char* handle_logger_reload | ( | struct ast_cli_entry * | e, |
int | cmd, | ||
struct ast_cli_args * | a | ||
) | [static] |
Definition at line 701 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.
{ switch (cmd) { case CLI_INIT: e->command = "logger reload"; e->usage = "Usage: logger reload\n" " Reloads the logger subsystem state. Use after restarting syslogd(8) if you are using syslog logging.\n"; return NULL; case CLI_GENERATE: return NULL; } if (reload_logger(0)) { ast_cli(a->fd, "Failed to reload the logger\n"); return CLI_FAILURE; } return CLI_SUCCESS; }
static char* handle_logger_rotate | ( | struct ast_cli_entry * | e, |
int | cmd, | ||
struct ast_cli_args * | a | ||
) | [static] |
Definition at line 720 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.
{ switch (cmd) { case CLI_INIT: e->command = "logger rotate"; e->usage = "Usage: logger rotate\n" " Rotates and Reopens the log files.\n"; return NULL; case CLI_GENERATE: return NULL; } if (reload_logger(1)) { ast_cli(a->fd, "Failed to reload the logger and rotate log files\n"); return CLI_FAILURE; } return CLI_SUCCESS; }
static char* handle_logger_set_level | ( | struct ast_cli_entry * | e, |
int | cmd, | ||
struct ast_cli_args * | a | ||
) | [static] |
Definition at line 739 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.
{ int x; int state; int level = -1; switch (cmd) { case CLI_INIT: e->command = "logger set level {DEBUG|NOTICE|WARNING|ERROR|VERBOSE|DTMF} {on|off}"; e->usage = "Usage: logger set level {DEBUG|NOTICE|WARNING|ERROR|VERBOSE|DTMF} {on|off}\n" " Set a specific log level to enabled/disabled for this console.\n"; return NULL; case CLI_GENERATE: return NULL; } if (a->argc < 5) return CLI_SHOWUSAGE; for (x = 0; x <= NUMLOGLEVELS; x++) { if (!strcasecmp(a->argv[3], levels[x])) { level = x; break; } } state = ast_true(a->argv[4]) ? 1 : 0; if (level != -1) { ast_console_toggle_loglevel(a->fd, level, state); ast_cli(a->fd, "Logger status for '%s' has been set to '%s'.\n", levels[level], state ? "on" : "off"); } else return CLI_SHOWUSAGE; return CLI_SUCCESS; }
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 778 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::list, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, logchannel::type, and ast_cli_entry::usage.
{ #define FORMATL "%-35.35s %-8.8s %-9.9s " struct logchannel *chan; switch (cmd) { case CLI_INIT: e->command = "logger show channels"; e->usage = "Usage: logger show channels\n" " List configured logger channels.\n"; return NULL; case CLI_GENERATE: return NULL; } ast_cli(a->fd, FORMATL, "Channel", "Type", "Status"); ast_cli(a->fd, "Configuration\n"); ast_cli(a->fd, FORMATL, "-------", "----", "------"); ast_cli(a->fd, "-------------\n"); AST_RWLIST_RDLOCK(&logchannels); AST_RWLIST_TRAVERSE(&logchannels, chan, list) { ast_cli(a->fd, FORMATL, chan->filename, chan->type == LOGTYPE_CONSOLE ? "Console" : (chan->type == LOGTYPE_SYSLOG ? "Syslog" : "File"), chan->disabled ? "Disabled" : "Enabled"); ast_cli(a->fd, " - "); if (chan->logmask & (1 << __LOG_DEBUG)) ast_cli(a->fd, "Debug "); if (chan->logmask & (1 << __LOG_DTMF)) ast_cli(a->fd, "DTMF "); if (chan->logmask & (1 << __LOG_VERBOSE)) ast_cli(a->fd, "Verbose "); if (chan->logmask & (1 << __LOG_WARNING)) ast_cli(a->fd, "Warning "); if (chan->logmask & (1 << __LOG_NOTICE)) ast_cli(a->fd, "Notice "); if (chan->logmask & (1 << __LOG_ERROR)) ast_cli(a->fd, "Error "); if (chan->logmask & (1 << __LOG_EVENT)) ast_cli(a->fd, "Event "); ast_cli(a->fd, "\n"); } AST_RWLIST_UNLOCK(&logchannels); ast_cli(a->fd, "\n"); return CLI_SUCCESS; }
int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 1015 of file logger.c.
References ARRAY_LEN, 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().
{ char tmp[256]; int res = 0; /* auto rotate if sig SIGXFSZ comes a-knockin */ sigaction(SIGXFSZ, &handle_SIGXFSZ, NULL); /* start logger thread */ ast_cond_init(&logcond, NULL); if (ast_pthread_create(&logthread, NULL, logger_thread, NULL) < 0) { ast_cond_destroy(&logcond); return -1; } /* register the logger cli commands */ ast_cli_register_multiple(cli_logger, ARRAY_LEN(cli_logger)); ast_mkdir(ast_config_AST_LOG_DIR, 0777); /* create log channels */ init_logger_chain(0 /* locked */); /* create the eventlog */ if (logfiles.event_log) { snprintf(tmp, sizeof(tmp), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); eventlog = fopen(tmp, "a"); if (eventlog) { ast_log(LOG_EVENT, "Started Asterisk Event Logger\n"); ast_verb(1, "Asterisk Event Logger Started %s\n", tmp); } else { ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); res = -1; } } if (logfiles.queue_log) { snprintf(tmp, sizeof(tmp), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); qlog = fopen(tmp, "a"); ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); } return res; }
static void init_logger_chain | ( | int | locked | ) | [static] |
Definition at line 327 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, CONFIG_STATUS_FILEINVALID, errno, ast_variable::lineno, logchannel::list, 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().
{ struct logchannel *chan; struct ast_config *cfg; struct ast_variable *var; const char *s; struct ast_flags config_flags = { 0 }; if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) return; /* delete our list of log channels */ if (!locked) AST_RWLIST_WRLOCK(&logchannels); while ((chan = AST_RWLIST_REMOVE_HEAD(&logchannels, list))) ast_free(chan); if (!locked) AST_RWLIST_UNLOCK(&logchannels); global_logmask = 0; errno = 0; /* close syslog */ closelog(); /* If no config file, we're fine, set default options. */ if (!cfg) { if (errno) fprintf(stderr, "Unable to open logger.conf: %s; default settings will be used.\n", strerror(errno)); else fprintf(stderr, "Errors detected in logger.conf: see above; default settings will be used.\n"); if (!(chan = ast_calloc(1, sizeof(*chan)))) return; chan->type = LOGTYPE_CONSOLE; chan->logmask = 28; /*warning,notice,error */ if (!locked) AST_RWLIST_WRLOCK(&logchannels); AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); if (!locked) AST_RWLIST_UNLOCK(&logchannels); global_logmask |= chan->logmask; return; } if ((s = ast_variable_retrieve(cfg, "general", "appendhostname"))) { if (ast_true(s)) { if (gethostname(hostname, sizeof(hostname) - 1)) { ast_copy_string(hostname, "unknown", sizeof(hostname)); fprintf(stderr, "What box has no hostname???\n"); } } else hostname[0] = '\0'; } else hostname[0] = '\0'; if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) ast_copy_string(dateformat, s, sizeof(dateformat)); else ast_copy_string(dateformat, "%b %e %T", sizeof(dateformat)); if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) logfiles.queue_log = ast_true(s); if ((s = ast_variable_retrieve(cfg, "general", "event_log"))) logfiles.event_log = ast_true(s); if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name"))) ast_copy_string(queue_log_name, s, sizeof(queue_log_name)); if ((s = ast_variable_retrieve(cfg, "general", "exec_after_rotate"))) ast_copy_string(exec_after_rotate, s, sizeof(exec_after_rotate)); if ((s = ast_variable_retrieve(cfg, "general", "rotatestrategy"))) { if (strcasecmp(s, "timestamp") == 0) rotatestrategy = TIMESTAMP; else if (strcasecmp(s, "rotate") == 0) rotatestrategy = ROTATE; else if (strcasecmp(s, "sequential") == 0) rotatestrategy = SEQUENTIAL; else fprintf(stderr, "Unknown rotatestrategy: %s\n", s); } else { if ((s = ast_variable_retrieve(cfg, "general", "rotatetimestamp"))) { rotatestrategy = ast_true(s) ? TIMESTAMP : SEQUENTIAL; fprintf(stderr, "rotatetimestamp option has been deprecated. Please use rotatestrategy instead.\n"); } } if (!locked) AST_RWLIST_WRLOCK(&logchannels); var = ast_variable_browse(cfg, "logfiles"); for (; var; var = var->next) { if (!(chan = make_logchannel(var->name, var->value, var->lineno))) continue; AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); global_logmask |= chan->logmask; } if (!locked) AST_RWLIST_UNLOCK(&logchannels); ast_config_destroy(cfg); }
static void logger_print_normal | ( | struct logmsg * | logmsg | ) | [static] |
Print a normal log message to the channels.
Definition at line 874 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, logchannel::list, LOG_EVENT, logfiles, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, manager_event, logmsg::process_id, reload_logger(), logmsg::str, term_color(), term_strip(), and logchannel::type.
Referenced by ast_log(), and logger_thread().
{ struct logchannel *chan = NULL; char buf[BUFSIZ]; AST_RWLIST_RDLOCK(&logchannels); if (logfiles.event_log && logmsg->level == __LOG_EVENT) { fprintf(eventlog, "%s asterisk[%ld]: %s", logmsg->date, (long)getpid(), logmsg->str); fflush(eventlog); AST_RWLIST_UNLOCK(&logchannels); return; } if (!AST_RWLIST_EMPTY(&logchannels)) { AST_RWLIST_TRAVERSE(&logchannels, chan, list) { /* If the channel is disabled, then move on to the next one */ if (chan->disabled) continue; /* Check syslog channels */ if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << logmsg->level))) { ast_log_vsyslog(logmsg->level, logmsg->file, logmsg->line, logmsg->function, logmsg->str, logmsg->process_id); /* Console channels */ } else if (chan->type == LOGTYPE_CONSOLE && (chan->logmask & (1 << logmsg->level))) { char linestr[128]; char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; /* If the level is verbose, then skip it */ if (logmsg->level == __LOG_VERBOSE) continue; /* Turn the numerical line number into a string */ snprintf(linestr, sizeof(linestr), "%d", logmsg->line); /* Build string to print out */ snprintf(buf, sizeof(buf), "[%s] %s[%ld]: %s:%s %s: %s", logmsg->date, term_color(tmp1, levels[logmsg->level], colors[logmsg->level], 0, sizeof(tmp1)), logmsg->process_id, term_color(tmp2, logmsg->file, COLOR_BRWHITE, 0, sizeof(tmp2)), term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), term_color(tmp4, logmsg->function, COLOR_BRWHITE, 0, sizeof(tmp4)), logmsg->str); /* Print out */ ast_console_puts_mutable(buf, logmsg->level); /* File channels */ } else if (chan->type == LOGTYPE_FILE && (chan->logmask & (1 << logmsg->level))) { int res = 0; /* If no file pointer exists, skip it */ if (!chan->fileptr) { continue; } /* Print out to the file */ res = fprintf(chan->fileptr, "[%s] %s[%ld] %s: %s", logmsg->date, levels[logmsg->level], logmsg->process_id, logmsg->file, term_strip(buf, logmsg->str, BUFSIZ)); if (res <= 0 && !ast_strlen_zero(logmsg->str)) { fprintf(stderr, "**** Asterisk Logging Error: ***********\n"); if (errno == ENOMEM || errno == ENOSPC) fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); else fprintf(stderr, "Logger Warning: Unable to write to log file '%s': %s (disabled)\n", chan->filename, strerror(errno)); manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); chan->disabled = 1; } else if (res > 0) { fflush(chan->fileptr); } } } } else if (logmsg->level != __LOG_VERBOSE) { fputs(logmsg->str, stdout); } AST_RWLIST_UNLOCK(&logchannels); /* If we need to reload because of the file size, then do so */ if (filesize_reload_needed) { reload_logger(-1); ast_log(LOG_EVENT, "Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); ast_verb(1, "Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); } return; }
static void logger_print_verbose | ( | struct logmsg * | logmsg | ) | [static] |
Print a verbose message to the verbosers.
Definition at line 960 of file logger.c.
References AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, logchannel::list, logmsg::str, and verb::verboser.
Referenced by __ast_verbose_ap(), and logger_thread().
{ struct verb *v = NULL; /* Iterate through the list of verbosers and pass them the log message string */ AST_RWLIST_RDLOCK(&verbosers); AST_RWLIST_TRAVERSE(&verbosers, v, list) v->verboser(logmsg->str); AST_RWLIST_UNLOCK(&verbosers); return; }
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 694 of file logger.c.
References reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
{ if(reload_logger(0)) return RESULT_FAILURE; return RESULT_SUCCESS; }
static void* logger_thread | ( | void * | data | ) | [static] |
Actual logging thread.
Definition at line 974 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, logchannel::list, logmsgs::lock, logcond, logger_print_normal(), logger_print_verbose(), LOGMSG_NORMAL, LOGMSG_VERBOSE, msg, and logchannel::next.
Referenced by init_logger().
{ struct logmsg *next = NULL, *msg = NULL; for (;;) { /* We lock the message list, and see if any message exists... if not we wait on the condition to be signalled */ AST_LIST_LOCK(&logmsgs); if (AST_LIST_EMPTY(&logmsgs)) { if (close_logger_thread) { break; } else { ast_cond_wait(&logcond, &logmsgs.lock); } } next = AST_LIST_FIRST(&logmsgs); AST_LIST_HEAD_INIT_NOLOCK(&logmsgs); AST_LIST_UNLOCK(&logmsgs); /* Otherwise go through and process each message in the order added */ while ((msg = next)) { /* Get the next entry now so that we can free our current structure later */ next = AST_LIST_NEXT(msg, list); /* Depending on the type, send it to the proper function */ if (msg->type == LOGMSG_NORMAL) logger_print_normal(msg); else if (msg->type == LOGMSG_VERBOSE) logger_print_verbose(msg); /* Free the data since we are done */ ast_free(msg); } /* If we should stop, then stop */ if (close_logger_thread) break; } return NULL; }
static int make_components | ( | const char * | s, |
int | lineno | ||
) | [static] |
Definition at line 189 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_ERROR, __LOG_EVENT, __LOG_NOTICE, __LOG_VERBOSE, __LOG_WARNING, ast_strdupa, ast_strip(), ast_strlen_zero(), and strsep().
Referenced by make_logchannel().
{ char *w; int res = 0; char *stringp = ast_strdupa(s); while ((w = strsep(&stringp, ","))) { w = ast_strip(w); if (ast_strlen_zero(w)) { continue; } if (!strcasecmp(w, "error")) res |= (1 << __LOG_ERROR); else if (!strcasecmp(w, "warning")) res |= (1 << __LOG_WARNING); else if (!strcasecmp(w, "notice")) res |= (1 << __LOG_NOTICE); else if (!strcasecmp(w, "event")) res |= (1 << __LOG_EVENT); else if (!strcasecmp(w, "debug")) res |= (1 << __LOG_DEBUG); else if (!strcasecmp(w, "verbose")) res |= (1 << __LOG_VERBOSE); else if (!strcasecmp(w, "dtmf")) res |= (1 << __LOG_DTMF); else { fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno); } } return res; }
static struct logchannel* make_logchannel | ( | const char * | channel, |
const char * | components, | ||
int | lineno | ||
) | [static, read] |
Definition at line 222 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().
{ struct logchannel *chan; char *facility; #ifndef SOLARIS CODE *cptr; #endif if (ast_strlen_zero(channel) || !(chan = ast_calloc(1, sizeof(*chan)))) return NULL; if (!strcasecmp(channel, "console")) { chan->type = LOGTYPE_CONSOLE; } else if (!strncasecmp(channel, "syslog", 6)) { /* * syntax is: * syslog.facility => level,level,level */ facility = strchr(channel, '.'); if (!facility++ || !facility) { facility = "local0"; } #ifndef SOLARIS /* * Walk through the list of facilitynames (defined in sys/syslog.h) * to see if we can find the one we have been given */ chan->facility = -1; cptr = facilitynames; while (cptr->c_name) { if (!strcasecmp(facility, cptr->c_name)) { chan->facility = cptr->c_val; break; } cptr++; } #else chan->facility = -1; if (!strcasecmp(facility, "kern")) chan->facility = LOG_KERN; else if (!strcasecmp(facility, "USER")) chan->facility = LOG_USER; else if (!strcasecmp(facility, "MAIL")) chan->facility = LOG_MAIL; else if (!strcasecmp(facility, "DAEMON")) chan->facility = LOG_DAEMON; else if (!strcasecmp(facility, "AUTH")) chan->facility = LOG_AUTH; else if (!strcasecmp(facility, "SYSLOG")) chan->facility = LOG_SYSLOG; else if (!strcasecmp(facility, "LPR")) chan->facility = LOG_LPR; else if (!strcasecmp(facility, "NEWS")) chan->facility = LOG_NEWS; else if (!strcasecmp(facility, "UUCP")) chan->facility = LOG_UUCP; else if (!strcasecmp(facility, "CRON")) chan->facility = LOG_CRON; else if (!strcasecmp(facility, "LOCAL0")) chan->facility = LOG_LOCAL0; else if (!strcasecmp(facility, "LOCAL1")) chan->facility = LOG_LOCAL1; else if (!strcasecmp(facility, "LOCAL2")) chan->facility = LOG_LOCAL2; else if (!strcasecmp(facility, "LOCAL3")) chan->facility = LOG_LOCAL3; else if (!strcasecmp(facility, "LOCAL4")) chan->facility = LOG_LOCAL4; else if (!strcasecmp(facility, "LOCAL5")) chan->facility = LOG_LOCAL5; else if (!strcasecmp(facility, "LOCAL6")) chan->facility = LOG_LOCAL6; else if (!strcasecmp(facility, "LOCAL7")) chan->facility = LOG_LOCAL7; #endif /* Solaris */ if (0 > chan->facility) { fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n"); ast_free(chan); return NULL; } chan->type = LOGTYPE_SYSLOG; snprintf(chan->filename, sizeof(chan->filename), "%s", channel); openlog("asterisk", LOG_PID, chan->facility); } else { if (!ast_strlen_zero(hostname)) { snprintf(chan->filename, sizeof(chan->filename), "%s/%s.%s", channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel, hostname); } else { snprintf(chan->filename, sizeof(chan->filename), "%s/%s", channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel); } chan->fileptr = fopen(chan->filename, "a"); if (!chan->fileptr) { /* Can't log here, since we're called with a lock */ fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno)); } chan->type = LOGTYPE_FILE; } chan->logmask = make_components(components, lineno); return chan; }
static int reload_logger | ( | int | rotate | ) | [static] |
Definition at line 593 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(), logchannel::list, 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().
{ char old[PATH_MAX] = ""; int event_rotate = rotate, queue_rotate = rotate; struct logchannel *f; int res = 0; struct stat st; AST_RWLIST_WRLOCK(&logchannels); if (eventlog) { if (rotate < 0) { /* Check filesize - this one typically doesn't need an auto-rotate */ snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); if (stat(old, &st) != 0 || st.st_size > 0x40000000) { /* Arbitrarily, 1 GB */ fclose(eventlog); eventlog = NULL; } else event_rotate = 0; } else { fclose(eventlog); eventlog = NULL; } } else event_rotate = 0; if (qlog) { if (rotate < 0) { /* Check filesize - this one typically doesn't need an auto-rotate */ snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); if (stat(old, &st) != 0 || st.st_size > 0x40000000) { /* Arbitrarily, 1 GB */ fclose(qlog); qlog = NULL; } else queue_rotate = 0; } else { fclose(qlog); qlog = NULL; } } else queue_rotate = 0; ast_mkdir(ast_config_AST_LOG_DIR, 0777); AST_RWLIST_TRAVERSE(&logchannels, f, list) { if (f->disabled) { f->disabled = 0; /* Re-enable logging at reload */ manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); } if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { fclose(f->fileptr); /* Close file */ f->fileptr = NULL; if (rotate) rotate_file(f->filename); } } filesize_reload_needed = 0; init_logger_chain(1 /* locked */); if (logfiles.event_log) { snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG); if (event_rotate) rotate_file(old); eventlog = fopen(old, "a"); if (eventlog) { ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n"); ast_verb(1, "Asterisk Event Logger restarted\n"); } else { ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno)); res = -1; } } if (logfiles.queue_log) { snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); if (queue_rotate) rotate_file(old); qlog = fopen(old, "a"); if (qlog) { AST_RWLIST_UNLOCK(&logchannels); ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); AST_RWLIST_WRLOCK(&logchannels); ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n"); ast_verb(1, "Asterisk Queue Logger restarted\n"); } else { ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); res = -1; } } AST_RWLIST_UNLOCK(&logchannels); return res; }
static int rotate_file | ( | const char * | filename | ) | [static] |
Definition at line 507 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().
{ char old[PATH_MAX]; char new[PATH_MAX]; int x, y, which, found, res = 0, fd; char *suffixes[4] = { "", ".gz", ".bz2", ".Z" }; switch (rotatestrategy) { case SEQUENTIAL: for (x = 0; ; x++) { snprintf(new, sizeof(new), "%s.%d", filename, x); fd = open(new, O_RDONLY); if (fd > -1) close(fd); else break; } if (rename(filename, new)) { fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); res = -1; } break; case TIMESTAMP: snprintf(new, sizeof(new), "%s.%ld", filename, (long)time(NULL)); if (rename(filename, new)) { fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); res = -1; } break; case ROTATE: /* Find the next empty slot, including a possible suffix */ for (x = 0; ; x++) { found = 0; for (which = 0; which < ARRAY_LEN(suffixes); which++) { snprintf(new, sizeof(new), "%s.%d%s", filename, x, suffixes[which]); fd = open(new, O_RDONLY); if (fd > -1) { close(fd); found = 1; break; } } if (!found) { break; } } /* Found an empty slot */ for (y = x; y > 0; y--) { for (which = 0; which < ARRAY_LEN(suffixes); which++) { snprintf(old, sizeof(old), "%s.%d%s", filename, y - 1, suffixes[which]); fd = open(old, O_RDONLY); if (fd > -1) { /* Found the right suffix */ close(fd); snprintf(new, sizeof(new), "%s.%d%s", filename, y, suffixes[which]); if (rename(old, new)) { fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); res = -1; } break; } } } /* Finally, rename the current file */ snprintf(new, sizeof(new), "%s.0", filename); if (rename(filename, new)) { fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); res = -1; } } if (!ast_strlen_zero(exec_after_rotate)) { struct ast_channel *c = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Logger/rotate"); char buf[512]; pbx_builtin_setvar_helper(c, "filename", filename); pbx_substitute_variables_helper(c, exec_after_rotate, buf, sizeof(buf)); if (ast_safe_system(buf) == -1) { ast_log(LOG_WARNING, "error executing '%s'\n", buf); } ast_channel_free(c); } return res; }
struct ast_cli_entry cli_logger[] [static] |
Definition at line 830 of file logger.c.
Referenced by init_logger().
int close_logger_thread = 0 [static] |
Definition at line 156 of file logger.c.
Referenced by close_logger(), and logger_thread().
int colors[] [static] |
Colors used in the console for logging.
Definition at line 173 of file logger.c.
Referenced by logger_print_normal().
char dateformat[256] = "%b %e %T" [static] |
Definition at line 97 of file logger.c.
Referenced by build_device().
FILE* eventlog [static] |
Definition at line 158 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] |
struct sigaction handle_SIGXFSZ [static] |
{ .sa_handler = _handle_SIGXFSZ, .sa_flags = SA_RESTART, }
Definition at line 843 of file logger.c.
Referenced by init_logger().
char hostname[MAXHOSTNAMELEN] [static] |
Definition at line 116 of file logger.c.
Referenced by app_exec(), ast_readconfig(), ast_remotecontrol(), cli_prompt(), iax2_register(), main(), netconsole(), set_destination(), sip_parse_host(), sip_register(), sip_subscribe_mwi(), and tds_load_module().
char* levels[] [static] |
Logging channels used in the Asterisk logging system.
Definition at line 162 of file logger.c.
Referenced by ast_log_vsyslog(), ast_network_puts_mutable(), handle_logger_set_level(), and logger_print_normal().
struct logchannels logchannels [static] |
ast_cond_t logcond [static] |
Definition at line 155 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 154 of file logger.c.
Referenced by __ast_verbose_ap(), ast_log(), close_logger(), and init_logger().
FILE* qlog [static] |
Definition at line 159 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] |