#include "asterisk.h"
#include <syslog.h>
#include "asterisk/_private.h"
#include "asterisk/paths.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"
#include <signal.h>
#include <time.h>
#include <sys/stat.h>
#include <fcntl.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 | FORMATL "%-35.35s %-8.8s %-9.9s " |
| #define | GETTID() getpid() |
| #define | LOG_BUF_INIT_SIZE 256 |
| #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_log_buf (void) |
| static void | __init_logchannels (void) |
| static void | __init_verbose_buf (void) |
| static void | __init_verbosers (void) |
| 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 (struct logmsg *msg) |
| int | ast_logger_register_level (const char *name) |
| Register a new logger level. | |
| void | ast_logger_unregister_level (const char *name) |
| Unregister a previously registered logger level. | |
| 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)) |
| 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 unsigned 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) |
| static void | update_logchannels (void) |
Variables | |
| static struct ast_cli_entry | cli_logger [] |
| static int | close_logger_thread = 0 |
| static const int | colors [32] |
| Colors used in the console for logging. | |
| static char | dateformat [256] = "%b %e %T" |
| static char | exec_after_rotate [256] = "" |
| static int | filesize_reload_needed |
| static unsigned int | global_logmask = 0xFFFF |
| static char | hostname [MAXHOSTNAMELEN] |
| static char * | levels [32] |
| Logging channels used in the Asterisk logging system. | |
| static struct ast_threadstorage | log_buf = { .once = PTHREAD_ONCE_INIT, .key_init = __init_log_buf , .custom_init = NULL , } |
| static ast_cond_t | logcond |
| struct { | |
| unsigned int queue_log:1 | |
| } | logfiles |
| static pthread_t | logthread = AST_PTHREADT_NULL |
| static FILE * | qlog |
| static char | queue_log_name [256] = QUEUELOG |
| static struct ast_threadstorage | verbose_buf = { .once = PTHREAD_ONCE_INIT, .key_init = __init_verbose_buf , .custom_init = NULL , } |
Logging routines
Definition in file logger.c.
| #define FORMATL "%-35.35s %-8.8s %-9.9s " |
Referenced by handle_logger_show_channels().
| #define VERBOSE_BUF_INIT_SIZE 256 |
| enum logmsgtypes |
Definition at line 119 of file logger.c.
00119 { 00120 LOGMSG_NORMAL = 0, 00121 LOGMSG_VERBOSE, 00122 };
| enum logtypes |
Definition at line 90 of file logger.c.
00090 { 00091 LOGTYPE_SYSLOG, 00092 LOGTYPE_FILE, 00093 LOGTYPE_CONSOLE, 00094 };
| enum rotatestrategy |
Definition at line 78 of file logger.c.
00078 { 00079 SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */ 00080 ROTATE = 1 << 1, /* Rotate all files, such that the oldest file has the highest suffix */ 00081 TIMESTAMP = 1 << 2, /* Append the epoch timestamp onto the end of the archived file */ 00082 } 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 1204 of file logger.c.
References __ast_verbose_ap().
01205 { 01206 va_list ap; 01207 01208 va_start(ap, fmt); 01209 __ast_verbose_ap(file, line, func, fmt, ap); 01210 va_end(ap); 01211 }
| void __ast_verbose_ap | ( | const char * | file, | |
| int | line, | |||
| const char * | func, | |||
| const char * | fmt, | |||
| va_list | ap | |||
| ) |
Definition at line 1148 of file logger.c.
References __LOG_VERBOSE, ast_calloc_with_stringfields, 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_string_field_set, ast_tvnow(), buf, logchannel::list, logcond, logger_print_verbose(), LOGMSG_VERBOSE, logthread, logmsg::message, logmsg::type, verbose_buf, and VERBOSE_BUF_INIT_SIZE.
Referenced by __ast_verbose(), and ast_verbose().
01149 { 01150 struct logmsg *logmsg = NULL; 01151 struct ast_str *buf = NULL; 01152 int res = 0; 01153 01154 if (!(buf = ast_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE))) 01155 return; 01156 01157 if (ast_opt_timestamp) { 01158 struct timeval now; 01159 struct ast_tm tm; 01160 char date[40]; 01161 char *datefmt; 01162 01163 now = ast_tvnow(); 01164 ast_localtime(&now, &tm, NULL); 01165 ast_strftime(date, sizeof(date), dateformat, &tm); 01166 datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1); 01167 sprintf(datefmt, "%c[%s] %s", 127, date, fmt); 01168 fmt = datefmt; 01169 } else { 01170 char *tmp = alloca(strlen(fmt) + 2); 01171 sprintf(tmp, "%c%s", 127, fmt); 01172 fmt = tmp; 01173 } 01174 01175 /* Build string */ 01176 res = ast_str_set_va(&buf, 0, fmt, ap); 01177 01178 /* If the build failed then we can drop this allocated message */ 01179 if (res == AST_DYNSTR_BUILD_FAILED) 01180 return; 01181 01182 if (!(logmsg = ast_calloc_with_stringfields(1, struct logmsg, res + 128))) 01183 return; 01184 01185 ast_string_field_set(logmsg, message, ast_str_buffer(buf)); 01186 01187 ast_log(__LOG_VERBOSE, file, line, func, "%s", logmsg->message + 1); 01188 01189 /* Set type */ 01190 logmsg->type = LOGMSG_VERBOSE; 01191 01192 /* Add to the list and poke the thread if possible */ 01193 if (logthread != AST_PTHREADT_NULL) { 01194 AST_LIST_LOCK(&logmsgs); 01195 AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); 01196 ast_cond_signal(&logcond); 01197 AST_LIST_UNLOCK(&logmsgs); 01198 } else { 01199 logger_print_verbose(logmsg); 01200 ast_free(logmsg); 01201 } 01202 }
| void ast_backtrace | ( | void | ) |
Definition at line 1118 of file logger.c.
References ast_debug, ast_log(), free, LOG_DEBUG, and LOG_WARNING.
01119 { 01120 #ifdef HAVE_BKTR 01121 struct ast_bt *bt; 01122 int i = 0; 01123 char **strings; 01124 01125 if (!(bt = ast_bt_create())) { 01126 ast_log(LOG_WARNING, "Unable to allocate space for backtrace structure\n"); 01127 return; 01128 } 01129 01130 if ((strings = backtrace_symbols(bt->addresses, bt->num_frames))) { 01131 ast_debug(1, "Got %d backtrace record%c\n", bt->num_frames, bt->num_frames != 1 ? 's' : ' '); 01132 for (i = 0; i < bt->num_frames; i++) { 01133 ast_log(LOG_DEBUG, "#%d: [%p] %s\n", i, bt->addresses[i], strings[i]); 01134 } 01135 01136 /* MALLOC_DEBUG will erroneously report an error here, unless we undef the macro. */ 01137 #undef free 01138 free(strings); 01139 } else { 01140 ast_debug(1, "Could not allocate memory for backtrace\n"); 01141 } 01142 ast_bt_destroy(bt); 01143 #else 01144 ast_log(LOG_WARNING, "Must run configure with '--with-execinfo' for stack backtraces.\n"); 01145 #endif 01146 }
| void ast_child_verbose | ( | int | level, | |
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 380 of file logger.c.
References ast_free, ast_malloc, msg, and option_verbose.
Referenced by launch_script().
00381 { 00382 char *msg = NULL, *emsg = NULL, *sptr, *eptr; 00383 va_list ap, aq; 00384 int size; 00385 00386 /* Don't bother, if the level isn't that high */ 00387 if (option_verbose < level) { 00388 return; 00389 } 00390 00391 va_start(ap, fmt); 00392 va_copy(aq, ap); 00393 if ((size = vsnprintf(msg, 0, fmt, ap)) < 0) { 00394 va_end(ap); 00395 va_end(aq); 00396 return; 00397 } 00398 va_end(ap); 00399 00400 if (!(msg = ast_malloc(size + 1))) { 00401 va_end(aq); 00402 return; 00403 } 00404 00405 vsnprintf(msg, size + 1, fmt, aq); 00406 va_end(aq); 00407 00408 if (!(emsg = ast_malloc(size * 2 + 1))) { 00409 ast_free(msg); 00410 return; 00411 } 00412 00413 for (sptr = msg, eptr = emsg; ; sptr++) { 00414 if (*sptr == '"') { 00415 *eptr++ = '\\'; 00416 } 00417 *eptr++ = *sptr; 00418 if (*sptr == '\0') { 00419 break; 00420 } 00421 } 00422 ast_free(msg); 00423 00424 fprintf(stdout, "verbose \"%s\" %d\n", emsg, level); 00425 fflush(stdout); 00426 ast_free(emsg); 00427 }
| 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 993 of file logger.c.
References __LOG_DEBUG, __LOG_VERBOSE, ast_calloc_with_stringfields, ast_cond_signal(), 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_string_field_set, ast_tvnow(), buf, GETTID, logmsg::level, levels, logmsg::line, logchannel::list, log_buf, LOG_BUF_INIT_SIZE, logcond, logger_print_normal(), LOGMSG_NORMAL, logthread, option_debug, option_verbose, logmsg::process_id, term_filter_escapes(), and logmsg::type.
Referenced by __adsi_transmit_messages(), __agent_start_monitoring(), __analog_handle_event(), __analog_ss_thread(), __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_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(), _sip_tcp_helper_thread(), _while_exec(), accept_thread(), access_counter_file(), acf_channel_read(), acf_channel_write(), acf_curl_helper(), acf_curlopt_helper(), acf_curlopt_write(), acf_cut_exec(), acf_cut_exec2(), acf_iaxvar_write(), acf_if(), acf_isexten_exec(), acf_jabberreceive_read(), 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_hangup(), add_agent(), add_agi_cmd(), add_calltoken_ignore(), add_cfg_entry(), add_codec_to_answer(), add_email_attachment(), add_event_to_list(), add_exten_to_pattern_tree(), add_extensions(), add_features_datastores(), add_header(), add_ie(), 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_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_message(), 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(), analog_answer(), analog_attempt_transfer(), analog_available(), analog_call(), analog_exception(), analog_get_index(), analog_handle_dtmfup(), analog_handle_init_event(), analog_hangup(), analog_request(), analog_ss_thread(), analogsub_to_dahdisub(), announce_thread(), answer_call(), anti_injection(), app_exec(), append_ie(), apply_general_options(), apply_option(), apply_outgoing(), aqm_exec(), array_insert(), array_remove(), 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_app_parse_options(), ast_app_parse_options64(), ast_app_run_macro(), ast_append_ha(), ast_async_goto(), ast_audiohook_write_frame(), ast_autoservice_start(), ast_backtrace(), ast_best_codec(), ast_bridge_call(), ast_bridge_timelimit(), ast_calendar_register(), 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_cel_fill_record(), ast_channel_audiohook_count_by_source(), ast_channel_audiohook_count_by_source_running(), ast_channel_bridge(), ast_channel_destructor(), ast_channel_log(), 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_connected_line_build_data(), ast_connected_line_parse_data(), 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_unregister(), ast_func_read(), ast_func_read2(), 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_send(), 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_logger_register_level(), 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_obj2(), ast_odbc_sanity_check(), ast_odbc_smart_execute(), ast_openstream_full(), ast_openvstream(), ast_ouraddrfor(), ast_parse_allow_disallow(), ast_parse_digest(), 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_redirecting_build_data(), ast_redirecting_parse_data(), 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_dtmf_begin(), ast_rtp_dtmf_continuation(), ast_rtp_dtmf_end(), ast_rtp_engine_register2(), ast_rtp_glue_register2(), ast_rtp_instance_bridge(), ast_rtp_instance_early_bridge(), ast_rtp_instance_new(), ast_rtp_new(), ast_rtp_read(), 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_ur(), ast_say_number_full_zh(), ast_sched_del(), ast_sched_runq(), ast_sched_thread_create(), ast_search_dns(), ast_security_event_report(), ast_set_owners_and_peers(), ast_set_priority(), ast_sip_ouraddrfor(), ast_slinfactory_feed(), ast_smoother_read(), ast_speech_register(), ast_stopstream(), ast_str_substitute_variables_full(), 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_tls_read_conf(), 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_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_credentials(), auth_exec(), auth_http_callback(), authenticate(), authenticate_reply(), authenticate_verify(), autoservice_run(), background_detect_exec(), base64_helper(), base_encode(), birdbath(), blr_ebl(), blr_txt(), bridge_array_add(), bridge_call_thread(), bridge_exec(), bridge_make_compatible(), build_alias(), build_calendar(), 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_user(), builtin_atxfer(), builtin_automixmonitor(), builtin_automonitor(), builtin_blindtransfer(), bump_gains(), cache_get_callno_locked(), calc_cost(), calc_metric(), caldav_add_event(), caldav_get_events_between(), caldav_load_calendar(), caldav_request(), caldav_write_event(), calendar_busy_exec(), calendar_devstate_change(), calendar_event_notify(), calendar_event_read(), calendar_join_attendees(), calendar_query_exec(), calendar_query_result_exec(), calendar_write_exec(), 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(), change_t38_state(), 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_event_type(), 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(), connectedline_read(), connectedline_write(), 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_new_socket(), create_queue_member(), create_video_frame(), create_vmaccount(), crement_function_read(), 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_get_index(), dahdi_handle_dtmfup(), 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(), dahdiscan_exec(), dbinit(), deadagi_exec(), dec_init(), del_exec(), delete_old_messages(), 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_monitor(), do_notify(), do_register(), do_reload(), do_say(), do_scheduler(), do_waiting(), donodelog(), 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(), exchangecal_get_events_between(), exchangecal_load_calendar(), exchangecal_request(), exchangecal_write_event(), 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(), fetch_icalendar(), 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_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(), 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_eval2(), 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_domain(), 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_sendtext(), 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_response_update(), 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(), 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(), ical_load_calendar(), icalendar_add_event(), icalendar_update_events(), 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_req(), init_resp(), init_timing_thread(), insert_penaltychange(), inspect_module(), internal_ao2_ref(), 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_sendtext(), jingle_show_channels(), jingle_write(), join_conference_bridge(), join_queue(), 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_tech_calendars(), 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(), 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_log(), 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_register(), moh_release(), moh_scan_files(), mohalloc(), monmp3thread(), morsecode_exec(), mp3_exec(), mp3play(), mpeg4_decode(), mssql_connect(), multicast_rtp_write(), multiplexed_bridge_create(), multiplexed_nudge(), multiplexed_thread_function(), mute_add_audiohook(), mute_fragment(), mwi_send_init(), mwi_send_process_buffer(), mwi_send_process_event(), mwi_sub_event_cb(), mwi_thread(), my_all_subchannels_hungup(), my_callwait(), my_dial_digits(), my_distinctive_ring(), my_dsp_set_digitmode(), my_get_callerid(), my_handle_dtmfup(), my_handle_notify_message(), my_is_dialing(), my_is_off_hook(), my_send_callerid(), my_set_cadence(), my_set_waitingfordt(), my_start_cid_detect(), my_wink(), 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_apps(), parse_args(), parse_buffers_policy(), parse_config(), parse_cookies(), parse_empty_options(), parse_events(), parse_gain_value(), parse_ie(), parse_minse(), parse_moved_contact(), parse_naptr(), parse_register_contact(), parse_request(), parse_session_expires(), parse_srv(), parse_tag(), parse_tone_zone(), 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_helper(), 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_cn_rfc3389(), process_dahdi(), process_dtmf_rfc2833(), process_echocancel(), process_message_callback(), process_opcode(), process_request(), process_request_queue(), process_returncode(), process_sdp(), process_text_line(), 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_password_from_file(), read_pipe(), read_samples(), read_to_parts(), 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(), redirecting_id_write(), redirecting_read(), redirecting_write(), refresh_list(), regex(), register_exten(), register_group(), register_group_feature(), register_peer_exten(), register_verify(), registry_rerequest(), reload(), reload_config(), reload_firmware(), reload_followme(), reload_logger(), reload_queue_members(), reload_queue_rules(), reload_queues(), reload_single_member(), reload_single_queue(), remote_bridge_loop(), 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(), revert_fax_buffers(), 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(), rtp_reload(), 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_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(), 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_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_removeheader(), sip_request_call(), sip_reregister(), 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(), 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(), start_moh_exec(), start_monitor_exec(), start_network_thread(), start_rtp(), start_session_timer(), start_spying(), start_stream(), starttimer(), 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(), syslog_log(), 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(), 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(), unref_mansession(), unregister_exten(), update2_curl(), update2_ldap(), update2_odbc(), update2_pgsql(), update2_prepare(), update_call_counter(), update_common_options(), update_config(), update_connectedline(), 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_password_to_file(), write_stream(), writefile(), xpmr_config(), yyerror(), and yyparse().
00994 { 00995 struct logmsg *logmsg = NULL; 00996 struct ast_str *buf = NULL; 00997 struct ast_tm tm; 00998 struct timeval now = ast_tvnow(); 00999 int res = 0; 01000 va_list ap; 01001 char datestring[256]; 01002 01003 if (!(buf = ast_str_thread_get(&log_buf, LOG_BUF_INIT_SIZE))) 01004 return; 01005 01006 if (AST_RWLIST_EMPTY(&logchannels)) { 01007 /* 01008 * we don't have the logger chain configured yet, 01009 * so just log to stdout 01010 */ 01011 if (level != __LOG_VERBOSE) { 01012 int result; 01013 va_start(ap, fmt); 01014 result = ast_str_set_va(&buf, BUFSIZ, fmt, ap); /* XXX BUFSIZ ? */ 01015 va_end(ap); 01016 if (result != AST_DYNSTR_BUILD_FAILED) { 01017 term_filter_escapes(ast_str_buffer(buf)); 01018 fputs(ast_str_buffer(buf), stdout); 01019 } 01020 } 01021 return; 01022 } 01023 01024 /* don't display LOG_DEBUG messages unless option_verbose _or_ option_debug 01025 are non-zero; LOG_DEBUG messages can still be displayed if option_debug 01026 is zero, if option_verbose is non-zero (this allows for 'level zero' 01027 LOG_DEBUG messages to be displayed, if the logmask on any channel 01028 allows it) 01029 */ 01030 if (!option_verbose && !option_debug && (level == __LOG_DEBUG)) 01031 return; 01032 01033 /* Ignore anything that never gets logged anywhere */ 01034 if (!(global_logmask & (1 << level))) 01035 return; 01036 01037 /* Build string */ 01038 va_start(ap, fmt); 01039 res = ast_str_set_va(&buf, BUFSIZ, fmt, ap); 01040 va_end(ap); 01041 01042 /* If the build failed, then abort and free this structure */ 01043 if (res == AST_DYNSTR_BUILD_FAILED) 01044 return; 01045 01046 /* Create a new logging message */ 01047 if (!(logmsg = ast_calloc_with_stringfields(1, struct logmsg, res + 128))) 01048 return; 01049 01050 /* Copy string over */ 01051 ast_string_field_set(logmsg, message, ast_str_buffer(buf)); 01052 01053 /* Set type to be normal */ 01054 logmsg->type = LOGMSG_NORMAL; 01055 01056 /* Create our date/time */ 01057 ast_localtime(&now, &tm, NULL); 01058 ast_strftime(datestring, sizeof(datestring), dateformat, &tm); 01059 ast_string_field_set(logmsg, date, datestring); 01060 01061 /* Copy over data */ 01062 logmsg->level = level; 01063 logmsg->line = line; 01064 ast_string_field_set(logmsg, level_name, levels[level]); 01065 ast_string_field_set(logmsg, file, file); 01066 ast_string_field_set(logmsg, function, function); 01067 logmsg->process_id = (long) GETTID(); 01068 01069 /* If the logger thread is active, append it to the tail end of the list - otherwise skip that step */ 01070 if (logthread != AST_PTHREADT_NULL) { 01071 AST_LIST_LOCK(&logmsgs); 01072 AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list); 01073 ast_cond_signal(&logcond); 01074 AST_LIST_UNLOCK(&logmsgs); 01075 } else { 01076 logger_print_normal(logmsg); 01077 ast_free(logmsg); 01078 } 01079 01080 return; 01081 }
| static void ast_log_vsyslog | ( | struct logmsg * | msg | ) | [static] |
Definition at line 766 of file logger.c.
References __LOG_DEBUG, __LOG_DTMF, __LOG_VERBOSE, ast_syslog_priority_from_loglevel(), buf, logmsg::file, logmsg::function, logmsg::level, levels, logmsg::line, logmsg::message, logmsg::process_id, and term_strip().
Referenced by logger_print_normal().
00767 { 00768 char buf[BUFSIZ]; 00769 int syslog_level = ast_syslog_priority_from_loglevel(msg->level); 00770 00771 if (syslog_level < 0) { 00772 /* we are locked here, so cannot ast_log() */ 00773 fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", msg->level); 00774 return; 00775 } 00776 00777 if (msg->level == __LOG_VERBOSE) { 00778 snprintf(buf, sizeof(buf), "VERBOSE[%ld]: %s", msg->process_id, msg->message); 00779 msg->level = __LOG_DEBUG; 00780 } else if (msg->level == __LOG_DTMF) { 00781 snprintf(buf, sizeof(buf), "DTMF[%ld]: %s", msg->process_id, msg->message); 00782 msg->level = __LOG_DEBUG; 00783 } else { 00784 snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: %s", 00785 levels[msg->level], msg->process_id, msg->file, msg->line, msg->function, msg->message); 00786 } 00787 00788 term_strip(buf, buf, strlen(buf) + 1); 00789 syslog(syslog_level, "%s", buf); 00790 }
| int ast_logger_register_level | ( | const char * | name | ) |
Register a new logger level.
| name | The name of the level to be registered |
| -1 | if an error occurs | |
| non-zero | level to be used with ast_log for sending messages to this level |
Definition at line 1275 of file logger.c.
References ARRAY_LEN, ast_debug, ast_log(), AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_strdup, available(), levels, LOG_WARNING, and update_logchannels().
Referenced by load_module().
01276 { 01277 unsigned int level; 01278 unsigned int available = 0; 01279 01280 AST_RWLIST_WRLOCK(&logchannels); 01281 01282 for (level = 0; level < ARRAY_LEN(levels); level++) { 01283 if ((level >= 16) && !available && !levels[level]) { 01284 available = level; 01285 continue; 01286 } 01287 01288 if (levels[level] && !strcasecmp(levels[level], name)) { 01289 ast_log(LOG_WARNING, 01290 "Unable to register dynamic logger level '%s': a standard logger level uses that name.\n", 01291 name); 01292 AST_RWLIST_UNLOCK(&logchannels); 01293 01294 return -1; 01295 } 01296 } 01297 01298 if (!available) { 01299 ast_log(LOG_WARNING, 01300 "Unable to register dynamic logger level '%s'; maximum number of levels registered.\n", 01301 name); 01302 AST_RWLIST_UNLOCK(&logchannels); 01303 01304 return -1; 01305 } 01306 01307 levels[available] = ast_strdup(name); 01308 01309 AST_RWLIST_UNLOCK(&logchannels); 01310 01311 ast_debug(1, "Registered dynamic logger level '%s' with index %d.\n", name, available); 01312 01313 update_logchannels(); 01314 01315 return available; 01316 }
| void ast_logger_unregister_level | ( | const char * | name | ) |
Unregister a previously registered logger level.
| name | The name of the level to be unregistered |
Definition at line 1318 of file logger.c.
References ARRAY_LEN, ast_debug, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, free, levels, and update_logchannels().
Referenced by load_module().
01319 { 01320 unsigned int found = 0; 01321 unsigned int x; 01322 01323 AST_RWLIST_WRLOCK(&logchannels); 01324 01325 for (x = 16; x < ARRAY_LEN(levels); x++) { 01326 if (!levels[x]) { 01327 continue; 01328 } 01329 01330 if (strcasecmp(levels[x], name)) { 01331 continue; 01332 } 01333 01334 found = 1; 01335 break; 01336 } 01337 01338 if (found) { 01339 /* take this level out of the global_logmask, to ensure that no new log messages 01340 * will be queued for it 01341 */ 01342 01343 global_logmask &= ~(1 << x); 01344 01345 free(levels[x]); 01346 levels[x] = NULL; 01347 AST_RWLIST_UNLOCK(&logchannels); 01348 01349 ast_debug(1, "Unregistered dynamic logger level '%s' with index %d.\n", name, x); 01350 01351 update_logchannels(); 01352 } else { 01353 AST_RWLIST_UNLOCK(&logchannels); 01354 } 01355 }
| void ast_queue_log | ( | const char * | queuename, | |
| const char * | callid, | |||
| const char * | agent, | |||
| const char * | event, | |||
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 429 of file logger.c.
References ast_check_realtime(), AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK, ast_store_realtime(), qlog, and SENTINEL.
Referenced by 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().
00430 { 00431 va_list ap; 00432 char qlog_msg[8192]; 00433 int qlog_len; 00434 char time_str[16]; 00435 00436 if (ast_check_realtime("queue_log")) { 00437 va_start(ap, fmt); 00438 vsnprintf(qlog_msg, sizeof(qlog_msg), fmt, ap); 00439 va_end(ap); 00440 snprintf(time_str, sizeof(time_str), "%ld", (long)time(NULL)); 00441 ast_store_realtime("queue_log", "time", time_str, 00442 "callid", callid, 00443 "queuename", queuename, 00444 "agent", agent, 00445 "event", event, 00446 "data", qlog_msg, 00447 SENTINEL); 00448 } else { 00449 if (qlog) { 00450 va_start(ap, fmt); 00451 qlog_len = snprintf(qlog_msg, sizeof(qlog_msg), "%ld|%s|%s|%s|%s|", (long)time(NULL), callid, queuename, agent, event); 00452 vsnprintf(qlog_msg + qlog_len, sizeof(qlog_msg) - qlog_len, fmt, ap); 00453 va_end(ap); 00454 } 00455 AST_RWLIST_RDLOCK(&logchannels); 00456 if (qlog) { 00457 fprintf(qlog, "%s\n", qlog_msg); 00458 fflush(qlog); 00459 } 00460 AST_RWLIST_UNLOCK(&logchannels); 00461 } 00462 }
| int ast_register_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1225 of file logger.c.
References ast_malloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, logchannel::list, and verb::verboser.
Referenced by ast_makesocket(), main(), and show_console().
01226 { 01227 struct verb *verb; 01228 01229 if (!(verb = ast_malloc(sizeof(*verb)))) 01230 return -1; 01231 01232 verb->verboser = v; 01233 01234 AST_RWLIST_WRLOCK(&verbosers); 01235 AST_RWLIST_INSERT_HEAD(&verbosers, verb, list); 01236 AST_RWLIST_UNLOCK(&verbosers); 01237 01238 return 0; 01239 }
| int ast_unregister_verbose | ( | void(*)(const char *string) | v | ) |
Definition at line 1241 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().
01242 { 01243 struct verb *cur; 01244 01245 AST_RWLIST_WRLOCK(&verbosers); 01246 AST_RWLIST_TRAVERSE_SAFE_BEGIN(&verbosers, cur, list) { 01247 if (cur->verboser == v) { 01248 AST_RWLIST_REMOVE_CURRENT(list); 01249 ast_free(cur); 01250 break; 01251 } 01252 } 01253 AST_RWLIST_TRAVERSE_SAFE_END; 01254 AST_RWLIST_UNLOCK(&verbosers); 01255 01256 return cur ? 0 : -1; 01257 }
| void ast_verbose | ( | const char * | fmt, | |
| ... | ||||
| ) |
Definition at line 1216 of file logger.c.
References __ast_verbose_ap().
01217 { 01218 va_list ap; 01219 01220 va_start(ap, fmt); 01221 __ast_verbose_ap("", 0, "", fmt, ap); 01222 va_end(ap); 01223 }
| void close_logger | ( | void | ) |
Provided by logger.c
Definition at line 956 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, f, logchannel::fileptr, logchannel::list, logcond, logthread, and qlog.
Referenced by quit_handler().
00957 { 00958 struct logchannel *f = NULL; 00959 00960 /* Stop logger thread */ 00961 AST_LIST_LOCK(&logmsgs); 00962 close_logger_thread = 1; 00963 ast_cond_signal(&logcond); 00964 AST_LIST_UNLOCK(&logmsgs); 00965 00966 if (logthread != AST_PTHREADT_NULL) 00967 pthread_join(logthread, NULL); 00968 00969 AST_RWLIST_WRLOCK(&logchannels); 00970 00971 if (qlog) { 00972 fclose(qlog); 00973 qlog = NULL; 00974 } 00975 00976 AST_RWLIST_TRAVERSE(&logchannels, f, list) { 00977 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00978 fclose(f->fileptr); 00979 f->fileptr = NULL; 00980 } 00981 } 00982 00983 closelog(); /* syslog */ 00984 00985 AST_RWLIST_UNLOCK(&logchannels); 00986 00987 return; 00988 }
| static char* handle_logger_reload | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 626 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.
00627 { 00628 switch (cmd) { 00629 case CLI_INIT: 00630 e->command = "logger reload"; 00631 e->usage = 00632 "Usage: logger reload\n" 00633 " Reloads the logger subsystem state. Use after restarting syslogd(8) if you are using syslog logging.\n"; 00634 return NULL; 00635 case CLI_GENERATE: 00636 return NULL; 00637 } 00638 if (reload_logger(0)) { 00639 ast_cli(a->fd, "Failed to reload the logger\n"); 00640 return CLI_FAILURE; 00641 } 00642 return CLI_SUCCESS; 00643 }
| static char* handle_logger_rotate | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 645 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.
00646 { 00647 switch (cmd) { 00648 case CLI_INIT: 00649 e->command = "logger rotate"; 00650 e->usage = 00651 "Usage: logger rotate\n" 00652 " Rotates and Reopens the log files.\n"; 00653 return NULL; 00654 case CLI_GENERATE: 00655 return NULL; 00656 } 00657 if (reload_logger(1)) { 00658 ast_cli(a->fd, "Failed to reload the logger and rotate log files\n"); 00659 return CLI_FAILURE; 00660 } 00661 return CLI_SUCCESS; 00662 }
| static char* handle_logger_set_level | ( | struct ast_cli_entry * | e, | |
| int | cmd, | |||
| struct ast_cli_args * | a | |||
| ) | [static] |
Definition at line 664 of file logger.c.
References ast_cli_args::argc, ast_cli_args::argv, ARRAY_LEN, ast_cli(), ast_console_toggle_loglevel(), AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_true(), CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, ast_cli_args::fd, levels, and ast_cli_entry::usage.
00665 { 00666 int x; 00667 int state; 00668 int level = -1; 00669 00670 switch (cmd) { 00671 case CLI_INIT: 00672 e->command = "logger set level"; 00673 e->usage = 00674 "Usage: logger set level\n" 00675 " Set a specific log level to enabled/disabled for this console.\n"; 00676 return NULL; 00677 case CLI_GENERATE: 00678 return NULL; 00679 } 00680 00681 if (a->argc < 5) 00682 return CLI_SHOWUSAGE; 00683 00684 AST_RWLIST_WRLOCK(&logchannels); 00685 00686 for (x = 0; x < ARRAY_LEN(levels); x++) { 00687 if (levels[x] && !strcasecmp(a->argv[3], levels[x])) { 00688 level = x; 00689 break; 00690 } 00691 } 00692 00693 AST_RWLIST_UNLOCK(&logchannels); 00694 00695 state = ast_true(a->argv[4]) ? 1 : 0; 00696 00697 if (level != -1) { 00698 ast_console_toggle_loglevel(a->fd, level, state); 00699 ast_cli(a->fd, "Logger status for '%s' has been set to '%s'.\n", levels[level], state ? "on" : "off"); 00700 } else 00701 return CLI_SHOWUSAGE; 00702 00703 return CLI_SUCCESS; 00704 }
| 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 707 of file logger.c.
References ARRAY_LEN, 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, levels, logchannel::list, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_SYSLOG, logchannel::type, and ast_cli_entry::usage.
00708 { 00709 #define FORMATL "%-35.35s %-8.8s %-9.9s " 00710 struct logchannel *chan; 00711 switch (cmd) { 00712 case CLI_INIT: 00713 e->command = "logger show channels"; 00714 e->usage = 00715 "Usage: logger show channels\n" 00716 " List configured logger channels.\n"; 00717 return NULL; 00718 case CLI_GENERATE: 00719 return NULL; 00720 } 00721 ast_cli(a->fd, FORMATL, "Channel", "Type", "Status"); 00722 ast_cli(a->fd, "Configuration\n"); 00723 ast_cli(a->fd, FORMATL, "-------", "----", "------"); 00724 ast_cli(a->fd, "-------------\n"); 00725 AST_RWLIST_RDLOCK(&logchannels); 00726 AST_RWLIST_TRAVERSE(&logchannels, chan, list) { 00727 unsigned int level; 00728 00729 ast_cli(a->fd, FORMATL, chan->filename, chan->type == LOGTYPE_CONSOLE ? "Console" : (chan->type == LOGTYPE_SYSLOG ? "Syslog" : "File"), 00730 chan->disabled ? "Disabled" : "Enabled"); 00731 ast_cli(a->fd, " - "); 00732 for (level = 0; level < ARRAY_LEN(levels); level++) { 00733 if (chan->logmask & (1 << level)) { 00734 ast_cli(a->fd, "%s ", levels[level]); 00735 } 00736 } 00737 ast_cli(a->fd, "\n"); 00738 } 00739 AST_RWLIST_UNLOCK(&logchannels); 00740 ast_cli(a->fd, "\n"); 00741 00742 return CLI_SUCCESS; 00743 }
| static int handle_SIGXFSZ | ( | int | sig | ) | [static] |
Definition at line 759 of file logger.c.
Referenced by init_logger().
00760 { 00761 /* Indicate need to reload */ 00762 filesize_reload_needed = 1; 00763 return 0; 00764 }
| int init_logger | ( | void | ) |
Provided by logger.c
Definition at line 925 of file logger.c.
References ARRAY_LEN, ast_cli_register_multiple(), ast_cond_destroy(), ast_cond_init(), ast_config_AST_LOG_DIR, ast_mkdir(), ast_pthread_create, ast_queue_log(), cli_logger, handle_SIGXFSZ(), init_logger_chain(), logcond, logfiles, logger_thread(), logthread, and qlog.
Referenced by main().
00926 { 00927 char tmp[256]; 00928 int res = 0; 00929 00930 /* auto rotate if sig SIGXFSZ comes a-knockin */ 00931 (void) signal(SIGXFSZ, (void *) handle_SIGXFSZ); 00932 00933 /* start logger thread */ 00934 ast_cond_init(&logcond, NULL); 00935 if (ast_pthread_create(&logthread, NULL, logger_thread, NULL) < 0) { 00936 ast_cond_destroy(&logcond); 00937 return -1; 00938 } 00939 00940 /* register the logger cli commands */ 00941 ast_cli_register_multiple(cli_logger, ARRAY_LEN(cli_logger)); 00942 00943 ast_mkdir(ast_config_AST_LOG_DIR, 0777); 00944 00945 /* create log channels */ 00946 init_logger_chain(0 /* locked */); 00947 00948 if (logfiles.queue_log) { 00949 snprintf(tmp, sizeof(tmp), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 00950 qlog = fopen(tmp, "a"); 00951 ast_queue_log("NONE", "NONE", "NONE", "QUEUESTART", "%s", ""); 00952 } 00953 return res; 00954 }
| static void init_logger_chain | ( | int | locked | ) | [static] |
Definition at line 286 of file logger.c.
References __LOG_ERROR, __LOG_NOTICE, __LOG_WARNING, 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().
00287 { 00288 struct logchannel *chan; 00289 struct ast_config *cfg; 00290 struct ast_variable *var; 00291 const char *s; 00292 struct ast_flags config_flags = { 0 }; 00293 00294 if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) 00295 return; 00296 00297 /* delete our list of log channels */ 00298 if (!locked) 00299 AST_RWLIST_WRLOCK(&logchannels); 00300 while ((chan = AST_RWLIST_REMOVE_HEAD(&logchannels, list))) 00301 ast_free(chan); 00302 global_logmask = 0; 00303 if (!locked) 00304 AST_RWLIST_UNLOCK(&logchannels); 00305 00306 errno = 0; 00307 /* close syslog */ 00308 closelog(); 00309 00310 /* If no config file, we're fine, set default options. */ 00311 if (!cfg) { 00312 if (errno) 00313 fprintf(stderr, "Unable to open logger.conf: %s; default settings will be used.\n", strerror(errno)); 00314 else 00315 fprintf(stderr, "Errors detected in logger.conf: see above; default settings will be used.\n"); 00316 if (!(chan = ast_calloc(1, sizeof(*chan)))) 00317 return; 00318 chan->type = LOGTYPE_CONSOLE; 00319 chan->logmask = __LOG_WARNING | __LOG_NOTICE | __LOG_ERROR; 00320 if (!locked) 00321 AST_RWLIST_WRLOCK(&logchannels); 00322 AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); 00323 global_logmask |= chan->logmask; 00324 if (!locked) 00325 AST_RWLIST_UNLOCK(&logchannels); 00326 return; 00327 } 00328 00329 if ((s = ast_variable_retrieve(cfg, "general", "appendhostname"))) { 00330 if (ast_true(s)) { 00331 if (gethostname(hostname, sizeof(hostname) - 1)) { 00332 ast_copy_string(hostname, "unknown", sizeof(hostname)); 00333 fprintf(stderr, "What box has no hostname???\n"); 00334 } 00335 } else 00336 hostname[0] = '\0'; 00337 } else 00338 hostname[0] = '\0'; 00339 if ((s = ast_variable_retrieve(cfg, "general", "dateformat"))) 00340 ast_copy_string(dateformat, s, sizeof(dateformat)); 00341 else 00342 ast_copy_string(dateformat, "%b %e %T", sizeof(dateformat)); 00343 if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) 00344 logfiles.queue_log = ast_true(s); 00345 if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name"))) 00346 ast_copy_string(queue_log_name, s, sizeof(queue_log_name)); 00347 if ((s = ast_variable_retrieve(cfg, "general", "exec_after_rotate"))) 00348 ast_copy_string(exec_after_rotate, s, sizeof(exec_after_rotate)); 00349 if ((s = ast_variable_retrieve(cfg, "general", "rotatestrategy"))) { 00350 if (strcasecmp(s, "timestamp") == 0) 00351 rotatestrategy = TIMESTAMP; 00352 else if (strcasecmp(s, "rotate") == 0) 00353 rotatestrategy = ROTATE; 00354 else if (strcasecmp(s, "sequential") == 0) 00355 rotatestrategy = SEQUENTIAL; 00356 else 00357 fprintf(stderr, "Unknown rotatestrategy: %s\n", s); 00358 } else { 00359 if ((s = ast_variable_retrieve(cfg, "general", "rotatetimestamp"))) { 00360 rotatestrategy = ast_true(s) ? TIMESTAMP : SEQUENTIAL; 00361 fprintf(stderr, "rotatetimestamp option has been deprecated. Please use rotatestrategy instead.\n"); 00362 } 00363 } 00364 00365 if (!locked) 00366 AST_RWLIST_WRLOCK(&logchannels); 00367 var = ast_variable_browse(cfg, "logfiles"); 00368 for (; var; var = var->next) { 00369 if (!(chan = make_logchannel(var->name, var->value, var->lineno))) 00370 continue; 00371 AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); 00372 global_logmask |= chan->logmask; 00373 } 00374 if (!locked) 00375 AST_RWLIST_UNLOCK(&logchannels); 00376 00377 ast_config_destroy(cfg); 00378 }
| static void logger_print_normal | ( | struct logmsg * | logmsg | ) | [static] |
Print a normal log message to the channels.
Definition at line 793 of file logger.c.
References __LOG_VERBOSE, ast_console_puts_mutable(), 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, logmsg::file, logchannel::filename, logchannel::fileptr, logmsg::function, logmsg::level, logmsg::level_name, logmsg::line, logchannel::list, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, manager_event, logmsg::message, logmsg::process_id, reload_logger(), term_color(), and logchannel::type.
Referenced by ast_log(), and logger_thread().
00794 { 00795 struct logchannel *chan = NULL; 00796 char buf[BUFSIZ]; 00797 00798 AST_RWLIST_RDLOCK(&logchannels); 00799 00800 if (!AST_RWLIST_EMPTY(&logchannels)) { 00801 AST_RWLIST_TRAVERSE(&logchannels, chan, list) { 00802 /* If the channel is disabled, then move on to the next one */ 00803 if (chan->disabled) 00804 continue; 00805 /* Check syslog channels */ 00806 if (chan->type == LOGTYPE_SYSLOG && (chan->logmask & (1 << logmsg->level))) { 00807 ast_log_vsyslog(logmsg); 00808 /* Console channels */ 00809 } else if (chan->type == LOGTYPE_CONSOLE && (chan->logmask & (1 << logmsg->level))) { 00810 char linestr[128]; 00811 char tmp1[80], tmp2[80], tmp3[80], tmp4[80]; 00812 00813 /* If the level is verbose, then skip it */ 00814 if (logmsg->level == __LOG_VERBOSE) 00815 continue; 00816 00817 /* Turn the numerical line number into a string */ 00818 snprintf(linestr, sizeof(linestr), "%d", logmsg->line); 00819 /* Build string to print out */ 00820 snprintf(buf, sizeof(buf), "[%s] %s[%ld]: %s:%s %s: %s", 00821 logmsg->date, 00822 term_color(tmp1, logmsg->level_name, colors[logmsg->level], 0, sizeof(tmp1)), 00823 logmsg->process_id, 00824 term_color(tmp2, logmsg->file, COLOR_BRWHITE, 0, sizeof(tmp2)), 00825 term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)), 00826 term_color(tmp4, logmsg->function, COLOR_BRWHITE, 0, sizeof(tmp4)), 00827 logmsg->message); 00828 /* Print out */ 00829 ast_console_puts_mutable(buf, logmsg->level); 00830 /* File channels */ 00831 } else if (chan->type == LOGTYPE_FILE && (chan->logmask & (1 << logmsg->level))) { 00832 int res = 0; 00833 00834 /* If no file pointer exists, skip it */ 00835 if (!chan->fileptr) 00836 continue; 00837 00838 /* Print out to the file */ 00839 res = fprintf(chan->fileptr, "[%s] %s[%ld] %s: %s", 00840 logmsg->date, logmsg->level_name, logmsg->process_id, logmsg->file, logmsg->message); 00841 if (res <= 0 && !ast_strlen_zero(logmsg->message)) { 00842 fprintf(stderr, "**** Asterisk Logging Error: ***********\n"); 00843 if (errno == ENOMEM || errno == ENOSPC) 00844 fprintf(stderr, "Asterisk logging error: Out of disk space, can't log to log file %s\n", chan->filename); 00845 else 00846 fprintf(stderr, "Logger Warning: Unable to write to log file '%s': %s (disabled)\n", chan->filename, strerror(errno)); 00847 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: No\r\nReason: %d - %s\r\n", chan->filename, errno, strerror(errno)); 00848 chan->disabled = 1; 00849 } else if (res > 0) { 00850 fflush(chan->fileptr); 00851 } 00852 } 00853 } 00854 } else if (logmsg->level != __LOG_VERBOSE) { 00855 fputs(logmsg->message, stdout); 00856 } 00857 00858 AST_RWLIST_UNLOCK(&logchannels); 00859 00860 /* If we need to reload because of the file size, then do so */ 00861 if (filesize_reload_needed) { 00862 reload_logger(-1); 00863 ast_verb(1, "Rotated Logs Per SIGXFSZ (Exceeded file size limit)\n"); 00864 } 00865 00866 return; 00867 }
| static void logger_print_verbose | ( | struct logmsg * | logmsg | ) | [static] |
Print a verbose message to the verbosers.
Definition at line 870 of file logger.c.
References AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, logchannel::list, logmsg::message, and verb::verboser.
Referenced by __ast_verbose_ap(), and logger_thread().
00871 { 00872 struct verb *v = NULL; 00873 00874 /* Iterate through the list of verbosers and pass them the log message string */ 00875 AST_RWLIST_RDLOCK(&verbosers); 00876 AST_RWLIST_TRAVERSE(&verbosers, v, list) 00877 v->verboser(logmsg->message); 00878 AST_RWLIST_UNLOCK(&verbosers); 00879 00880 return; 00881 }
| 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 619 of file logger.c.
References reload_logger(), RESULT_FAILURE, and RESULT_SUCCESS.
00620 { 00621 if(reload_logger(0)) 00622 return RESULT_FAILURE; 00623 return RESULT_SUCCESS; 00624 }
| static void* logger_thread | ( | void * | data | ) | [static] |
Actual logging thread.
Definition at line 884 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, logcond, logger_print_normal(), logger_print_verbose(), LOGMSG_NORMAL, LOGMSG_VERBOSE, msg, and logchannel::next.
Referenced by init_logger().
00885 { 00886 struct logmsg *next = NULL, *msg = NULL; 00887 00888 for (;;) { 00889 /* We lock the message list, and see if any message exists... if not we wait on the condition to be signalled */ 00890 AST_LIST_LOCK(&logmsgs); 00891 if (AST_LIST_EMPTY(&logmsgs)) { 00892 if (close_logger_thread) { 00893 break; 00894 } else { 00895 ast_cond_wait(&logcond, &logmsgs.lock); 00896 } 00897 } 00898 next = AST_LIST_FIRST(&logmsgs); 00899 AST_LIST_HEAD_INIT_NOLOCK(&logmsgs); 00900 AST_LIST_UNLOCK(&logmsgs); 00901 00902 /* Otherwise go through and process each message in the order added */ 00903 while ((msg = next)) { 00904 /* Get the next entry now so that we can free our current structure later */ 00905 next = AST_LIST_NEXT(msg, list); 00906 00907 /* Depending on the type, send it to the proper function */ 00908 if (msg->type == LOGMSG_NORMAL) 00909 logger_print_normal(msg); 00910 else if (msg->type == LOGMSG_VERBOSE) 00911 logger_print_verbose(msg); 00912 00913 /* Free the data since we are done */ 00914 ast_free(msg); 00915 } 00916 00917 /* If we should stop, then stop */ 00918 if (close_logger_thread) 00919 break; 00920 } 00921 00922 return NULL; 00923 }
| static unsigned int make_components | ( | const char * | s, | |
| int | lineno | |||
| ) | [static] |
Definition at line 209 of file logger.c.
References ARRAY_LEN, ast_skip_blanks(), ast_strdupa, levels, and strsep().
Referenced by make_logchannel(), and update_logchannels().
00210 { 00211 char *w; 00212 unsigned int res = 0; 00213 char *stringp = ast_strdupa(s); 00214 unsigned int x; 00215 00216 while ((w = strsep(&stringp, ","))) { 00217 int found = 0; 00218 00219 w = ast_skip_blanks(w); 00220 00221 for (x = 0; x < ARRAY_LEN(levels); x++) { 00222 if (levels[x] && !strcasecmp(w, levels[x])) { 00223 res |= (1 << x); 00224 found = 1; 00225 break; 00226 } 00227 } 00228 } 00229 00230 return res; 00231 }
| static struct logchannel* make_logchannel | ( | const char * | channel, | |
| const char * | components, | |||
| int | lineno | |||
| ) | [static, read] |
Definition at line 233 of file logger.c.
References ast_calloc, ast_config_AST_LOG_DIR, ast_copy_string(), ast_free, ast_strlen_zero(), ast_syslog_facility(), chan, logchannel::components, errno, logchannel::facility, logchannel::filename, logchannel::fileptr, logchannel::lineno, logchannel::logmask, LOGTYPE_CONSOLE, LOGTYPE_FILE, LOGTYPE_SYSLOG, make_components(), and logchannel::type.
Referenced by init_logger_chain().
00234 { 00235 struct logchannel *chan; 00236 char *facility; 00237 00238 if (ast_strlen_zero(channel) || !(chan = ast_calloc(1, sizeof(*chan) + strlen(components) + 1))) 00239 return NULL; 00240 00241 strcpy(chan->components, components); 00242 chan->lineno = lineno; 00243 00244 if (!strcasecmp(channel, "console")) { 00245 chan->type = LOGTYPE_CONSOLE; 00246 } else if (!strncasecmp(channel, "syslog", 6)) { 00247 /* 00248 * syntax is: 00249 * syslog.facility => level,level,level 00250 */ 00251 facility = strchr(channel, '.'); 00252 if (!facility++ || !facility) { 00253 facility = "local0"; 00254 } 00255 00256 chan->facility = ast_syslog_facility(facility); 00257 00258 if (chan->facility < 0) { 00259 fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n"); 00260 ast_free(chan); 00261 return NULL; 00262 } 00263 00264 chan->type = LOGTYPE_SYSLOG; 00265 ast_copy_string(chan->filename, channel, sizeof(chan->filename)); 00266 openlog("asterisk", LOG_PID, chan->facility); 00267 } else { 00268 if (!ast_strlen_zero(hostname)) { 00269 snprintf(chan->filename, sizeof(chan->filename), "%s/%s.%s", 00270 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel, hostname); 00271 } else { 00272 snprintf(chan->filename, sizeof(chan->filename), "%s/%s", 00273 channel[0] != '/' ? ast_config_AST_LOG_DIR : "", channel); 00274 } 00275 if (!(chan->fileptr = fopen(chan->filename, "a"))) { 00276 /* Can't log here, since we're called with a lock */ 00277 fprintf(stderr, "Logger Warning: Unable to open log file '%s': %s\n", chan->filename, strerror(errno)); 00278 } 00279 chan->type = LOGTYPE_FILE; 00280 } 00281 chan->logmask = make_components(chan->components, lineno); 00282 00283 return chan; 00284 }
| static int reload_logger | ( | int | rotate | ) | [static] |
Definition at line 550 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, f, logchannel::filename, logchannel::fileptr, init_logger_chain(), logchannel::list, LOG_ERROR, logfiles, manager_event, qlog, and rotate_file().
Referenced by handle_logger_reload(), handle_logger_rotate(), logger_print_normal(), and logger_reload().
00551 { 00552 char old[PATH_MAX] = ""; 00553 int queue_rotate = rotate; 00554 struct logchannel *f; 00555 int res = 0; 00556 struct stat st; 00557 00558 AST_RWLIST_WRLOCK(&logchannels); 00559 00560 if (qlog) { 00561 if (rotate < 0) { 00562 /* Check filesize - this one typically doesn't need an auto-rotate */ 00563 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 00564 if (stat(old, &st) != 0 || st.st_size > 0x40000000) { /* Arbitrarily, 1 GB */ 00565 fclose(qlog); 00566 qlog = NULL; 00567 } else 00568 queue_rotate = 0; 00569 } else { 00570 fclose(qlog); 00571 qlog = NULL; 00572 } 00573 } else 00574 queue_rotate = 0; 00575 00576 ast_mkdir(ast_config_AST_LOG_DIR, 0777); 00577 00578 AST_RWLIST_TRAVERSE(&logchannels, f, list) { 00579 if (f->disabled) { 00580 f->disabled = 0; /* Re-enable logging at reload */ 00581 manager_event(EVENT_FLAG_SYSTEM, "LogChannel", "Channel: %s\r\nEnabled: Yes\r\n", f->filename); 00582 } 00583 if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { 00584 fclose(f->fileptr); /* Close file */ 00585 f->fileptr = NULL; 00586 if (rotate) 00587 rotate_file(f->filename); 00588 } 00589 } 00590 00591 filesize_reload_needed = 0; 00592 00593 init_logger_chain(1 /* locked */); 00594 00595 if (logfiles.queue_log) { 00596 snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, queue_log_name); 00597 if (queue_rotate) 00598 rotate_file(old); 00599 00600 qlog = fopen(old, "a"); 00601 if (qlog) { 00602 AST_RWLIST_UNLOCK(&logchannels); 00603 ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", ""); 00604 AST_RWLIST_WRLOCK(&logchannels); 00605 ast_verb(1, "Asterisk Queue Logger restarted\n"); 00606 } else { 00607 ast_log(LOG_ERROR, "Unable to create queue log: %s\n", strerror(errno)); 00608 res = -1; 00609 } 00610 } 00611 00612 AST_RWLIST_UNLOCK(&logchannels); 00613 00614 return res; 00615 }
| static int rotate_file | ( | const char * | filename | ) | [static] |
Definition at line 464 of file logger.c.
References ARRAY_LEN, ast_channel_release(), ast_dummy_channel_alloc(), 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().
00465 { 00466 char old[PATH_MAX]; 00467 char new[PATH_MAX]; 00468 int x, y, which, found, res = 0, fd; 00469 char *suffixes[4] = { "", ".gz", ".bz2", ".Z" }; 00470 00471 switch (rotatestrategy) { 00472 case SEQUENTIAL: 00473 for (x = 0; ; x++) { 00474 snprintf(new, sizeof(new), "%s.%d", filename, x); 00475 fd = open(new, O_RDONLY); 00476 if (fd > -1) 00477 close(fd); 00478 else 00479 break; 00480 } 00481 if (rename(filename, new)) { 00482 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00483 res = -1; 00484 } 00485 break; 00486 case TIMESTAMP: 00487 snprintf(new, sizeof(new), "%s.%ld", filename, (long)time(NULL)); 00488 if (rename(filename, new)) { 00489 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00490 res = -1; 00491 } 00492 break; 00493 case ROTATE: 00494 /* Find the next empty slot, including a possible suffix */ 00495 for (x = 0; ; x++) { 00496 found = 0; 00497 for (which = 0; which < ARRAY_LEN(suffixes); which++) { 00498 snprintf(new, sizeof(new), "%s.%d%s", filename, x, suffixes[which]); 00499 fd = open(new, O_RDONLY); 00500 if (fd > -1) { 00501 close(fd); 00502 found = 1; 00503 break; 00504 } 00505 } 00506 if (!found) { 00507 break; 00508 } 00509 } 00510 00511 /* Found an empty slot */ 00512 for (y = x; y > 0; y--) { 00513 for (which = 0; which < ARRAY_LEN(suffixes); which++) { 00514 snprintf(old, sizeof(old), "%s.%d%s", filename, y - 1, suffixes[which]); 00515 fd = open(old, O_RDONLY); 00516 if (fd > -1) { 00517 /* Found the right suffix */ 00518 close(fd); 00519 snprintf(new, sizeof(new), "%s.%d%s", filename, y, suffixes[which]); 00520 if (rename(old, new)) { 00521 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); 00522 res = -1; 00523 } 00524 break; 00525 } 00526 } 00527 } 00528 00529 /* Finally, rename the current file */ 00530 snprintf(new, sizeof(new), "%s.0", filename); 00531 if (rename(filename, new)) { 00532 fprintf(stderr, "Unable to rename file '%s' to '%s'\n", filename, new); 00533 res = -1; 00534 } 00535 } 00536 00537 if (!ast_strlen_zero(exec_after_rotate)) { 00538 struct ast_channel *c = ast_dummy_channel_alloc(); 00539 char buf[512]; 00540 pbx_builtin_setvar_helper(c, "filename", filename); 00541 pbx_substitute_variables_helper(c, exec_after_rotate, buf, sizeof(buf)); 00542 if (ast_safe_system(buf) == -1) { 00543 ast_log(LOG_WARNING, "error executing '%s'\n", buf); 00544 } 00545 c = ast_channel_release(c); 00546 } 00547 return res; 00548 }
| static void update_logchannels | ( | void | ) | [static] |
Definition at line 1259 of file logger.c.
References AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, logchannel::components, logchannel::lineno, logchannel::list, logchannel::logmask, and make_components().
Referenced by ast_logger_register_level(), and ast_logger_unregister_level().
01260 { 01261 struct logchannel *cur; 01262 01263 AST_RWLIST_WRLOCK(&logchannels); 01264 01265 global_logmask = 0; 01266 01267 AST_RWLIST_TRAVERSE(&logchannels, cur, list) { 01268 cur->logmask = make_components(cur->components, cur->lineno); 01269 global_logmask |= cur->logmask; 01270 } 01271 01272 AST_RWLIST_UNLOCK(&logchannels); 01273 }
struct ast_cli_entry cli_logger[] [static] |
int close_logger_thread = 0 [static] |
const int colors[32] [static] |
Colors used in the console for logging.
Definition at line 168 of file logger.c.
Referenced by logger_print_normal().
char dateformat[256] = "%b %e %T" [static] |
char exec_after_rotate[256] = "" [static] |
int filesize_reload_needed [static] |
unsigned int global_logmask = 0xFFFF [static] |
char hostname[MAXHOSTNAMELEN] [static] |
Definition at line 88 of file logger.c.
Referenced by app_exec(), ast_readconfig(), ast_remotecontrol(), cli_prompt(), iax2_register(), main(), netconsole(), set_destination(), sip_register(), sip_subscribe_mwi(), and tds_load_module().
char* levels[32] [static] |
Logging channels used in the Asterisk logging system.
The first 16 levels are reserved for system usage, and the remaining levels are reserved for usage by dynamic levels registered via ast_logger_register_level.
Definition at line 157 of file logger.c.
Referenced by ast_log(), ast_log_vsyslog(), ast_logger_register_level(), ast_logger_unregister_level(), ast_network_puts_mutable(), handle_logger_set_level(), handle_logger_show_channels(), and make_components().
struct ast_threadstorage log_buf = { .once = PTHREAD_ONCE_INIT, .key_init = __init_log_buf , .custom_init = NULL , } [static] |
ast_cond_t logcond [static] |
Definition at line 141 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(), and reload_logger().
pthread_t logthread = AST_PTHREADT_NULL [static] |
Definition at line 140 of file logger.c.
Referenced by __ast_verbose_ap(), ast_log(), close_logger(), and init_logger().
FILE* qlog [static] |
Definition at line 144 of file logger.c.
Referenced by ast_queue_log(), close_logger(), init_logger(), and reload_logger().
char queue_log_name[256] = QUEUELOG [static] |
struct ast_threadstorage verbose_buf = { .once = PTHREAD_ONCE_INIT, .key_init = __init_verbose_buf , .custom_init = NULL , } [static] |
1.5.6