Asterisk - The Open Source Telephony Project  GIT-master-a1fa8df
Data Structures | Macros | Enumerations | Functions
cli.h File Reference

Standard Command Line Interface. More...

#include "asterisk/linkedlists.h"
#include "asterisk/strings.h"

Go to the source code of this file.

Data Structures

struct  ast_cli_args
 
struct  ast_cli_entry
 descriptor for a cli entry. More...
 

Macros

#define ast_cli_command(fd, s)   ast_cli_command_full(CLI_NO_PERMS, CLI_NO_PERMS, fd, s)
 
#define ast_cli_command_multiple(fd, size, s)   ast_cli_command_multiple_full(CLI_NO_PERMS, CLI_NO_PERMS, fd, size, s)
 
#define AST_CLI_COMPLETE_EOF   "_EOF_"
 
#define AST_CLI_DEFINE(fn, txt, ...)   { .handler = fn, .summary = txt, ## __VA_ARGS__ }
 
#define AST_CLI_ONOFF(x)   (x) ? "On" : "Off"
 return On or Off depending on the argument. This is used in many places in CLI command, having a function to generate this helps maintaining a consistent output (and possibly emitting the output in other languages, at some point). More...
 
#define ast_cli_register(e)   __ast_cli_register(e, AST_MODULE_SELF)
 Registers a command or an array of commands. More...
 
#define ast_cli_register_multiple(e, len)   __ast_cli_register_multiple(e, len, AST_MODULE_SELF)
 Register multiple commands. More...
 
#define AST_CLI_YESNO(x)   AST_YESNO(x)
 Return Yes or No depending on the argument. More...
 
#define AST_MAX_ARGS   64
 
#define AST_MAX_CMD_LEN   16
 
#define CLI_FAILURE   (char *)RESULT_FAILURE
 
#define CLI_NO_PERMS   -1
 
#define CLI_SHOWUSAGE   (char *)RESULT_SHOWUSAGE
 
#define CLI_SUCCESS   (char *)RESULT_SUCCESS
 
#define ESS(x)   ((x) == 1 ? "" : "s")
 
#define RESULT_FAILURE   2
 
#define RESULT_SHOWUSAGE   1
 
#define RESULT_SUCCESS   0
 

Enumerations

enum  ast_cli_command { CLI_INIT = -2, CLI_GENERATE = -3, CLI_HANDLER = -4 }
 calling arguments for new-style handlers. More...
 

Functions

int __ast_cli_register (struct ast_cli_entry *e, struct ast_module *mod)
 
int __ast_cli_register_multiple (struct ast_cli_entry *e, int len, struct ast_module *mod)
 
void ast_cli (int fd, const char *fmt,...)
 
int ast_cli_allow_at_shutdown (struct ast_cli_entry *e)
 
int ast_cli_command_full (int uid, int gid, int fd, const char *s)
 Interprets a command Interpret a command s, sending output to fd if uid:gid has permissions to run this command. uid = CLI_NO_PERMS to avoid checking user permissions gid = CLI_NO_PERMS to avoid checking group permissions. More...
 
int ast_cli_command_multiple_full (int uid, int gid, int fd, size_t size, const char *s)
 Executes multiple CLI commands Interpret strings separated by NULL and execute each one, sending output to fd if uid has permissions, uid = CLI_NO_PERMS to avoid checking users permissions. gid = CLI_NO_PERMS to avoid checking group permissions. More...
 
char * ast_cli_complete (const char *word, const char *const choices[], int pos)
 
int ast_cli_completion_add (char *value)
 Add a result to a request for completion options. More...
 
char ** ast_cli_completion_matches (const char *, const char *)
 Generates a NULL-terminated array of strings that 1) begin with the string in the second parameter, and 2) are valid in a command after the string in the first parameter. More...
 
struct ast_vector_string * ast_cli_completion_vector (const char *text, const char *word)
 Generates a vector of strings for CLI completion. More...
 
char * ast_cli_generator (const char *, const char *, int)
 Readline madness Useful for readline, that's about it. More...
 
void ast_cli_print_timestr_fromseconds (int fd, int seconds, const char *prefix)
 Print on cli a duration in seconds in format s year(s), s week(s), s day(s), s hour(s), s second(s) More...
 
int ast_cli_unregister (struct ast_cli_entry *e)
 Unregisters a command or an array of commands. More...
 
int ast_cli_unregister_multiple (struct ast_cli_entry *e, int len)
 Unregister multiple commands. More...
 
char * ast_complete_channels (const char *line, const char *word, int pos, int state, int rpos)
 Command completion for the list of active channels. More...
 

Detailed Description

Standard Command Line Interface.

Definition in file cli.h.

Macro Definition Documentation

◆ ast_cli_command

#define ast_cli_command (   fd,
 
)    ast_cli_command_full(CLI_NO_PERMS, CLI_NO_PERMS, fd, s)

Definition at line 232 of file cli.h.

◆ ast_cli_command_multiple

#define ast_cli_command_multiple (   fd,
  size,
 
)    ast_cli_command_multiple_full(CLI_NO_PERMS, CLI_NO_PERMS, fd, size, s)

Definition at line 248 of file cli.h.

◆ AST_CLI_COMPLETE_EOF

#define AST_CLI_COMPLETE_EOF   "_EOF_"

Definition at line 52 of file cli.h.

Referenced by ast_el_strtoarr(), cli_complete(), and handle_commandmatchesarray().

◆ AST_CLI_DEFINE

#define AST_CLI_DEFINE (   fn,
  txt,
  ... 
)    { .handler = fn, .summary = txt, ## __VA_ARGS__ }

◆ AST_CLI_ONOFF

#define AST_CLI_ONOFF (   x)    (x) ? "On" : "Off"

return On or Off depending on the argument. This is used in many places in CLI command, having a function to generate this helps maintaining a consistent output (and possibly emitting the output in other languages, at some point).

Definition at line 78 of file cli.h.

Referenced by sip_show_settings(), and sorcery_memory_cache_show().

◆ ast_cli_register

#define ast_cli_register (   e)    __ast_cli_register(e, AST_MODULE_SELF)

Registers a command or an array of commands.

Parameters
ewhich cli entry to register. Register your own command
Return values
0on success
-1on failure

Definition at line 256 of file cli.h.

Referenced by ast_xmldoc_load_documentation(), load_config(), and load_module().

◆ ast_cli_register_multiple

#define ast_cli_register_multiple (   e,
  len 
)    __ast_cli_register_multiple(e, len, AST_MODULE_SELF)

◆ AST_CLI_YESNO

#define AST_CLI_YESNO (   x)    AST_YESNO(x)

Return Yes or No depending on the argument.

Note that this should probably still be used for CLI commands instead of AST_YESNO(), in the off chance we someday want to translate the CLI.

Parameters
xBoolean value
Returns
"Yes" if x is true (non-zero)
"No" if x is false (zero)

Definition at line 71 of file cli.h.

Referenced by _sip_show_peer(), action_coresettings(), agent_handle_show_specific(), ari_show(), ari_show_user(), comedia_string(), display_nat_warning(), force_rport_string(), handle_bridge_technology_show(), handle_cli_confbridge_list(), handle_cli_presencestate_list(), handle_cli_rtp_settings(), handle_cli_show_config(), handle_manager_show_settings(), handle_skel_show_config(), handle_skinny_show_settings(), show_channels_cb(), show_users_cb(), sip_show_channel(), sip_show_mwi(), sip_show_settings(), sip_show_user(), and sip_show_users().

◆ AST_MAX_ARGS

#define AST_MAX_ARGS   64

Definition at line 50 of file cli.h.

Referenced by __ast_cli_generator(), ast_cli_command_full(), and handle_cli_check_permissions().

◆ AST_MAX_CMD_LEN

#define AST_MAX_CMD_LEN   16

Definition at line 48 of file cli.h.

Referenced by __ast_cli_register(), check_blacklist(), and find_best().

◆ CLI_FAILURE

#define CLI_FAILURE   (char *)RESULT_FAILURE

Definition at line 46 of file cli.h.

Referenced by _sip_show_peers(), ari_mkpasswd(), ari_set_debug(), ari_show(), ari_show_app(), ari_show_apps(), ari_show_user(), ari_show_users(), ast_cli_command_full(), ast_sip_cli_traverse_objects(), cli_console_active(), cli_console_answer(), cli_console_autoanswer(), cli_console_dial(), cli_console_flash(), cli_console_hangup(), cli_console_mute(), cli_console_sendtext(), cli_list_subscriptions_inout(), cli_notify(), cli_odbc_read(), cli_odbc_write(), cli_qualify(), cli_realtime_destroy(), cli_realtime_store(), cli_realtime_update(), cli_realtime_update2(), cli_register(), cli_reload_qualify_aor(), cli_reload_qualify_endpoint(), cli_show_qualify_aor(), cli_show_qualify_endpoint(), cli_show_settings(), cli_show_subscriptions_inout(), cli_show_tasks(), cli_subsystem_alert_report(), cli_tps_ping(), cli_unregister(), complete_ari_app(), complete_ari_user(), console_answer(), console_dial(), console_hangup(), console_sendtext(), corosync_ping(), corosync_show_members(), dahdi_cc_callback(), dahdi_create_channels(), dahdi_destroy_channels(), dahdi_restart_cmd(), dahdi_set_dnd(), dahdi_set_hwgain(), dahdi_set_swgain(), dahdi_show_channel(), dahdi_show_status(), handle_cc_status(), handle_cli_ael_reload(), handle_cli_agi_add_cmd(), handle_cli_agi_show(), handle_cli_amihook_register_hook(), handle_cli_amihook_send(), handle_cli_amihook_unregister_hook(), handle_cli_check_permissions(), handle_cli_confbridge_start_record(), handle_cli_core_show_channeltype(), handle_cli_core_show_translation(), handle_cli_devstate_change(), handle_cli_dialplan_add_extension(), handle_cli_dialplan_add_ignorepat(), handle_cli_dialplan_add_include(), handle_cli_dialplan_remove_extension(), handle_cli_dialplan_remove_ignorepat(), handle_cli_dialplan_remove_include(), handle_cli_dialplan_save(), handle_cli_file_convert(), handle_cli_iax2_set_debug(), handle_cli_iax2_show_peers(), handle_cli_indication_add(), handle_cli_indication_remove(), handle_cli_presencestate_change(), handle_cli_realtime_pgsql_status(), handle_cli_rtcp_set_stats(), handle_cli_sched_bench(), handle_cli_sec_evt_test(), handle_cli_show_config(), handle_cli_sound_show(), handle_cli_sounds_show(), handle_cli_status(), handle_cli_submit(), handle_cli_ulimit(), handle_commandmatchesarray(), handle_debug_dialplan(), handle_debug_or_trace(), handle_dump_docs(), handle_export_primitives(), handle_load(), handle_logger_add_channel(), handle_logger_reload(), handle_logger_remove_channel(), handle_logger_rotate(), handle_minivm_list_templates(), handle_minivm_show_users(), handle_minivm_show_zones(), handle_queue_add_member(), handle_queue_change_priority_caller(), handle_queue_pause_member(), handle_queue_remove_member(), handle_queue_set_member_penalty(), handle_queue_set_member_ringinuse(), handle_redirect(), handle_set_chanvar(), handle_show_application(), handle_show_chanvar(), handle_show_dialplan(), handle_show_function(), handle_show_hangup_all(), handle_show_hangup_channel(), handle_show_translation_path(), handle_showchan(), handle_showmancmd(), handle_softhangup(), handle_unload(), handle_voicemail_show_users(), handle_voicemail_show_zones(), meetme_cmd_helper(), meetme_show_cmd(), orig_app(), orig_exten(), pjsip_show_history(), prometheus_show_metrics(), realtime_ldap_status(), rtcp_do_debug_ip(), rtp_do_debug_ip(), show_users_realtime(), sip_cli_notify(), sorcery_memory_cache_cli_thrash(), sorcery_memory_cache_dump(), sorcery_memory_cache_expire(), sorcery_memory_cache_populate(), sorcery_memory_cache_show(), sorcery_memory_cache_stale(), stasis_show_topic(), timing_test(), xmpp_cli_create_collection(), xmpp_cli_create_leafnode(), xmpp_cli_delete_pubsub_node(), xmpp_cli_list_pubsub_nodes(), and xmpp_cli_purge_pubsub_nodes().

◆ CLI_NO_PERMS

#define CLI_NO_PERMS   -1

Definition at line 38 of file cli.h.

Referenced by cli_has_permissions().

◆ CLI_SHOWUSAGE

#define CLI_SHOWUSAGE   (char *)RESULT_SHOWUSAGE

Definition at line 45 of file cli.h.

Referenced by __queues_show(), __say_cli_init(), _sip_qualify_peer(), _sip_show_peer(), _sip_show_peers(), _skinny_message_clear(), _skinny_message_set(), _skinny_show_device(), _skinny_show_devices(), _skinny_show_line(), _skinny_show_lines(), action_dahdishowchannels(), aeap_server_show(), aeap_server_show_all(), agent_handle_logoff_cmd(), agent_handle_show_all(), agent_handle_show_online(), agent_handle_show_specific(), ao2_container_unregister(), ao2_weakproxy_unsubscribe(), aoc_cli_debug_enable(), ari_mkpasswd(), ari_set_debug(), ari_show(), ari_show_app(), ari_show_apps(), ari_show_user(), ari_show_users(), ast_cli_command_full(), ast_sip_cli_traverse_objects(), cli_console_active(), cli_console_answer(), cli_console_autoanswer(), cli_console_dial(), cli_console_flash(), cli_console_hangup(), cli_console_mute(), cli_console_sendtext(), cli_dump_endpt(), cli_fax_set_debug(), cli_fax_show_session(), cli_fax_show_version(), cli_list_available(), cli_list_devices(), cli_list_subscriptions_inout(), cli_notify(), cli_odbc_read(), cli_odbc_write(), cli_qualify(), cli_realtime_destroy(), cli_realtime_load(), cli_realtime_store(), cli_realtime_update(), cli_realtime_update2(), cli_register(), cli_reload_qualify_aor(), cli_reload_qualify_endpoint(), cli_show_endpoint_identifiers(), cli_show_help(), cli_show_qualify_aor(), cli_show_qualify_endpoint(), cli_show_subscription_inout(), cli_show_subscriptions_inout(), cli_show_tasks(), cli_subsystem_alert_report(), cli_tps_ping(), cli_tps_report(), cli_tps_reset_stats(), cli_tps_reset_stats_all(), cli_unregister(), console_answer(), console_autoanswer(), console_dial(), console_hangup(), console_mute(), console_sendtext(), corosync_ping(), corosync_show_config(), corosync_show_members(), dahdi_cc_callback(), dahdi_create_channels(), dahdi_destroy_channels(), dahdi_restart_cmd(), dahdi_set_dnd(), dahdi_set_hwgain(), dahdi_set_swgain(), dahdi_show_channel(), dahdi_show_channels(), dundi_do_lookup(), dundi_do_precache(), dundi_do_query(), dundi_flush(), dundi_set_debug(), dundi_show_cache(), dundi_show_entityid(), dundi_show_hints(), dundi_show_mappings(), dundi_show_peer(), dundi_show_peers(), dundi_show_precache(), dundi_show_requests(), dundi_show_trans(), dundi_store_history(), group_show_channels(), handle_abort_shutdown(), handle_bridge_kick_channel(), handle_bridge_show_specific(), handle_bridge_technology_suspend(), handle_cc_kill(), handle_cc_status(), handle_cdr_pgsql_status(), handle_chanlist(), handle_cli_ael_reload(), handle_cli_ael_set_debug(), handle_cli_agi_add_cmd(), handle_cli_agi_debug(), handle_cli_agi_dump_html(), handle_cli_agi_show(), handle_cli_check_permissions(), handle_cli_confbridge_kick(), handle_cli_confbridge_list(), handle_cli_confbridge_lock(), handle_cli_confbridge_mute(), handle_cli_confbridge_show_bridge_profile(), handle_cli_confbridge_show_menu(), handle_cli_confbridge_show_user_profile(), handle_cli_confbridge_start_record(), handle_cli_confbridge_stop_record(), handle_cli_confbridge_unlock(), handle_cli_confbridge_unmute(), handle_cli_config_reload(), handle_cli_core_show_channeltype(), handle_cli_core_show_channeltypes(), handle_cli_core_show_file_formats(), handle_cli_core_show_translation(), handle_cli_database_del(), handle_cli_database_deltree(), handle_cli_database_get(), handle_cli_database_put(), handle_cli_database_query(), handle_cli_database_show(), handle_cli_database_showkey(), handle_cli_debug(), handle_cli_devstate_change(), handle_cli_devstate_list(), handle_cli_dialplan_add_extension(), handle_cli_dialplan_add_ignorepat(), handle_cli_dialplan_add_include(), handle_cli_dialplan_reload(), handle_cli_dialplan_remove_context(), handle_cli_dialplan_remove_extension(), handle_cli_dialplan_remove_ignorepat(), handle_cli_dialplan_remove_include(), handle_cli_dialplan_save(), handle_cli_file_convert(), handle_cli_iax2_provision(), handle_cli_iax2_prune_realtime(), handle_cli_iax2_set_debug(), handle_cli_iax2_set_debug_jb(), handle_cli_iax2_set_debug_trunk(), handle_cli_iax2_set_mtu(), handle_cli_iax2_show_callno_limits(), handle_cli_iax2_show_channels(), handle_cli_iax2_show_firmware(), handle_cli_iax2_show_netstats(), handle_cli_iax2_show_peer(), handle_cli_iax2_show_peers(), handle_cli_iax2_show_registry(), handle_cli_iax2_show_stats(), handle_cli_iax2_show_threads(), handle_cli_iax2_show_users(), handle_cli_iax2_test_losspct(), handle_cli_iax2_unregister(), handle_cli_indication_add(), handle_cli_indication_remove(), handle_cli_keys_init(), handle_cli_mixmonitor(), handle_cli_mobile_cusd(), handle_cli_mobile_rfcomm(), handle_cli_mobile_search(), handle_cli_mobile_show_devices(), handle_cli_moh_reload(), handle_cli_moh_show_classes(), handle_cli_moh_show_files(), handle_cli_moh_unregister_class(), handle_cli_ooh323_reload(), handle_cli_ooh323_set_debug(), handle_cli_ooh323_show_config(), handle_cli_ooh323_show_gk(), handle_cli_ooh323_show_peer(), handle_cli_ooh323_show_peers(), handle_cli_ooh323_show_user(), handle_cli_ooh323_show_users(), handle_cli_osp_show(), handle_cli_presencestate_change(), handle_cli_presencestate_list(), handle_cli_realtime_mysql_status(), handle_cli_realtime_pgsql_status(), handle_cli_refresh(), handle_cli_reload(), handle_cli_rtcp_set_debug(), handle_cli_rtcp_set_stats(), handle_cli_rtp_set_debug(), handle_cli_rtp_settings(), handle_cli_sched_bench(), handle_cli_show(), handle_cli_sound_show(), handle_cli_sounds_show(), handle_cli_status(), handle_cli_stun_set_debug(), handle_cli_stun_show_status(), handle_cli_submit(), handle_cli_test_locales(), handle_cli_transcoder_show(), handle_cli_udptl_set_debug(), handle_cli_ulimit(), handle_commandmatchesarray(), handle_core_reload(), handle_core_set_debug_channel(), handle_core_show_image_formats(), handle_debug_category(), handle_debug_dialplan(), handle_debug_or_trace(), handle_dump_docs(), handle_load(), handle_logger_add_channel(), handle_logger_mute(), handle_logger_remove_channel(), handle_logger_set_level(), handle_manager_reload(), handle_manager_show_event(), handle_manager_show_events(), handle_manager_show_settings(), handle_mandebug(), handle_mgcp_audit_endpoint(), handle_mgcp_show_endpoints(), handle_minivm_list_templates(), handle_minivm_show_users(), handle_minivm_show_zones(), handle_modlist(), handle_nodebugchan_deprecated(), handle_orig(), handle_pjproject_set_log_level(), handle_pjproject_show_log_level(), handle_queue_add_member(), handle_queue_change_priority_caller(), handle_queue_pause_member(), handle_queue_reload(), handle_queue_remove_member(), handle_queue_reset(), handle_queue_rule_show(), handle_queue_set_member_penalty(), handle_queue_set_member_ringinuse(), handle_redirect(), handle_remb_set(), handle_restart_gracefully(), handle_restart_now(), handle_restart_when_convenient(), handle_set_chanvar(), handle_set_extenpatternmatchnew(), handle_set_global(), handle_show_application(), handle_show_calendar(), handle_show_chanvar(), handle_show_dialplan(), handle_show_function(), handle_show_functions(), handle_show_hangup_all(), handle_show_hangup_channel(), handle_show_hint(), handle_show_http(), handle_show_named_acl_cmd(), handle_show_parking_lot_cmd(), handle_showcalls(), handle_showchan(), handle_showmanager(), handle_showmanagers(), handle_showmancmd(), handle_showuptime(), handle_skinny_reload(), handle_skinny_reset(), handle_skinny_show_lines(), handle_skinny_show_settings(), handle_softhangup(), handle_stop_gracefully(), handle_stop_now(), handle_stop_when_convenient(), handle_unload(), handle_unset_extenpatternmatchnew(), handle_verbose(), handle_version(), handle_voicemail_reload(), handle_voicemail_show_aliases(), handle_voicemail_show_users(), handle_voicemail_show_zones(), iax_show_provisioning(), locals_show(), media_cache_handle_create_item(), media_cache_handle_delete_item(), media_cache_handle_refresh_item(), media_cache_handle_show_all(), media_cache_handle_show_item(), meetme_cmd_helper(), meetme_kick_cmd(), meetme_lock_cmd(), meetme_mute_cmd(), meetme_show_cmd(), orig_app(), orig_exten(), pjsip_enable_logger_host(), pjsip_set_history(), pjsip_set_logger(), pjsip_show_history(), pktccops_gatedel(), pktccops_gateset(), prometheus_show_metrics(), prometheus_show_status(), show_codec(), show_codecs(), sip_cli_notify(), sip_do_debug(), sip_do_debug_ip(), sip_prune_realtime(), sip_set_history(), sip_show_channel(), sip_show_channels(), sip_show_channelstats(), sip_show_history(), sip_show_inuse(), sip_show_objects(), sip_show_registry(), sip_show_settings(), sip_show_tcp(), sip_show_user(), sip_show_users(), sip_unregister(), sorcery_memory_cache_cli_thrash(), sorcery_memory_cache_dump(), sorcery_memory_cache_expire(), sorcery_memory_cache_populate(), sorcery_memory_cache_show(), sorcery_memory_cache_stale(), stasis_show_topic(), stasis_show_topics(), stir_shaken_certificate_show(), stir_shaken_certificate_show_all(), stir_shaken_general_show(), stir_shaken_store_show(), threadstorage_init(), timing_test(), unistim_do_debug(), unistim_reload(), unistim_show_devices(), unistim_show_info(), unistim_sp(), xmpp_cli_create_collection(), xmpp_cli_create_leafnode(), xmpp_cli_delete_pubsub_node(), xmpp_cli_list_pubsub_nodes(), xmpp_cli_purge_pubsub_nodes(), and xmpp_do_set_debug().

◆ CLI_SUCCESS

#define CLI_SUCCESS   (char *)RESULT_SUCCESS

Definition at line 44 of file cli.h.

Referenced by __queues_show(), __say_cli_init(), _sip_qualify_peer(), _sip_show_peer(), _sip_show_peers(), _skinny_message_clear(), _skinny_message_set(), _skinny_show_device(), _skinny_show_devices(), _skinny_show_line(), _skinny_show_lines(), action_dahdishowchannels(), aeap_server_show(), aeap_server_show_all(), agent_handle_logoff_cmd(), agent_handle_show_all(), agent_handle_show_online(), agent_handle_show_specific(), alias_show(), ao2_container_unregister(), ao2_weakproxy_unsubscribe(), aoc_cli_debug_enable(), ari_mkpasswd(), ari_set_debug(), ari_show(), ari_show_app(), ari_show_apps(), ari_show_user(), ari_show_users(), ast_cli_command_full(), ast_sip_cli_traverse_objects(), check_debug(), cli_alias_passthrough(), cli_console_active(), cli_console_answer(), cli_console_autoanswer(), cli_console_dial(), cli_console_flash(), cli_console_hangup(), cli_console_mute(), cli_console_sendtext(), cli_dump_endpt(), cli_fax_set_debug(), cli_fax_show_capabilities(), cli_fax_show_session(), cli_fax_show_sessions(), cli_fax_show_settings(), cli_fax_show_stats(), cli_fax_show_version(), cli_list_available(), cli_list_devices(), cli_list_subscriptions_inout(), cli_notify(), cli_odbc_read(), cli_odbc_write(), cli_qualify(), cli_realtime_destroy(), cli_realtime_load(), cli_realtime_store(), cli_realtime_update(), cli_realtime_update2(), cli_register(), cli_reload_qualify_aor(), cli_reload_qualify_endpoint(), cli_show_endpoint_identifiers(), cli_show_help(), cli_show_qualify_aor(), cli_show_qualify_endpoint(), cli_show_settings(), cli_show_subscription_inout(), cli_show_subscriptions_inout(), cli_show_tasks(), cli_subsystem_alert_report(), cli_tps_ping(), cli_tps_report(), cli_tps_reset_stats(), cli_tps_reset_stats_all(), cli_unregister(), console_answer(), console_autoanswer(), console_dial(), console_hangup(), console_mute(), console_sendtext(), corosync_ping(), corosync_show_config(), corosync_show_members(), dahdi_cc_callback(), dahdi_create_channels(), dahdi_destroy_channels(), dahdi_restart_cmd(), dahdi_set_dnd(), dahdi_set_hwgain(), dahdi_set_swgain(), dahdi_show_channel(), dahdi_show_channels(), dahdi_show_status(), dahdi_show_version(), dundi_do_lookup(), dundi_do_precache(), dundi_do_query(), dundi_flush(), dundi_set_debug(), dundi_show_cache(), dundi_show_entityid(), dundi_show_hints(), dundi_show_mappings(), dundi_show_peer(), dundi_show_peers(), dundi_show_precache(), dundi_show_requests(), dundi_show_trans(), dundi_store_history(), group_show_channels(), handle_abort_shutdown(), handle_bang(), handle_bridge_kick_channel(), handle_bridge_show_all(), handle_bridge_show_specific(), handle_bridge_technology_show(), handle_bridge_technology_suspend(), handle_cc_kill(), handle_cc_status(), handle_cdr_pgsql_status(), handle_chanlist(), handle_clear_profile(), handle_cli_ael_reload(), handle_cli_ael_set_debug(), handle_cli_agi_add_cmd(), handle_cli_agi_debug(), handle_cli_agi_dump_html(), handle_cli_agi_show(), handle_cli_amihook_register_hook(), handle_cli_amihook_send(), handle_cli_amihook_unregister_hook(), handle_cli_check_permissions(), handle_cli_confbridge_kick(), handle_cli_confbridge_list(), handle_cli_confbridge_lock(), handle_cli_confbridge_mute(), handle_cli_confbridge_show_bridge_profile(), handle_cli_confbridge_show_bridge_profiles(), handle_cli_confbridge_show_menu(), handle_cli_confbridge_show_menus(), handle_cli_confbridge_show_user_profile(), handle_cli_confbridge_show_user_profiles(), handle_cli_confbridge_start_record(), handle_cli_confbridge_stop_record(), handle_cli_confbridge_unlock(), handle_cli_confbridge_unmute(), handle_cli_config_list(), handle_cli_config_reload(), handle_cli_core_show_channeltype(), handle_cli_core_show_channeltypes(), handle_cli_core_show_config_mappings(), handle_cli_core_show_file_formats(), handle_cli_database_del(), handle_cli_database_deltree(), handle_cli_database_get(), handle_cli_database_put(), handle_cli_database_query(), handle_cli_database_show(), handle_cli_database_showkey(), handle_cli_debug(), handle_cli_devstate_change(), handle_cli_devstate_list(), handle_cli_dialplan_add_extension(), handle_cli_dialplan_add_ignorepat(), handle_cli_dialplan_add_include(), handle_cli_dialplan_reload(), handle_cli_dialplan_remove_context(), handle_cli_dialplan_remove_extension(), handle_cli_dialplan_remove_ignorepat(), handle_cli_dialplan_remove_include(), handle_cli_dialplan_save(), handle_cli_dynamic_level_test(), handle_cli_file_convert(), handle_cli_iax2_provision(), handle_cli_iax2_prune_realtime(), handle_cli_iax2_reload(), handle_cli_iax2_set_debug(), handle_cli_iax2_set_debug_jb(), handle_cli_iax2_set_debug_trunk(), handle_cli_iax2_set_mtu(), handle_cli_iax2_show_cache(), handle_cli_iax2_show_callno_limits(), handle_cli_iax2_show_channels(), handle_cli_iax2_show_firmware(), handle_cli_iax2_show_netstats(), handle_cli_iax2_show_peer(), handle_cli_iax2_show_peers(), handle_cli_iax2_show_registry(), handle_cli_iax2_show_stats(), handle_cli_iax2_show_threads(), handle_cli_iax2_show_users(), handle_cli_iax2_test_losspct(), handle_cli_iax2_unregister(), handle_cli_indication_add(), handle_cli_indication_remove(), handle_cli_indication_show(), handle_cli_keys_init(), handle_cli_keys_show(), handle_cli_malloc_trim(), handle_cli_mixmonitor(), handle_cli_mobile_cusd(), handle_cli_mobile_rfcomm(), handle_cli_mobile_search(), handle_cli_mobile_show_devices(), handle_cli_moh_reload(), handle_cli_moh_show_classes(), handle_cli_moh_show_files(), handle_cli_moh_unregister_class(), handle_cli_odbc_show(), handle_cli_ooh323_set_debug(), handle_cli_ooh323_show_config(), handle_cli_ooh323_show_gk(), handle_cli_ooh323_show_peer(), handle_cli_ooh323_show_peers(), handle_cli_ooh323_show_user(), handle_cli_osp_show(), handle_cli_performance_test(), handle_cli_presencestate_change(), handle_cli_presencestate_list(), handle_cli_queue_test(), handle_cli_realtime_mysql_cache(), handle_cli_realtime_mysql_status(), handle_cli_realtime_pgsql_status(), handle_cli_refresh(), handle_cli_reload(), handle_cli_reload_permissions(), handle_cli_rtcp_set_debug(), handle_cli_rtcp_set_stats(), handle_cli_rtp_set_debug(), handle_cli_rtp_settings(), handle_cli_sched_bench(), handle_cli_sec_evt_test(), handle_cli_show(), handle_cli_show_config(), handle_cli_show_permissions(), handle_cli_sound_show(), handle_cli_sounds_show(), handle_cli_status(), handle_cli_stun_set_debug(), handle_cli_stun_show_status(), handle_cli_submit(), handle_cli_test_locales(), handle_cli_transcoder_show(), handle_cli_udptl_set_debug(), handle_cli_ulimit(), handle_cli_wait_fullybooted(), handle_commandmatchesarray(), handle_core_reload(), handle_core_set_debug_channel(), handle_core_show_image_formats(), handle_dahdi_show_cadences(), handle_debug_category(), handle_debug_dialplan(), handle_debug_or_trace(), handle_dump_docs(), handle_dump_sched(), handle_export_primitives(), handle_feature_show(), handle_help(), handle_load(), handle_logger_add_channel(), handle_logger_mute(), handle_logger_reload(), handle_logger_remove_channel(), handle_logger_rotate(), handle_logger_set_level(), handle_logger_show_channels(), handle_manager_reload(), handle_manager_show_event(), handle_manager_show_events(), handle_manager_show_settings(), handle_mandebug(), handle_mgcp_audit_endpoint(), handle_mgcp_show_endpoints(), handle_minivm_list_templates(), handle_minivm_reload(), handle_minivm_show_settings(), handle_minivm_show_stats(), handle_minivm_show_users(), handle_minivm_show_zones(), handle_modlist(), handle_pjproject_set_log_level(), handle_pjproject_show_buildopts(), handle_pjproject_show_log_level(), handle_pjproject_show_log_mappings(), handle_pjsip_show_version(), handle_queue_add_member(), handle_queue_change_priority_caller(), handle_queue_pause_member(), handle_queue_reload(), handle_queue_remove_member(), handle_queue_reset(), handle_queue_rule_show(), handle_queue_set_member_penalty(), handle_queue_set_member_ringinuse(), handle_redirect(), handle_reload(), handle_remb_set(), handle_restart_gracefully(), handle_restart_now(), handle_restart_when_convenient(), handle_set_chanvar(), handle_set_extenpatternmatchnew(), handle_set_global(), handle_show_application(), handle_show_applications(), handle_show_calendar(), handle_show_calendars(), handle_show_calendars_types(), handle_show_chanvar(), handle_show_dialplan(), handle_show_function(), handle_show_functions(), handle_show_globals(), handle_show_hangup_all(), handle_show_hangup_channel(), handle_show_hint(), handle_show_hints(), handle_show_http(), handle_show_named_acl_cmd(), handle_show_parking_lot_cmd(), handle_show_profile(), handle_show_settings(), handle_show_switches(), handle_show_sysinfo(), handle_show_threads(), handle_show_translation_path(), handle_show_translation_table(), handle_showchan(), handle_showmanager(), handle_showmanagers(), handle_showmancmd(), handle_showmancmds(), handle_showmanconn(), handle_showmaneventq(), handle_showuptime(), handle_skel_show_config(), handle_skel_show_games(), handle_skel_show_levels(), handle_skinny_reload(), handle_skinny_reset(), handle_skinny_show_settings(), handle_softhangup(), handle_stop_gracefully(), handle_stop_now(), handle_stop_when_convenient(), handle_unload(), handle_unset_extenpatternmatchnew(), handle_verbose(), handle_version(), handle_voicemail_reload(), handle_voicemail_show_aliases(), handle_voicemail_show_users(), handle_voicemail_show_zones(), help1(), help_workhorse(), iax_show_provisioning(), locals_show(), manager_show_dialplan(), media_cache_handle_create_item(), media_cache_handle_delete_item(), media_cache_handle_refresh_item(), media_cache_handle_show_all(), media_cache_handle_show_item(), meetme_cmd_helper(), meetme_show_cmd(), mgcp_reload(), orig_app(), orig_exten(), pjsip_disable_logger(), pjsip_enable_logger_all(), pjsip_enable_logger_host(), pjsip_set_history(), pjsip_set_logger_pcap(), pjsip_set_logger_verbose(), pjsip_show_history(), pktccops_gatedel(), pktccops_gateset(), pktccops_show_cmtses(), pktccops_show_gates(), pktccops_show_pools(), prometheus_show_metrics(), prometheus_show_status(), realtime_ldap_status(), rtcp_do_debug_ip(), rtp_do_debug_ip(), show_codec(), show_codecs(), show_license(), show_users_realtime(), show_warranty(), sip_cli_notify(), sip_do_debug(), sip_do_debug_ip(), sip_do_debug_peer(), sip_prune_realtime(), sip_reload(), sip_set_history(), sip_show_channel(), sip_show_channels(), sip_show_channelstats(), sip_show_domains(), sip_show_history(), sip_show_inuse(), sip_show_mwi(), sip_show_objects(), sip_show_registry(), sip_show_sched(), sip_show_settings(), sip_show_tcp(), sip_show_user(), sip_show_users(), sip_unregister(), sla_show_stations(), sla_show_trunks(), sorcery_memory_cache_cli_thrash(), sorcery_memory_cache_dump(), sorcery_memory_cache_expire(), sorcery_memory_cache_populate(), sorcery_memory_cache_show(), sorcery_memory_cache_stale(), spandsp_fax_cli_show_capabilities(), spandsp_fax_cli_show_session(), spandsp_fax_cli_show_settings(), spandsp_fax_cli_show_stats(), stasis_show_topic(), stasis_show_topics(), stir_shaken_certificate_show(), stir_shaken_certificate_show_all(), stir_shaken_general_show(), stir_shaken_store_show(), threadstorage_init(), timing_test(), tls_method_to_str(), unistim_do_debug(), unistim_reload(), unistim_show_devices(), unistim_show_info(), unistim_sp(), xmpp_cli_create_collection(), xmpp_cli_create_leafnode(), xmpp_cli_delete_pubsub_node(), xmpp_cli_list_pubsub_nodes(), xmpp_cli_purge_pubsub_nodes(), xmpp_do_set_debug(), xmpp_show_buddies(), and xmpp_show_clients().

◆ ESS

#define ESS (   x)    ((x) == 1 ? "" : "s")

In many cases we need to print singular or plural words depending on a count. This macro helps us e.g. printf("we have %d object%s", n, ESS(n));

Definition at line 59 of file cli.h.

Referenced by cli_realtime_destroy(), cli_realtime_update(), cli_realtime_update2(), group_show_channels(), handle_chanlist(), handle_cli_status(), handle_showcalls(), print_uptimestr(), and sip_show_channels().

◆ RESULT_FAILURE

#define RESULT_FAILURE   2

◆ RESULT_SHOWUSAGE

#define RESULT_SHOWUSAGE   1

◆ RESULT_SUCCESS

#define RESULT_SUCCESS   0

Definition at line 40 of file cli.h.

Referenced by __iax2_show_peers(), action_command(), agi_handle_command(), ast_cli_command_full(), cli_fax_show_session(), dahdi_create_channel_range(), dahdi_create_channels(), handle_answer(), handle_autohangup(), handle_channelstatus(), handle_cli_ooh323_set_debug(), handle_cli_ooh323_show_users(), handle_controlstreamfile(), handle_dbdel(), handle_dbdeltree(), handle_dbget(), handle_dbput(), handle_getdata(), handle_getoption(), handle_getvariable(), handle_getvariablefull(), handle_gosub(), handle_hangup(), handle_noop(), handle_queue_pause_member(), handle_queue_set_member_penalty(), handle_queue_set_member_ringinuse(), handle_recordfile(), handle_recvchar(), handle_recvtext(), handle_sayalpha(), handle_saydate(), handle_saydatetime(), handle_saydigits(), handle_saynumber(), handle_sayphonetic(), handle_saytime(), handle_sendimage(), handle_sendtext(), handle_setcallerid(), handle_setcontext(), handle_setextension(), handle_setmusic(), handle_setpriority(), handle_setvariable(), handle_showcalls(), handle_speechactivategrammar(), handle_speechcreate(), handle_speechdeactivategrammar(), handle_speechdestroy(), handle_speechloadgrammar(), handle_speechrecognize(), handle_speechset(), handle_speechunloadgrammar(), handle_streamfile(), handle_tddmode(), handle_verbose(), handle_waitfordigit(), locals_show(), manager_iax2_show_netstats(), manager_iax2_show_peer_list(), manager_list_voicemail_users(), manager_queue_rule_show(), manager_queues_status(), manager_queues_summary(), manager_status_voicemail_user(), manager_voicemail_refresh(), reload_config(), set_member_paused(), and set_member_value().

Enumeration Type Documentation

◆ ast_cli_command

calling arguments for new-style handlers.

Enumerator
CLI_INIT 
CLI_GENERATE 
CLI_HANDLER 

Definition at line 151 of file cli.h.

151  {
152  CLI_INIT = -2, /* return the usage string */
153  CLI_GENERATE = -3, /* behave as 'generator', remap argv to struct ast_cli_args */
154  CLI_HANDLER = -4, /* run the normal handler */
155 };
Definition: cli.h:152

Function Documentation

◆ __ast_cli_register()

int __ast_cli_register ( struct ast_cli_entry e,
struct ast_module mod 
)

Definition at line 2420 of file main/cli.c.

References ast_cli_entry::_full_cmd, ast_free, ast_log, AST_MAX_CMD_LEN, AST_RWLIST_INSERT_BEFORE_CURRENT, AST_RWLIST_INSERT_TAIL, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_skip_blanks(), ast_skip_nonblanks(), ast_strdup, ast_strlen_zero(), CLI_INIT, cli_is_registered(), ast_cli_entry::cmda, ast_cli_entry::cmdlen, ast_cli_entry::command, done, find_cli(), ast_cli_entry::handler, len(), cli_perm::list, LOG_WARNING, ast_cli_entry::module, NULL, S_OR, and set_full_cmd().

Referenced by __ast_cli_register_multiple().

2421 {
2422  struct ast_cli_entry *cur;
2423  int i, lf, ret = -1;
2424 
2425  struct ast_cli_args a; /* fake argument */
2426  char **dst = (char **)e->cmda; /* need to cast as the entry is readonly */
2427  char *s;
2428 
2430 
2431  if (cli_is_registered(e)) {
2432  ast_log(LOG_WARNING, "Command '%s' already registered (the same ast_cli_entry)\n",
2433  S_OR(e->_full_cmd, e->command));
2434  ret = 0; /* report success */
2435  goto done;
2436  }
2437 
2438  memset(&a, '\0', sizeof(a));
2439 
2440  e->module = module;
2441  /* No module reference needed here, the module called us. */
2442  e->handler(e, CLI_INIT, &a);
2443 
2444  /* XXX check that usage and command are filled up */
2445  s = ast_skip_blanks(e->command);
2446  s = e->command = ast_strdup(s);
2447  for (i=0; !ast_strlen_zero(s) && i < AST_MAX_CMD_LEN-1; i++) {
2448  *dst++ = s; /* store string */
2449  s = ast_skip_nonblanks(s);
2450  if (*s == '\0') /* we are done */
2451  break;
2452  *s++ = '\0';
2453  s = ast_skip_blanks(s);
2454  }
2455  *dst++ = NULL;
2456 
2457  if (find_cli(e->cmda, 1)) {
2458  ast_log(LOG_WARNING, "Command '%s' already registered (or something close enough)\n",
2459  S_OR(e->_full_cmd, e->command));
2460  goto done;
2461  }
2462  if (set_full_cmd(e)) {
2463  ast_log(LOG_WARNING, "Error registering CLI Command '%s'\n",
2464  S_OR(e->_full_cmd, e->command));
2465  goto done;
2466  }
2467 
2468  lf = e->cmdlen;
2470  int len = cur->cmdlen;
2471  if (lf < len)
2472  len = lf;
2473  if (strncasecmp(e->_full_cmd, cur->_full_cmd, len) < 0) {
2475  break;
2476  }
2477  }
2479 
2480  if (!cur)
2481  AST_RWLIST_INSERT_TAIL(&helpers, e, list);
2482  ret = 0; /* success */
2483 
2484 done:
2486  if (ret) {
2487  ast_free(e->command);
2488  e->command = NULL;
2489  }
2490 
2491  return ret;
2492 }
char * _full_cmd
Definition: cli.h:181
int cmdlen
Definition: cli.h:182
static int cli_is_registered(struct ast_cli_entry *e)
Definition: main/cli.c:2378
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
Definition: linkedlists.h:51
descriptor for a cli entry.
Definition: cli.h:171
#define LOG_WARNING
Definition: logger.h:274
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
Definition: linkedlists.h:150
Definition: cli.h:152
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:243
#define NULL
Definition: resample.c:96
char * ast_skip_nonblanks(const char *str)
Gets a pointer to first whitespace character in a string.
Definition: strings.h:200
int done
Definition: test_amihooks.c:48
#define ast_log
Definition: astobj2.c:42
char *(* handler)(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
Definition: cli.h:187
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
#define AST_RWLIST_INSERT_BEFORE_CURRENT
Definition: linkedlists.h:609
#define AST_RWLIST_TRAVERSE_SAFE_BEGIN
Definition: linkedlists.h:544
static struct ast_cli_entry * find_cli(const char *const cmds[], int match_type)
Definition: main/cli.c:2316
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
char * ast_skip_blanks(const char *str)
Gets a pointer to the first non-whitespace character in a string.
Definition: strings.h:157
#define ast_free(a)
Definition: astmm.h:182
char * command
Definition: cli.h:186
#define AST_RWLIST_INSERT_TAIL
Definition: linkedlists.h:740
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
const char *const cmda[AST_MAX_CMD_LEN]
Definition: cli.h:172
#define AST_MAX_CMD_LEN
Definition: cli.h:48
#define AST_RWLIST_TRAVERSE_SAFE_END
Definition: linkedlists.h:616
static int set_full_cmd(struct ast_cli_entry *e)
Definition: main/cli.c:2046
struct ast_module * module
Definition: cli.h:180
static struct test_val a

◆ __ast_cli_register_multiple()

int __ast_cli_register_multiple ( struct ast_cli_entry e,
int  len,
struct ast_module mod 
)

Definition at line 2497 of file main/cli.c.

References __ast_cli_register(), and len().

2498 {
2499  int i, res = 0;
2500 
2501  for (i = 0; i < len; i++) {
2502  res |= __ast_cli_register(e + i, module);
2503  }
2504 
2505  return res;
2506 }
int __ast_cli_register(struct ast_cli_entry *e, struct ast_module *module)
Definition: main/cli.c:2420
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)

◆ ast_cli()

void ast_cli ( int  fd,
const char *  fmt,
  ... 
)

Definition at line 6 of file clicompat.c.

References ast_register_atexit().

Referenced by __iax2_show_peers(), __say_cli_init(), _iax2_show_peers_one(), _sip_qualify_peer(), _sip_show_peer(), _sip_show_peers(), _sip_show_peers_one(), _skinny_show_device(), _skinny_show_devices(), _skinny_show_line(), _skinny_show_lines(), _stun_show_status(), action_dahdishowchannels(), aeap_cli_show(), aeap_server_show_all(), agent_handle_logoff_cmd(), agent_handle_show_specific(), agent_show_requested(), alias_show(), ao2_container_unregister(), ao2_weakproxy_unsubscribe(), aoc_cli_debug_enable(), ari_mkpasswd(), ari_set_debug(), ari_show(), ari_show_apps(), ari_show_user(), ari_show_users(), ast_acl_output(), ast_cli_command_full(), ast_cli_netstats(), ast_console_toggle_mute(), ast_ha_output(), ast_pbx_hangup_handler_headers(), ast_pbx_hangup_handler_show(), ast_sip_cli_traverse_objects(), bridge_show_specific_print_channel(), cc_cli_output_status(), cc_cli_print_monitor_stats(), channel_set_debug(), cli_console_active(), cli_console_answer(), cli_console_autoanswer(), cli_console_dial(), cli_console_flash(), cli_console_hangup(), cli_console_mute(), cli_console_sendtext(), cli_display_named_acl(), cli_display_named_acl_list(), cli_display_parking_global(), cli_display_parking_lot(), cli_display_parking_lot_list(), cli_fax_set_debug(), cli_fax_show_capabilities(), cli_fax_show_session(), cli_fax_show_sessions(), cli_fax_show_settings(), cli_fax_show_stats(), cli_fax_show_version(), cli_list_available(), cli_list_devices(), cli_list_subscriptions_detail(), cli_list_subscriptions_inout(), cli_match_char_tree(), cli_mute_unmute_helper(), cli_notify(), cli_odbc_read(), cli_odbc_write(), cli_qualify(), cli_realtime_destroy(), cli_realtime_load(), cli_realtime_store(), cli_realtime_update(), cli_realtime_update2(), cli_register(), cli_reload_qualify_aor(), cli_reload_qualify_endpoint(), cli_show_channel(), cli_show_channels(), cli_show_endpoint_identifiers(), cli_show_module_options(), cli_show_module_type(), cli_show_module_types(), cli_show_modules(), cli_show_qualify_aor(), cli_show_qualify_endpoint(), cli_show_settings(), cli_show_subscription_common(), cli_show_subscriptions_detail(), cli_show_subscriptions_inout(), cli_show_tasks(), cli_subsystem_alert_report(), cli_tps_ping(), cli_tps_report(), cli_tps_reset_stats(), cli_tps_reset_stats_all(), cli_unregister(), complete_ari_app(), complete_ari_user(), console_answer(), console_autoanswer(), console_dial(), console_hangup(), console_mute(), console_sendtext(), corosync_show_config(), corosync_show_members(), dahdi_cc_callback(), dahdi_create_channels(), dahdi_destroy_channels(), dahdi_set_dnd(), dahdi_set_hwgain(), dahdi_set_swgain(), dahdi_show_channel(), dahdi_show_channels(), dahdi_show_status(), dahdi_show_version(), dialog_dump_func(), display_entry_list(), display_parked_call(), display_parking_lot(), display_results(), display_single_entry(), do_print(), dump_str_and_free(), dundi_do_lookup(), dundi_do_precache(), dundi_do_query(), dundi_flush(), dundi_set_debug(), dundi_show_cache(), dundi_show_entityid(), dundi_show_hints(), dundi_show_mappings(), dundi_show_peer(), dundi_show_peers(), dundi_show_precache(), dundi_show_requests(), dundi_show_trans(), dundi_store_history(), firmware_show_callback(), gen_events(), group_show_channels(), handle_bridge_kick_channel(), handle_bridge_show_all(), handle_bridge_show_specific(), handle_bridge_technology_show(), handle_bridge_technology_suspend(), handle_cdr_pgsql_status(), handle_chanlist(), handle_cli_agi_add_cmd(), handle_cli_agi_debug(), handle_cli_agi_dump_html(), handle_cli_agi_show(), handle_cli_check_permissions(), handle_cli_confbridge_kick(), handle_cli_confbridge_list(), handle_cli_confbridge_list_item(), handle_cli_confbridge_lock(), handle_cli_confbridge_show_bridge_profile(), handle_cli_confbridge_show_bridge_profiles(), handle_cli_confbridge_show_menu(), handle_cli_confbridge_show_menus(), handle_cli_confbridge_show_user_profile(), handle_cli_confbridge_show_user_profiles(), handle_cli_confbridge_start_record(), handle_cli_confbridge_stop_record(), handle_cli_confbridge_unlock(), handle_cli_config_list(), handle_cli_core_show_channeltype(), handle_cli_core_show_channeltypes(), handle_cli_core_show_config_mappings(), handle_cli_core_show_file_formats(), handle_cli_core_show_translation(), handle_cli_database_del(), handle_cli_database_deltree(), handle_cli_database_get(), handle_cli_database_put(), handle_cli_database_show(), handle_cli_database_showkey(), handle_cli_debug(), handle_cli_devstate_change(), handle_cli_devstate_list(), handle_cli_dialplan_add_extension(), handle_cli_dialplan_add_ignorepat(), handle_cli_dialplan_add_include(), handle_cli_dialplan_reload(), handle_cli_dialplan_remove_context(), handle_cli_dialplan_remove_extension(), handle_cli_dialplan_remove_ignorepat(), handle_cli_dialplan_remove_include(), handle_cli_dialplan_save(), handle_cli_dynamic_level_test(), handle_cli_file_convert(), handle_cli_iax2_provision(), handle_cli_iax2_prune_realtime(), handle_cli_iax2_set_debug(), handle_cli_iax2_set_debug_jb(), handle_cli_iax2_set_debug_trunk(), handle_cli_iax2_set_mtu(), handle_cli_iax2_show_cache(), handle_cli_iax2_show_callno_limits(), handle_cli_iax2_show_channels(), handle_cli_iax2_show_firmware(), handle_cli_iax2_show_netstats(), handle_cli_iax2_show_peer(), handle_cli_iax2_show_registry(), handle_cli_iax2_show_stats(), handle_cli_iax2_show_threads(), handle_cli_iax2_show_users(), handle_cli_iax2_unregister(), handle_cli_indication_show(), handle_cli_keys_show(), handle_cli_locks_show(), handle_cli_malloc_trim(), handle_cli_mixmonitor(), handle_cli_mobile_cusd(), handle_cli_mobile_rfcomm(), handle_cli_mobile_search(), handle_cli_mobile_show_devices(), handle_cli_moh_show_classes(), handle_cli_moh_show_files(), handle_cli_moh_unregister_class(), handle_cli_odbc_show(), handle_cli_ooh323_set_debug(), handle_cli_ooh323_show_config(), handle_cli_ooh323_show_gk(), handle_cli_ooh323_show_peer(), handle_cli_ooh323_show_peers(), handle_cli_ooh323_show_user(), handle_cli_ooh323_show_users(), handle_cli_osp_show(), handle_cli_performance_test(), handle_cli_presencestate_change(), handle_cli_presencestate_list(), handle_cli_queue_test(), handle_cli_realtime_mysql_cache(), handle_cli_realtime_mysql_status(), handle_cli_realtime_pgsql_cache(), handle_cli_realtime_pgsql_status(), handle_cli_recalc(), handle_cli_refresh(), handle_cli_rtcp_set_debug(), handle_cli_rtcp_set_stats(), handle_cli_rtp_set_debug(), handle_cli_rtp_settings(), handle_cli_sched_bench(), handle_cli_show_config(), handle_cli_show_permissions(), handle_cli_sound_show(), handle_cli_sounds_show(), handle_cli_status(), handle_cli_stun_set_debug(), handle_cli_submit(), handle_cli_test_locales(), handle_cli_transcoder_show(), handle_cli_udptl_set_debug(), handle_cli_ulimit(), handle_cli_wait_fullybooted(), handle_commandmatchesarray(), handle_core_set_debug_channel(), handle_core_show_image_formats(), handle_dahdi_show_cadences(), handle_debug_dialplan(), handle_debug_or_trace(), handle_export_primitives(), handle_feature_show(), handle_help(), handle_load(), handle_logger_add_channel(), handle_logger_reload(), handle_logger_remove_channel(), handle_logger_rotate(), handle_logger_set_level(), handle_logger_show_channels(), handle_manager_show_event(), handle_manager_show_events(), handle_manager_show_settings(), handle_mandebug(), handle_mgcp_audit_endpoint(), handle_mgcp_show_endpoints(), handle_minivm_list_templates(), handle_minivm_reload(), handle_minivm_show_settings(), handle_minivm_show_stats(), handle_minivm_show_users(), handle_minivm_show_zones(), handle_modlist(), handle_pjproject_set_log_level(), handle_pjproject_show_buildopts(), handle_pjproject_show_log_level(), handle_pjproject_show_log_mappings(), handle_pjsip_show_version(), handle_queue_add_member(), handle_queue_change_priority_caller(), handle_queue_pause_member(), handle_queue_remove_member(), handle_queue_rule_show(), handle_queue_set_member_penalty(), handle_queue_set_member_ringinuse(), handle_redirect(), handle_reload(), handle_remb_set(), handle_restart_when_convenient(), handle_set_chanvar(), handle_set_extenpatternmatchnew(), handle_set_global(), handle_show_application(), handle_show_applications(), handle_show_calendar(), handle_show_calendars(), handle_show_calendars_types(), handle_show_chanvar(), handle_show_dialplan(), handle_show_function(), handle_show_functions(), handle_show_globals(), handle_show_hangup_channel(), handle_show_hint(), handle_show_hints(), handle_show_http(), handle_show_parking_lot_cmd(), handle_show_profile(), handle_show_settings(), handle_show_switches(), handle_show_sysinfo(), handle_show_threads(), handle_show_translation_path(), handle_show_translation_table(), handle_showcalls(), handle_showchan(), handle_showmanager(), handle_showmanagers(), handle_showmancmd(), handle_showmancmds(), handle_showmanconn(), handle_showmaneventq(), handle_skel_show_config(), handle_skel_show_games(), handle_skel_show_levels(), handle_skinny_show_settings(), handle_softhangup(), handle_stop_when_convenient(), handle_unload(), handle_unset_extenpatternmatchnew(), handle_version(), handle_voicemail_reload(), handle_voicemail_show_aliases(), handle_voicemail_show_users(), handle_voicemail_show_zones(), help1(), help_workhorse(), iax_show_provisioning(), locals_show(), log_forwarder(), manager_show_dialplan(), media_cache_handle_create_item(), media_cache_handle_delete_item(), media_cache_handle_refresh_item(), media_cache_handle_show_all(), media_cache_handle_show_item(), media_cache_prnt_summary(), meetme_show_cmd(), modlist_modentry(), orig_app(), orig_exten(), output_tests(), peer_dump_func(), pjsip_disable_logger(), pjsip_enable_logger_all(), pjsip_enable_logger_host(), pjsip_set_history(), pjsip_set_logger_pcap(), pjsip_set_logger_verbose(), pjsip_show_history(), pktccops_gatedel(), pktccops_gateset(), pktccops_show_cmtses(), pktccops_show_gates(), pktccops_show_pools(), print_app_docs(), print_applicationmap(), print_event_instance(), print_featuregroup(), print_featuregroups(), print_group(), print_named_groups(), print_stats_cb(), print_uptimestr(), prometheus_show_metrics(), prometheus_show_status(), route_list_cb(), rtcp_do_debug_ip(), rtp_do_debug_ip(), show_channels_cb(), show_chanstats_cb(), show_codec(), show_codecs(), show_debug_helper(), show_dialplan_helper(), show_dialplan_helper_extension_output(), show_license(), show_sound_info_cb(), show_sounds_cb(), show_users_cb(), show_users_realtime(), show_warranty(), sip_cli_notify(), sip_do_debug(), sip_do_debug_ip(), sip_do_debug_peer(), sip_prune_realtime(), sip_set_history(), sip_show_channel(), sip_show_channels(), sip_show_channelstats(), sip_show_domains(), sip_show_history(), sip_show_inuse(), sip_show_mwi(), sip_show_objects(), sip_show_registry(), sip_show_sched(), sip_show_settings(), sip_show_tcp(), sip_show_user(), sip_show_users(), sip_unregister(), sla_show_stations(), sla_show_trunks(), sorcery_memory_cache_cli_thrash(), sorcery_memory_cache_dump(), sorcery_memory_cache_expire(), sorcery_memory_cache_populate(), sorcery_memory_cache_print_object(), sorcery_memory_cache_show(), sorcery_memory_cache_stale(), spandsp_fax_cli_show_capabilities(), spandsp_fax_cli_show_session(), spandsp_fax_cli_show_stats(), stasis_app_to_cli(), stasis_show_topic(), stasis_show_topics(), status_debug_verbose(), stir_shaken_certificate_show_all(), stir_shaken_cli_show(), threadstorage_init(), timing_test(), tls_method_to_str(), tps_report_taskprocessor_list_helper(), unistim_do_debug(), unistim_show_devices(), unistim_show_info(), unistim_sp(), xmpp_cli_create_collection(), xmpp_cli_create_leafnode(), xmpp_cli_delete_pubsub_node(), xmpp_cli_list_pubsub_nodes(), xmpp_cli_purge_pubsub_nodes(), xmpp_do_set_debug(), xmpp_show_buddies(), and xmpp_show_clients().

7 {
8 }

◆ ast_cli_allow_at_shutdown()

int ast_cli_allow_at_shutdown ( struct ast_cli_entry e)

Definition at line 3026 of file main/cli.c.

References ast_rwlock_unlock, ast_rwlock_wrlock, AST_VECTOR_APPEND, and shutdown_commands_lock.

Referenced by handle_abort_shutdown(), handle_restart_gracefully(), handle_restart_now(), handle_restart_when_convenient(), handle_stop_gracefully(), handle_stop_now(), and handle_stop_when_convenient().

3027 {
3028  int res;
3029 
3031  res = AST_VECTOR_APPEND(&shutdown_commands, e);
3033 
3034  return res;
3035 }
#define AST_VECTOR_APPEND(vec, elem)
Append an element to a vector, growing the vector if needed.
Definition: vector.h:256
#define ast_rwlock_unlock(a)
Definition: lock.h:232
static ast_rwlock_t shutdown_commands_lock
Definition: main/cli.c:112
#define ast_rwlock_wrlock(a)
Definition: lock.h:234

◆ ast_cli_command_full()

int ast_cli_command_full ( int  uid,
int  gid,
int  fd,
const char *  s 
)

Interprets a command Interpret a command s, sending output to fd if uid:gid has permissions to run this command. uid = CLI_NO_PERMS to avoid checking user permissions gid = CLI_NO_PERMS to avoid checking group permissions.

Parameters
uidUser ID that is trying to run the command.
gidGroup ID that is trying to run the command.
fdpipe
sincoming string
Return values
0on success
-1on failure

Definition at line 2939 of file main/cli.c.

References allowed_on_shutdown(), args, ast_atomic_fetchadd_int(), ast_cli(), ast_free, ast_join, AST_MAX_ARGS, ast_module_running_ref, ast_module_unref, AST_RWLIST_RDLOCK, AST_RWLIST_UNLOCK, ast_shutting_down(), CLI_FAILURE, CLI_HANDLER, cli_has_permissions(), CLI_SHOWUSAGE, CLI_SUCCESS, done, ast_cli_args::fd, find_best(), find_cli(), ast_cli_entry::handler, ast_cli_entry::inuse, ast_cli_entry::module, NULL, parse_args(), RESULT_FAILURE, RESULT_SUCCESS, retval, S_OR, tmp(), and ast_cli_entry::usage.

Referenced by ast_cli_command_multiple_full().

2940 {
2941  const char *args[AST_MAX_ARGS + 1];
2942  struct ast_cli_entry *e = NULL;
2943  int x;
2944  char *duplicate = parse_args(s, &x, args + 1, AST_MAX_ARGS, NULL);
2945  char tmp[AST_MAX_ARGS + 1];
2946  char *retval = CLI_FAILURE;
2947  struct ast_cli_args a = {
2948  .fd = fd, .argc = x, .argv = args+1 };
2949 
2950  if (duplicate == NULL)
2951  return RESULT_FAILURE;
2952 
2953  if (x < 1) /* We need at least one entry, otherwise ignore */
2954  goto done;
2955 
2957  e = find_cli(args + 1, 0);
2958  if (e)
2961  if (e == NULL) {
2962  ast_cli(fd, "No such command '%s' (type 'core show help %s' for other possible commands)\n", s, find_best(args + 1));
2963  goto done;
2964  }
2965 
2966  if (ast_shutting_down() && !allowed_on_shutdown(e)) {
2967  ast_cli(fd, "Command '%s' cannot be run during shutdown\n", s);
2968  goto done;
2969  }
2970 
2971  ast_join(tmp, sizeof(tmp), args + 1);
2972  /* Check if the user has rights to run this command. */
2973  if (!cli_has_permissions(uid, gid, tmp)) {
2974  ast_cli(fd, "You don't have permissions to run '%s' command\n", tmp);
2975  goto done;
2976  }
2977 
2978  /*
2979  * Within the handler, argv[-1] contains a pointer to the ast_cli_entry.
2980  * Remember that the array returned by parse_args is NULL-terminated.
2981  */
2982  args[0] = (char *)e;
2983 
2984  /* If the command is in a module it must be running. */
2985  if (!e->module || ast_module_running_ref(e->module)) {
2986  retval = e->handler(e, CLI_HANDLER, &a);
2988  }
2989 
2990  if (retval == CLI_SHOWUSAGE) {
2991  ast_cli(fd, "%s", S_OR(e->usage, "Invalid usage, but no usage information available.\n"));
2992  } else if (retval == CLI_FAILURE) {
2993  ast_cli(fd, "Command '%s' failed.\n", s);
2994  }
2995 
2996 done:
2997  if (e) {
2998  ast_atomic_fetchadd_int(&e->inuse, -1);
2999  }
3000  ast_free(duplicate);
3001  return retval == CLI_SUCCESS ? RESULT_SUCCESS : RESULT_FAILURE;
3002 }
int ast_shutting_down(void)
Definition: asterisk.c:1834
#define ast_join(s, len, w)
Definition: strings.h:483
descriptor for a cli entry.
Definition: cli.h:171
static int tmp()
Definition: bt_open.c:389
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
Definition: linkedlists.h:150
const char * args
#define NULL
Definition: resample.c:96
void ast_cli(int fd, const char *fmt,...)
Definition: clicompat.c:6
int ast_atomic_fetchadd_int(volatile int *p, int v)
Atomically add v to *p and return the previous value of *p.
Definition: lock.h:755
static int allowed_on_shutdown(struct ast_cli_entry *e)
Definition: main/cli.c:2922
#define ast_module_unref(mod)
Release a reference to the module.
Definition: module.h:469
int done
Definition: test_amihooks.c:48
#define AST_RWLIST_RDLOCK(head)
Read locks a list.
Definition: linkedlists.h:77
int inuse
Definition: cli.h:179
char *(* handler)(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
Definition: cli.h:187
const int fd
Definition: cli.h:159
static struct ast_cli_entry * find_cli(const char *const cmds[], int match_type)
Definition: main/cli.c:2316
static char * parse_args(const char *s, int *argc, const char *argv[], int max, int *trailingwhitespace)
Definition: main/cli.c:2598
#define CLI_SHOWUSAGE
Definition: cli.h:45
#define CLI_FAILURE
Definition: cli.h:46
#define ast_free(a)
Definition: astmm.h:182
#define AST_MAX_ARGS
Definition: cli.h:50
const char * usage
Definition: cli.h:177
#define ast_module_running_ref(mod)
Hold a reference to the module if it is running.
Definition: module.h:455
#define CLI_SUCCESS
Definition: cli.h:44
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
static ENTRY retval
Definition: hsearch.c:50
#define RESULT_SUCCESS
Definition: cli.h:40
static int cli_has_permissions(int uid, int gid, const char *command)
Definition: main/cli.c:183
static char * find_best(const char *argv[])
Definition: main/cli.c:2360
struct ast_module * module
Definition: cli.h:180
#define RESULT_FAILURE
Definition: cli.h:42
static struct test_val a

◆ ast_cli_command_multiple_full()

int ast_cli_command_multiple_full ( int  uid,
int  gid,
int  fd,
size_t  size,
const char *  s 
)

Executes multiple CLI commands Interpret strings separated by NULL and execute each one, sending output to fd if uid has permissions, uid = CLI_NO_PERMS to avoid checking users permissions. gid = CLI_NO_PERMS to avoid checking group permissions.

Parameters
uidUser ID that is trying to run the command.
gidGroup ID that is trying to run the command.
fdpipe
sizeis the total size of the string
sincoming string
Return values
numberof commands executed

Definition at line 3004 of file main/cli.c.

References ast_cli_command_full().

Referenced by netconsole().

3005 {
3006  char cmd[512];
3007  int x, y = 0, count = 0;
3008 
3009  for (x = 0; x < size; x++) {
3010  cmd[y] = s[x];
3011  y++;
3012  if (s[x] == '\0') {
3013  ast_cli_command_full(uid, gid, fd, cmd);
3014  y = 0;
3015  count++;
3016  }
3017  }
3018  return count;
3019 }
const int fd
Definition: cli.h:159
int ast_cli_command_full(int uid, int gid, int fd, const char *s)
Interprets a command Interpret a command s, sending output to fd if uid:gid has permissions to run th...
Definition: main/cli.c:2939

◆ ast_cli_complete()

char* ast_cli_complete ( const char *  word,
const char *const  choices[],
int  pos 
)

Helper function to generate cli entries from a NULL-terminated array. Returns the n-th matching entry from the array, or NULL if not found. Can be used to implement generate() for static entries as below (in this example we complete the word in position 2):

char *my_generate(const char *line, const char *word, int pos, int n)
{
static const char * const choices[] = { "one", "two", "three", NULL };
if (pos == 2)
return ast_cli_complete(word, choices, n);
else
return NULL;
}

Definition at line 1811 of file main/cli.c.

References ast_cli_completion_add(), ast_strdup, ast_strlen_zero(), len(), and NULL.

Referenced by cli_odbc_read(), cli_odbc_write(), complete_skinny_reset(), complete_skinny_show_line(), handle_bridge_kick_channel(), handle_cli_core_show_translation(), handle_cli_devstate_change(), handle_cli_iax2_prune_realtime(), handle_cli_presencestate_change(), handle_cli_rtcp_set_stats(), handle_core_set_debug_channel(), handle_orig(), handle_showcalls(), handle_softhangup(), sip_prune_realtime(), sip_qualify_peer(), sip_show_peer(), sip_show_user(), and sorcery_memory_cache_stale().

1812 {
1813  int i, which = 0, len;
1814  len = ast_strlen_zero(word) ? 0 : strlen(word);
1815 
1816  for (i = 0; choices[i]; i++) {
1817  if ((!len || !strncasecmp(word, choices[i], len)) && ++which > state) {
1818  if (state != -1) {
1819  return ast_strdup(choices[i]);
1820  }
1821 
1822  if (ast_cli_completion_add(ast_strdup(choices[i]))) {
1823  return NULL;
1824  }
1825  }
1826  }
1827  return NULL;
1828 }
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:243
#define NULL
Definition: resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
short word
int ast_cli_completion_add(char *value)
Add a result to a request for completion options.
Definition: main/cli.c:2726

◆ ast_cli_completion_add()

int ast_cli_completion_add ( char *  value)

Add a result to a request for completion options.

Parameters
valueA completion option text.
Return values
0Success
-1Failure

This is an alternative to returning individual values from CLI_GENERATE. Instead of repeatedly being asked for the next match and having to start over, you can call this function repeatedly from your own stateful loop. When all matches have been added you can return NULL from the CLI_GENERATE function.

Note
This function always eventually results in calling ast_free on value.

Definition at line 2726 of file main/cli.c.

References ast_threadstorage_get_ptr(), and cli_completion_vector_add().

Referenced by aeap_tab_complete_name(), ao2_container_unregister(), ast_cli_complete(), ast_complete_applications(), ast_complete_channels(), category_complete(), cli_complete_endpoint(), cli_complete_show(), cli_complete_uri(), complete_bridge_live_search(), complete_bridge_participant(), complete_bridge_technology(), complete_channeltypes(), complete_config_module(), complete_config_option(), complete_config_type(), complete_core_id(), complete_country(), complete_indications(), complete_show_sorcery_object(), complete_trans_path_choice(), handle_cli_config_reload(), handle_cli_rtcp_set_stats(), handle_cli_sound_show(), handle_debug_category(), handle_manager_show_event(), handle_show_named_acl_cmd(), handle_showmanager(), handle_showmancmd(), module_load_helper_on_file(), stir_shaken_tab_complete_name(), topic_complete_name(), and tps_taskprocessor_tab_complete().

2727 {
2728  return cli_completion_vector_add(ast_threadstorage_get_ptr(&completion_storage), value);
2729 }
static int cli_completion_vector_add(struct ast_vector_string *vec, char *value)
Definition: main/cli.c:2705
int value
Definition: syslog.c:37
void * ast_threadstorage_get_ptr(struct ast_threadstorage *ts)
Retrieve a raw pointer from threadstorage.

◆ ast_cli_completion_matches()

char** ast_cli_completion_matches ( const char *  ,
const char *   
)

Generates a NULL-terminated array of strings that 1) begin with the string in the second parameter, and 2) are valid in a command after the string in the first parameter.

The first entry (offset 0) of the result is the longest common substring in the results, useful to extend the string that has been completed. Subsequent entries are all possible values, followed by a NULL. All strings and the array itself are malloc'ed and must be freed by the caller.

Warning
This function cannot be called recursively so it will always fail if called from a CLI_GENERATE callback.

Definition at line 2670 of file main/cli.c.

References ast_cli_completion_vector(), ast_free, AST_THREADSTORAGE_RAW(), AST_VECTOR_APPEND, AST_VECTOR_CALLBACK_VOID, AST_VECTOR_PTR_FREE, AST_VECTOR_STEAL_ELEMENTS, and NULL.

Referenced by handle_commandmatchesarray().

2671 {
2672  struct ast_vector_string *vec = ast_cli_completion_vector(text, word);
2673  char **match_list;
2674 
2675  if (!vec) {
2676  return NULL;
2677  }
2678 
2679  if (AST_VECTOR_APPEND(vec, NULL)) {
2680  /* We failed to NULL terminate the elements */
2682  AST_VECTOR_PTR_FREE(vec);
2683 
2684  return NULL;
2685  }
2686 
2687  match_list = AST_VECTOR_STEAL_ELEMENTS(vec);
2688  AST_VECTOR_PTR_FREE(vec);
2689 
2690  return match_list;
2691 }
#define AST_VECTOR_APPEND(vec, elem)
Append an element to a vector, growing the vector if needed.
Definition: vector.h:256
char * text
Definition: app_queue.c:1514
#define NULL
Definition: resample.c:96
#define AST_VECTOR_STEAL_ELEMENTS(vec)
Steal the elements from a vector and reinitialize.
Definition: vector.h:140
struct ast_vector_string * ast_cli_completion_vector(const char *text, const char *word)
Generates a vector of strings for CLI completion.
Definition: main/cli.c:2731
#define ast_free(a)
Definition: astmm.h:182
#define AST_VECTOR_PTR_FREE(vec)
Deallocates this vector pointer.
Definition: vector.h:189
#define AST_VECTOR_CALLBACK_VOID(vec, callback,...)
Execute a callback on every element in a vector disregarding callback return.
Definition: vector.h:865
short word

◆ ast_cli_completion_vector()

struct ast_vector_string* ast_cli_completion_vector ( const char *  text,
const char *  word 
)

Generates a vector of strings for CLI completion.

Parameters
textComplete input being matched.
wordCurrent word being matched

The results contain strings that both: 1) Begin with the string in word. 2) Are valid in a command after the string in text.

The first entry (offset 0) of the result is the longest common substring in the results, useful to extend the string that has been completed. Subsequent entries are all possible values.

Note
All strings and the vector itself are malloc'ed and must be freed by the caller.
The vector is sorted and does not contain any duplicates.
Warning
This function cannot be called recursively so it will always fail if called from a CLI_GENERATE callback.

Definition at line 2731 of file main/cli.c.

References ast_assert, ast_calloc, ast_cli_generator(), ast_free, ast_log, ast_strndup, ast_threadstorage_get_ptr(), ast_threadstorage_set_ptr(), AST_VECTOR_CALLBACK_VOID, AST_VECTOR_GET, AST_VECTOR_INSERT_AT, AST_VECTOR_PTR_FREE, AST_VECTOR_REMOVE, AST_VECTOR_SIZE, cli_completion_vector_add(), LOG_ERROR, and NULL.

Referenced by ast_cli_completion_matches(), AST_TEST_DEFINE(), and cli_complete().

2732 {
2733  char *retstr, *prevstr;
2734  size_t max_equal;
2735  size_t which = 0;
2736  struct ast_vector_string *vec = ast_calloc(1, sizeof(*vec));
2737 
2738  /* Recursion into this function is a coding error. */
2739  ast_assert(!ast_threadstorage_get_ptr(&completion_storage));
2740 
2741  if (!vec) {
2742  return NULL;
2743  }
2744 
2745  if (ast_threadstorage_set_ptr(&completion_storage, vec)) {
2746  ast_log(LOG_ERROR, "Failed to initialize threadstorage for completion.\n");
2747  ast_free(vec);
2748 
2749  return NULL;
2750  }
2751 
2752  while ((retstr = ast_cli_generator(text, word, which)) != NULL) {
2753  if (cli_completion_vector_add(vec, retstr)) {
2754  ast_threadstorage_set_ptr(&completion_storage, NULL);
2755 
2756  goto vector_cleanup;
2757  }
2758 
2759  ++which;
2760  }
2761 
2762  ast_threadstorage_set_ptr(&completion_storage, NULL);
2763 
2764  if (!AST_VECTOR_SIZE(vec)) {
2765  AST_VECTOR_PTR_FREE(vec);
2766 
2767  return NULL;
2768  }
2769 
2770  prevstr = AST_VECTOR_GET(vec, 0);
2771  max_equal = strlen(prevstr);
2772  which = 1;
2773 
2774  /* Find the longest substring that is common to all results
2775  * (it is a candidate for completion), and store a copy in entry 0.
2776  */
2777  while (which < AST_VECTOR_SIZE(vec)) {
2778  size_t i = 0;
2779 
2780  retstr = AST_VECTOR_GET(vec, which);
2781  /* Check for and remove duplicate strings. */
2782  if (!strcasecmp(prevstr, retstr)) {
2783  AST_VECTOR_REMOVE(vec, which, 1);
2784  ast_free(retstr);
2785 
2786  continue;
2787  }
2788 
2789  while (i < max_equal && toupper(prevstr[i]) == toupper(retstr[i])) {
2790  i++;
2791  }
2792 
2793  max_equal = i;
2794  prevstr = retstr;
2795  ++which;
2796  }
2797 
2798  /* Insert longest match to position 0. */
2799  retstr = ast_strndup(AST_VECTOR_GET(vec, 0), max_equal);
2800  if (!retstr || AST_VECTOR_INSERT_AT(vec, 0, retstr)) {
2801  ast_free(retstr);
2802 
2803  goto vector_cleanup;
2804  }
2805 
2806  return vec;
2807 
2808 vector_cleanup:
2810  AST_VECTOR_PTR_FREE(vec);
2811 
2812  return NULL;
2813 }
char * ast_cli_generator(const char *text, const char *word, int state)
Readline madness Useful for readline, that&#39;s about it.
Definition: main/cli.c:2917
static int cli_completion_vector_add(struct ast_vector_string *vec, char *value)
Definition: main/cli.c:2705
#define ast_assert(a)
Definition: utils.h:710
char * text
Definition: app_queue.c:1514
#define NULL
Definition: resample.c:96
#define ast_log
Definition: astobj2.c:42
int ast_threadstorage_set_ptr(struct ast_threadstorage *ts, void *ptr)
Set a raw pointer from threadstorage.
#define LOG_ERROR
Definition: logger.h:285
#define ast_strndup(str, len)
A wrapper for strndup()
Definition: astmm.h:258
#define ast_free(a)
Definition: astmm.h:182
#define ast_calloc(num, len)
A wrapper for calloc()
Definition: astmm.h:204
void * ast_threadstorage_get_ptr(struct ast_threadstorage *ts)
Retrieve a raw pointer from threadstorage.
#define AST_VECTOR_PTR_FREE(vec)
Deallocates this vector pointer.
Definition: vector.h:189
#define AST_VECTOR_GET(vec, idx)
Get an element from a vector.
Definition: vector.h:682
#define AST_VECTOR_INSERT_AT(vec, idx, elem)
Insert an element at a specific position in a vector, growing the vector if needed.
Definition: vector.h:338
#define AST_VECTOR_REMOVE(vec, idx, preserve_ordered)
Remove an element from a vector by index.
Definition: vector.h:412
#define AST_VECTOR_SIZE(vec)
Get the number of elements in a vector.
Definition: vector.h:611
#define AST_VECTOR_CALLBACK_VOID(vec, callback,...)
Execute a callback on every element in a vector disregarding callback return.
Definition: vector.h:865
short word

◆ ast_cli_generator()

char* ast_cli_generator ( const char *  ,
const char *  ,
int   
)

Readline madness Useful for readline, that's about it.

Return values
0on success
-1on failure

Only call this function to proxy the CLI generator to another.

Definition at line 2917 of file main/cli.c.

References __ast_cli_generator().

Referenced by ast_cli_completion_vector(), cli_alias_passthrough(), and handle_cli_check_permissions().

2918 {
2919  return __ast_cli_generator(text, word, state, 1);
2920 }
char * text
Definition: app_queue.c:1514
static char * __ast_cli_generator(const char *text, const char *word, int state, int lock)
Definition: main/cli.c:2829
short word

◆ ast_cli_print_timestr_fromseconds()

void ast_cli_print_timestr_fromseconds ( int  fd,
int  seconds,
const char *  prefix 
)

Print on cli a duration in seconds in format s year(s), s week(s), s day(s), s hour(s), s second(s)

Since
13.8
Parameters
ast_cli_argsfd to print by ast_cli
durationThe time (in seconds) to print
prefixA Prefix string to add before of duration formatted

Definition at line 3021 of file main/cli.c.

References ast_tv(), and print_uptimestr().

Referenced by handle_cdr_pgsql_status(), handle_cli_realtime_pgsql_status(), and realtime_ldap_status().

3022 {
3023  print_uptimestr(fd, ast_tv(seconds, 0), prefix, 0);
3024 }
static void print_uptimestr(int fd, struct timeval timeval, const char *prefix, int printsec)
Definition: main/cli.c:876
struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec)
Returns a timeval from sec, usec.
Definition: time.h:226
static char prefix[MAX_PREFIX]
Definition: http.c:141

◆ ast_cli_unregister()

int ast_cli_unregister ( struct ast_cli_entry e)

Unregisters a command or an array of commands.

Parameters
ewhich cli entry to unregister Unregister your own command. You must pass a completed ast_cli_entry structure
Returns
0

Definition at line 2397 of file main/cli.c.

References ast_cli_entry::_full_cmd, ast_free, ast_log, AST_RWLIST_REMOVE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_cli_entry::cmda, ast_cli_entry::command, ast_cli_entry::handler, ast_cli_entry::inuse, cli_perm::list, LOG_WARNING, NULL, remove_shutdown_command(), and ast_cli_entry::usage.

Referenced by aco_deinit(), alias_unregister_cb(), ast_cli_unregister_multiple(), unload_module(), and xmldoc_unload_documentation().

2398 {
2399  if (e->inuse) {
2400  ast_log(LOG_WARNING, "Can't remove command that is in use\n");
2401  } else {
2403  AST_RWLIST_REMOVE(&helpers, e, list);
2406  ast_free(e->_full_cmd);
2407  e->_full_cmd = NULL;
2408  if (e->handler) {
2409  /* this is a new-style entry. Reset fields and free memory. */
2410  char *cmda = (char *) e->cmda;
2411  memset(cmda, '\0', sizeof(e->cmda));
2412  ast_free(e->command);
2413  e->command = NULL;
2414  e->usage = NULL;
2415  }
2416  }
2417  return 0;
2418 }
char * _full_cmd
Definition: cli.h:181
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
Definition: linkedlists.h:51
#define LOG_WARNING
Definition: logger.h:274
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
Definition: linkedlists.h:150
#define NULL
Definition: resample.c:96
#define ast_log
Definition: astobj2.c:42
int inuse
Definition: cli.h:179
char *(* handler)(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
Definition: cli.h:187
static void remove_shutdown_command(struct ast_cli_entry *e)
Definition: main/cli.c:2390
#define ast_free(a)
Definition: astmm.h:182
char * command
Definition: cli.h:186
const char * usage
Definition: cli.h:177
#define AST_RWLIST_REMOVE
Definition: linkedlists.h:884
const char *const cmda[AST_MAX_CMD_LEN]
Definition: cli.h:172

◆ ast_cli_unregister_multiple()

int ast_cli_unregister_multiple ( struct ast_cli_entry e,
int  len 
)

◆ ast_complete_channels()

char* ast_complete_channels ( const char *  line,
const char *  word,
int  pos,
int  state,
int  rpos 
)

Command completion for the list of active channels.

This can be called from a CLI command completion function that wants to complete from the list of active channels. 'rpos' is the required position in the command. This function will return NULL immediately if 'rpos' is not the same as the current position, 'pos'.

Definition at line 1830 of file main/cli.c.

References ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_ref, ast_channel_cache_all(), ast_cli_completion_add(), ast_strdup, ast_channel_snapshot::base, ast_channel_snapshot_base::name, NULL, and state.

Referenced by handle_cli_agi_add_cmd(), handle_cli_mixmonitor(), handle_core_set_debug_channel(), handle_redirect(), handle_remb_set(), handle_set_chanvar(), handle_show_chanvar(), handle_show_hangup_channel(), handle_showchan(), and handle_softhangup().

1831 {
1832  int wordlen = strlen(word), which = 0;
1833  struct ao2_container *cached_channels;
1834  char *ret = NULL;
1835  struct ao2_iterator iter;
1836  struct ast_channel_snapshot *snapshot;
1837 
1838  if (pos != rpos) {
1839  return NULL;
1840  }
1841 
1842  cached_channels = ast_channel_cache_all();
1843 
1844  iter = ao2_iterator_init(cached_channels, 0);
1845  for (; (snapshot = ao2_iterator_next(&iter)); ao2_ref(snapshot, -1)) {
1846  if (!strncasecmp(word, snapshot->base->name, wordlen) && (++which > state)) {
1847  if (state != -1) {
1848  ret = ast_strdup(snapshot->base->name);
1849  ao2_ref(snapshot, -1);
1850  break;
1851  }
1852 
1853  if (ast_cli_completion_add(ast_strdup(snapshot->base->name))) {
1854  ao2_ref(snapshot, -1);
1855  break;
1856  }
1857  }
1858  }
1859  ao2_iterator_destroy(&iter);
1860  ao2_ref(cached_channels, -1);
1861 
1862  return ret;
1863 }
enum sip_cc_notify_state state
Definition: chan_sip.c:963
struct ast_channel_snapshot_base * base
Structure representing a snapshot of channel state.
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:243
#define NULL
Definition: resample.c:96
#define ao2_ref(o, delta)
Definition: astobj2.h:464
struct ao2_container * ast_channel_cache_all(void)
#define ao2_iterator_next(iter)
Definition: astobj2.h:1933
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
Definition: astobj2.h:1841
Generic container type.
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.
const ast_string_field name
short word
int ast_cli_completion_add(char *value)
Add a result to a request for completion options.
Definition: main/cli.c:2726