diff --git a/channels/chan_h323.c b/channels/chan_h323.c index b07400541421c752abf3cc5af98455eae4ce450b..06c9b9d3a5a5bda995848cd9f8e906001d84623b 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -2611,17 +2611,17 @@ static int restart_monitor(void) static int h323_do_trace(int fd, int argc, char *argv[]) { - if (argc != 3) { + if (argc != 4) { return RESULT_SHOWUSAGE; } - h323_debug(1, atoi(argv[2])); + h323_debug(1, atoi(argv[3])); ast_cli(fd, "H.323 trace set to level %s\n", argv[2]); return RESULT_SUCCESS; } static int h323_no_trace(int fd, int argc, char *argv[]) { - if (argc != 3) { + if (argc < 3 || argc > 4) { return RESULT_SHOWUSAGE; } h323_debug(0,0); @@ -2631,7 +2631,7 @@ static int h323_no_trace(int fd, int argc, char *argv[]) static int h323_do_debug(int fd, int argc, char *argv[]) { - if (argc != 2) { + if (argc < 2 || argc > 3) { return RESULT_SHOWUSAGE; } h323debug = 1; @@ -2641,7 +2641,7 @@ static int h323_do_debug(int fd, int argc, char *argv[]) static int h323_no_debug(int fd, int argc, char *argv[]) { - if (argc != 3) { + if (argc < 3 || argc > 4) { return RESULT_SHOWUSAGE; } h323debug = 0; @@ -2725,7 +2725,7 @@ static struct ast_cli_entry cli_h323_trace_deprecated = trace_usage }; static struct ast_cli_entry cli_h323_no_trace_deprecated = - { { "h.323", "no", "trace", NULL }, + { "h.323", "no", "trace", NULL }, h323_no_trace, "Disable H.323 Stack Tracing", no_trace_usage }; }; @@ -2736,7 +2736,7 @@ static struct ast_cli_entry cli_h323_debug_deprecated = debug_usage }; static struct ast_cli_entry cli_h323_no_debug_deprecated = - { { "h.323", "no", "debug", NULL }, + { "h.323", "no", "debug", NULL }, h323_no_debug, "Disable H.323 debug", no_debug_usage }; }; @@ -2756,20 +2756,35 @@ static struct ast_cli_entry cli_h323_show_tokens_deprecated = h323_tokens_show, "Show all active call tokens", show_tokens_usage }; +static struct ast_cli_entry cli_h323_debug_deprecated = { + { "h.323", "debug", NULL }, + h323_do_debug, "Enable H.323 debug", + debug_usage }; + +static struct ast_cli_entry cli_h323_trace_deprecated = { + { "h.323", "trace", NULL }, + h323_do_trace, "Enable H.323 Stack Tracing", + trace_usage }; + +static struct ast_cli_entry cli_h323_gk_cycle_deprecated = { + { "h323", "cycle", "gk", NULL }, + h323_gk_cycle, "Manually re-register with the Gatekeper", + show_cycle_usage }; + static struct ast_cli_entry cli_h323[] = { - { { "h323", "trace", NULL }, + { { "h323", "set", "trace", NULL }, h323_do_trace, "Enable H.323 Stack Tracing", trace_usage, NULL, &cli_h323_trace_deprecated }, - { { "h323", "trace", "off", NULL }, + { { "h323", "set", "trace", "off", NULL }, h323_no_trace, "Disable H.323 Stack Tracing", no_trace_usage, NULL, &cli_h323_no_trace_deprecated }, - { { "h323", "debug", NULL }, + { { "h323", "set", "debug", NULL }, h323_do_debug, "Enable H.323 debug", debug_usage, NULL, &cli_h323_debug_deprecated }, - { { "h323", "debug", "off", NULL }, + { { "h323", "set", "debug", "off", NULL }, h323_no_debug, "Disable H.323 debug", no_debug_usage, NULL, &cli_h323_no_debug_deprecated }, diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index d3ce281f998a7eafd00560a495f1006c8d13e3ee..c8f185e72cf8344bb018e047fc5219df6bb69c24 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -4449,7 +4449,7 @@ static int iax2_show_netstats(int fd, int argc, char *argv[]) static int iax2_do_debug(int fd, int argc, char *argv[]) { - if (argc != 2) + if (argc < 2 || argc > 3) return RESULT_SHOWUSAGE; iaxdebug = 1; ast_cli(fd, "IAX2 Debugging Enabled\n"); @@ -4458,7 +4458,7 @@ static int iax2_do_debug(int fd, int argc, char *argv[]) static int iax2_do_trunk_debug(int fd, int argc, char *argv[]) { - if (argc != 3) + if (argc < 3 || argc > 4) return RESULT_SHOWUSAGE; iaxtrunkdebug = 1; ast_cli(fd, "IAX2 Trunk Debug Requested\n"); @@ -4467,7 +4467,7 @@ static int iax2_do_trunk_debug(int fd, int argc, char *argv[]) static int iax2_do_jb_debug(int fd, int argc, char *argv[]) { - if (argc != 3) + if (argc < 3 || argc > 4) return RESULT_SHOWUSAGE; jb_setoutput(jb_error_output, jb_warning_output, jb_debug_output); ast_cli(fd, "IAX2 Jitterbuffer Debugging Enabled\n"); @@ -4476,7 +4476,7 @@ static int iax2_do_jb_debug(int fd, int argc, char *argv[]) static int iax2_no_debug(int fd, int argc, char *argv[]) { - if (argc != 3) + if (argc < 3 || argc > 4) return RESULT_SHOWUSAGE; iaxdebug = 0; ast_cli(fd, "IAX2 Debugging Disabled\n"); @@ -4485,7 +4485,7 @@ static int iax2_no_debug(int fd, int argc, char *argv[]) static int iax2_no_trunk_debug(int fd, int argc, char *argv[]) { - if (argc != 4) + if (argc < 4 || argc > 5) return RESULT_SHOWUSAGE; iaxtrunkdebug = 0; ast_cli(fd, "IAX2 Trunk Debugging Disabled\n"); @@ -4494,7 +4494,7 @@ static int iax2_no_trunk_debug(int fd, int argc, char *argv[]) static int iax2_no_jb_debug(int fd, int argc, char *argv[]) { - if (argc != 4) + if (argc < 4 || argc > 5) return RESULT_SHOWUSAGE; iaxtrunkdebug = 0; ast_cli(fd, "IAX2 Trunk Debugging Disabled\n"); @@ -9699,27 +9699,27 @@ static char show_reg_usage[] = " Lists all registration requests and status.\n"; static char debug_usage[] = -"Usage: iax2 debug\n" +"Usage: iax2 set debug\n" " Enables dumping of IAX packets for debugging purposes\n"; static char no_debug_usage[] = -"Usage: iax2 nodebug\n" +"Usage: iax2 set debug off\n" " Disables dumping of IAX packets for debugging purposes\n"; static char debug_trunk_usage[] = -"Usage: iax2 debug trunk\n" +"Usage: iax2 set debug trunk\n" " Requests current status of IAX trunking\n"; static char no_debug_trunk_usage[] = -"Usage: iax2 nodebug trunk\n" +"Usage: iax2 set debug trunk off\n" " Requests current status of IAX trunking\n"; static char debug_jb_usage[] = -"Usage: iax2 debug jb\n" +"Usage: iax2 set debug jb\n" " Enables jitterbuffer debugging information\n"; static char no_debug_jb_usage[] = -"Usage: iax2 nodebug jb\n" +"Usage: iax2 set debug jb off\n" " Disables jitterbuffer debugging information\n"; static char iax2_test_losspct_usage[] = @@ -9793,27 +9793,27 @@ static struct ast_cli_entry cli_iax2[] = { iax2_show_peer, "Show details on specific IAX peer", show_peer_usage, complete_iax2_show_peer }, - { { "iax2", "debug", NULL }, + { { "iax2", "set", "debug", NULL }, iax2_do_debug, "Enable IAX debugging", debug_usage }, - { { "iax2", "debug", "trunk", NULL }, + { { "iax2", "set", "debug", "trunk", NULL }, iax2_do_trunk_debug, "Enable IAX trunk debugging", debug_trunk_usage }, - { { "iax2", "debug", "jb", NULL }, + { { "iax2", "set", "debug", "jb", NULL }, iax2_do_jb_debug, "Enable IAX jitterbuffer debugging", debug_jb_usage }, - { { "iax2", "debug", "off", NULL }, + { { "iax2", "set", "debug", "off", NULL }, iax2_no_debug, "Disable IAX debugging", no_debug_usage }, - { { "iax2", "debug", "trunk", "off", NULL }, + { { "iax2", "set", "debug", "trunk", "off", NULL }, iax2_no_trunk_debug, "Disable IAX trunk debugging", no_debug_trunk_usage }, - { { "iax2", "debug", "jb", "off", NULL }, + { { "iax2", "set", "debug", "jb", "off", NULL }, iax2_no_jb_debug, "Disable IAX jitterbuffer debugging", no_debug_jb_usage }, diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index 2e8011acc688bb2dcd54d0acac5197f11f907dc3..f798bbd06e59a47e4d229de95a920bc575254084 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -1054,11 +1054,11 @@ static char audit_endpoint_usage[] = " mgcp debug MUST be on to see the results of this command.\n"; static char debug_usage[] = -"Usage: mgcp debug\n" +"Usage: mgcp set debug\n" " Enables dumping of MGCP packets for debugging purposes\n"; static char no_debug_usage[] = -"Usage: mgcp debug off\n" +"Usage: mgcp set debug off\n" " Disables dumping of MGCP packets for debugging purposes\n"; static char mgcp_reload_usage[] = @@ -1121,7 +1121,7 @@ static int mgcp_audit_endpoint(int fd, int argc, char *argv[]) static int mgcp_do_debug(int fd, int argc, char *argv[]) { - if (argc != 2) + if (argc != 3) return RESULT_SHOWUSAGE; mgcpdebug = 1; ast_cli(fd, "MGCP Debugging Enabled\n"); @@ -1130,7 +1130,7 @@ static int mgcp_do_debug(int fd, int argc, char *argv[]) static int mgcp_no_debug(int fd, int argc, char *argv[]) { - if (argc != 3) + if (argc != 4) return RESULT_SHOWUSAGE; mgcpdebug = 0; ast_cli(fd, "MGCP Debugging Disabled\n"); @@ -1146,11 +1146,11 @@ static struct ast_cli_entry cli_mgcp[] = { mgcp_show_endpoints, "List defined MGCP endpoints", show_endpoints_usage }, - { { "mgcp", "debug", NULL }, + { { "mgcp", "set", "debug", NULL }, mgcp_do_debug, "Enable MGCP debugging", debug_usage }, - { { "mgcp", "debug", "off", NULL }, + { { "mgcp", "set", "debug", "off", NULL }, mgcp_no_debug, "Disable MGCP debugging", no_debug_usage }, diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 818673ee5fbb24ae0c896232ca0094b34ba7729b..cb45e76522e3046d5c3af04a554402673e4731f4 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -10859,9 +10859,10 @@ static int sip_do_debug_ip(int fd, int argc, char *argv[]) int port = 0; char *p, *arg; - if (argc != 4) + /* sip set debug ip <ip> */ + if (argc != 5) return RESULT_SHOWUSAGE; - p = arg = argv[3]; + p = arg = argv[4]; strsep(&p, ":"); if (p) port = atoi(p); @@ -10886,9 +10887,9 @@ static int sip_do_debug_ip(int fd, int argc, char *argv[]) static int sip_do_debug_peer(int fd, int argc, char *argv[]) { struct sip_peer *peer; - if (argc != 4) + if (argc != 5) return RESULT_SHOWUSAGE; - peer = find_peer(argv[3], NULL, 1); + peer = find_peer(argv[4], NULL, 1); if (peer) { if (peer->addr.sin_addr.s_addr) { debugaddr.sin_family = AF_INET; @@ -10897,10 +10898,10 @@ static int sip_do_debug_peer(int fd, int argc, char *argv[]) ast_cli(fd, "SIP Debugging Enabled for IP: %s:%d\n", ast_inet_ntoa(debugaddr.sin_addr), ntohs(debugaddr.sin_port)); ast_set_flag(&global_flags[1], SIP_PAGE2_DEBUG_CONSOLE); } else - ast_cli(fd, "Unable to get IP address of peer '%s'\n", argv[3]); + ast_cli(fd, "Unable to get IP address of peer '%s'\n", argv[4]); unref_peer(peer); } else - ast_cli(fd, "No such peer '%s'\n", argv[3]); + ast_cli(fd, "No such peer '%s'\n", argv[4]); return RESULT_SUCCESS; } @@ -10908,12 +10909,12 @@ static int sip_do_debug_peer(int fd, int argc, char *argv[]) static int sip_do_debug(int fd, int argc, char *argv[]) { int oldsipdebug = sipdebug_console; - if (argc != 2) { - if (argc != 4) + if (argc != 4) { + if (argc != 5) return RESULT_SHOWUSAGE; - else if (strcmp(argv[2], "ip") == 0) + else if (strcmp(argv[3], "ip") == 0) return sip_do_debug_ip(fd, argc, argv); - else if (strcmp(argv[2], "peer") == 0) + else if (strcmp(argv[3], "peer") == 0) return sip_do_debug_peer(fd, argc, argv); else return RESULT_SHOWUSAGE; @@ -10983,7 +10984,7 @@ static int sip_notify(int fd, int argc, char *argv[]) /*! \brief Disable SIP Debugging in CLI */ static int sip_no_debug(int fd, int argc, char *argv[]) { - if (argc != 3) + if (argc != 4) return RESULT_SHOWUSAGE; ast_clear_flag(&global_flags[1], SIP_PAGE2_DEBUG_CONSOLE); ast_cli(fd, "SIP Debugging Disabled\n"); @@ -11284,8 +11285,7 @@ static char history_usage[] = static char sip_reload_usage[] = "Usage: sip reload\n" -" Reloads SIP configuration from sip.conf\n" -" Deprecated: please use 'reload chan_sip.so'\n"; +" Reloads SIP configuration from sip.conf\n"; static char show_subscriptions_usage[] = "Usage: sip show subscriptions\n" @@ -17006,12 +17006,6 @@ static int sip_do_reload(enum channelreloadreason reason) /*! \brief Force reload of module from cli */ static int sip_reload(int fd, int argc, char *argv[]) { - static int deprecated = 0; - if (!deprecated && argc > 0) { - ast_log(LOG_WARNING, "\"sip reload\" is deprecated. Please use 'reload chan_sip.so' instead.\n"); - deprecated = 1; - } - ast_mutex_lock(&sip_reload_lock); if (sip_reloading) ast_verbose("Previous SIP reload not yet done\n"); @@ -17104,19 +17098,19 @@ static struct ast_cli_entry cli_sip[] = { sip_prune_realtime, "Prune cached Realtime user(s)", prune_realtime_usage, complete_sip_prune_realtime_user }, - { { "sip", "debug", NULL }, + { { "sip", "set", "debug", NULL }, sip_do_debug, "Enable SIP debugging", debug_usage }, - { { "sip", "debug", "ip", NULL }, + { { "sip", "set", "debug", "ip", NULL }, sip_do_debug, "Enable SIP debugging on IP", debug_usage }, - { { "sip", "debug", "peer", NULL }, + { { "sip", "set", "debug", "peer", NULL }, sip_do_debug, "Enable SIP debugging on Peername", debug_usage, complete_sip_debug_peer }, - { { "sip", "debug", "off", NULL }, + { { "sip", "set", "debug", "off", NULL }, sip_no_debug, "Disable SIP debugging", no_debug_usage }, diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index b5225c0856386c890000bd11067f8fbbe4a71fed..951d9b8a309033905054dbea1d97b25a4ac14fe0 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -1759,7 +1759,7 @@ static int skinny_do_debug(int fd, int argc, char *argv[]) static int skinny_no_debug(int fd, int argc, char *argv[]) { - if (argc != 3) { + if (argc != 4) { return RESULT_SHOWUSAGE; } skinnydebug = 0; @@ -1956,11 +1956,11 @@ static char show_lines_usage[] = " Lists all lines known to the Skinny subsystem.\n"; static char debug_usage[] = -"Usage: skinny debug\n" +"Usage: skinny set debug\n" " Enables dumping of Skinny packets for debugging purposes\n"; static char no_debug_usage[] = -"Usage: skinny no debug\n" +"Usage: skinny set debug off\n" " Disables dumping of Skinny packets for debugging purposes\n"; static char reset_usage[] = @@ -1976,11 +1976,11 @@ static struct ast_cli_entry cli_skinny[] = { skinny_show_lines, "List defined Skinny lines per device", show_lines_usage }, - { { "skinny", "debug", NULL }, + { { "skinny", "set", "debug", NULL }, skinny_do_debug, "Enable Skinny debugging", debug_usage }, - { { "skinny", "debug", "off", NULL }, + { { "skinny", "set", "debug", "off", NULL }, skinny_no_debug, "Disable Skinny debugging", no_debug_usage }, diff --git a/main/cli.c b/main/cli.c index f5c13cfb2bb9ee110b34baaf4daec9505733b009..5a4557f6fe0ec81d36a89120347cfdb9615734ac 100644 --- a/main/cli.c +++ b/main/cli.c @@ -76,11 +76,11 @@ void ast_cli(int fd, char *fmt, ...) static AST_LIST_HEAD_STATIC(helpers, ast_cli_entry); static char load_help[] = -"Usage: load <module name>\n" +"Usage: module load <module name>\n" " Loads the specified module into Asterisk.\n"; static char unload_help[] = -"Usage: unload [-f|-h] <module name>\n" +"Usage: module unload [-f|-h] <module name>\n" " Unloads the specified module from Asterisk. The -f\n" " option causes the module to be unloaded even if it is\n" " in use (may cause a crash) and the -h module causes the\n" @@ -101,7 +101,7 @@ static char chanlist_help[] = " more and longer fields.\n"; static char reload_help[] = -"Usage: reload [module ...]\n" +"Usage: module reload [module ...]\n" " Reloads configuration files for all listed modules which support\n" " reloading, or for all supported modules if none are listed.\n"; @@ -119,7 +119,7 @@ static char debug_help[] = " limited to just that file.\n"; static char nodebug_help[] = -"Usage: core set no debug\n" +"Usage: core set debug off\n" " Turns off core debug messages.\n"; static char logger_mute_help[] = @@ -138,7 +138,7 @@ static char group_show_channels_help[] = " Optional regular expression pattern is matched to group names for each\n" " channel.\n"; -static int handle_load(int fd, int argc, char *argv[]) +static int handle_load_deprecated(int fd, int argc, char *argv[]) { if (argc != 2) return RESULT_SHOWUSAGE; @@ -149,14 +149,48 @@ static int handle_load(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } -static int handle_reload(int fd, int argc, char *argv[]) +static int handle_load(int fd, int argc, char *argv[]) +{ + if (argc != 3) + return RESULT_SHOWUSAGE; + if (ast_load_resource(argv[2])) { + ast_cli(fd, "Unable to load module %s\n", argv[2]); + return RESULT_FAILURE; + } + return RESULT_SUCCESS; +} + +static int handle_reload_deprecated(int fd, int argc, char *argv[]) { int x; int res; if (argc < 1) return RESULT_SHOWUSAGE; if (argc > 1) { - for (x=1;x<argc;x++) { + for (x = 1; x < argc; x++) { + res = ast_module_reload(argv[x]); + switch(res) { + case 0: + ast_cli(fd, "No such module '%s'\n", argv[x]); + break; + case 1: + ast_cli(fd, "Module '%s' does not support reload\n", argv[x]); + break; + } + } + } else + ast_module_reload(NULL); + return RESULT_SUCCESS; +} + +static int handle_reload(int fd, int argc, char *argv[]) +{ + int x; + int res; + if (argc < 2) + return RESULT_SHOWUSAGE; + if (argc > 2) { + for (x = 2; x < argc; x++) { res = ast_module_reload(argv[x]); switch(res) { case 0: @@ -172,6 +206,33 @@ static int handle_reload(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } +static int handle_set_verbose_deprecated(int fd, int argc, char *argv[]) +{ + int val = 0; + int oldval = option_verbose; + + /* "set verbose [atleast] N" */ + if (argc == 3) + option_verbose = atoi(argv[2]); + else if (argc == 4) { + if (strcasecmp(argv[2], "atleast")) + return RESULT_SHOWUSAGE; + val = atoi(argv[3]); + if (val > option_verbose) + option_verbose = val; + } else + return RESULT_SHOWUSAGE; + + if (oldval != option_verbose && option_verbose > 0) + ast_cli(fd, "Verbosity was %d and is now %d\n", oldval, option_verbose); + else if (oldval > 0 && option_verbose > 0) + ast_cli(fd, "Verbosity is at least %d\n", option_verbose); + else if (oldval > 0 && option_verbose == 0) + ast_cli(fd, "Verbosity is now OFF\n"); + + return RESULT_SUCCESS; +} + static int handle_verbose(int fd, int argc, char *argv[]) { int oldval = option_verbose; @@ -209,13 +270,18 @@ static int handle_verbose(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } -static int handle_debug(int fd, int argc, char *argv[]) +static int handle_set_debug(int fd, int argc, char *argv[]) { int oldval = option_debug; int newlevel; int atleast = 0; char *filename = '\0'; + /* 'core set debug <level>' + * 'core set debug <level> <fn>' + * 'core set debug atleast <level>' + * 'core set debug atleast <level> <fn>' + */ if ((argc < 4) || (argc > 6)) return RESULT_SHOWUSAGE; @@ -244,10 +310,10 @@ static int handle_debug(int fd, int argc, char *argv[]) if (sscanf(argv[4], "%d", &newlevel) != 1) return RESULT_SHOWUSAGE; - if (argc == 6) { + if (argc == 5) { debug_filename[0] = '\0'; } else { - filename = argv[4]; + filename = argv[5]; ast_copy_string(debug_filename, filename, sizeof(debug_filename)); } @@ -277,7 +343,7 @@ static int handle_debug(int fd, int argc, char *argv[]) static int handle_nodebug(int fd, int argc, char *argv[]) { int oldval = option_debug; - if (argc != 2) + if (argc != 4) return RESULT_SHOWUSAGE; option_debug = 0; @@ -296,13 +362,41 @@ static int handle_logger_mute(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } -static int handle_unload(int fd, int argc, char *argv[]) +static int handle_unload_deprecated(int fd, int argc, char *argv[]) { int x; - int force=AST_FORCE_SOFT; + int force = AST_FORCE_SOFT; if (argc < 2) return RESULT_SHOWUSAGE; - for (x=1;x<argc;x++) { + for (x = 1; x < argc; x++) { + if (argv[x][0] == '-') { + switch(argv[x][1]) { + case 'f': + force = AST_FORCE_FIRM; + break; + case 'h': + force = AST_FORCE_HARD; + break; + default: + return RESULT_SHOWUSAGE; + } + } else if (x != argc - 1) + return RESULT_SHOWUSAGE; + else if (ast_unload_resource(argv[x], force)) { + ast_cli(fd, "Unable to unload resource %s\n", argv[x]); + return RESULT_FAILURE; + } + } + return RESULT_SUCCESS; +} + +static int handle_unload(int fd, int argc, char *argv[]) +{ + int x; + int force = AST_FORCE_SOFT; + if (argc < 3) + return RESULT_SHOWUSAGE; + for (x = 2; x < argc; x++) { if (argv[x][0] == '-') { switch(argv[x][1]) { case 'f': @@ -314,7 +408,7 @@ static int handle_unload(int fd, int argc, char *argv[]) default: return RESULT_SHOWUSAGE; } - } else if (x != argc - 1) + } else if (x != argc - 1) return RESULT_SHOWUSAGE; else if (ast_unload_resource(argv[x], force)) { ast_cli(fd, "Unable to unload resource %s\n", argv[x]); @@ -456,10 +550,8 @@ static int handle_chanlist(int fd, int argc, char *argv[]) int durh, durm, durs; int numchans = 0, concise = 0, verbose = 0; - if (argc == 4) { - concise = !strcasecmp(argv[2],"concise"); - verbose = !strcasecmp(argv[2],"verbose"); - } + concise = (argc == 4 && (!strcasecmp(argv[3],"concise"))); + verbose = (argc == 4 && (!strcasecmp(argv[3],"verbose"))); if (argc < 3 || argc > 4 || (argc == 4 && !concise && !verbose)) return RESULT_SHOWUSAGE; @@ -535,16 +627,12 @@ static int handle_chanlist(int fd, int argc, char *argv[]) } static char showchan_help[] = -"Usage: channel show <channel>\n" +"Usage: core show channel <channel>\n" " Shows lots of information about the specified channel.\n"; static char debugchan_help[] = -"Usage: channel debug <channel>\n" -" Enables debugging on a specific channel.\n"; - -static char nodebugchan_help[] = -"Usage: channel nodebug <channel>\n" -" Disables debugging on a specific channel.\n"; +"Usage: core set debug channel <channel> [off]\n" +" Enables/disables debugging on a specific channel.\n"; static char commandcomplete_help[] = "Usage: _command complete \"<line>\" text state\n" @@ -650,8 +738,7 @@ static int handle_commandcomplete(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } -/* XXX todo: merge next two functions!!! */ -static int handle_debugchan(int fd, int argc, char *argv[]) +static int handle_debugchan_deprecated(int fd, int argc, char *argv[]) { struct ast_channel *c=NULL; int is_all; @@ -685,22 +772,68 @@ static int handle_debugchan(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } -static int handle_nodebugchan(int fd, int argc, char *argv[]) +static int handle_core_set_debug_channel(int fd, int argc, char *argv[]) +{ + struct ast_channel *c = NULL; + int is_all, is_off = 0; + + /* 'core set debug channel {all|chan_id}' */ + if (argc == 6 && strcmp(argv[5], "off") == 0) + is_off = 1; + else if (argc != 5) + return RESULT_SHOWUSAGE; + + is_all = !strcasecmp("all", argv[4]); + if (is_all) { + if (is_off) { + global_fin &= ~DEBUGCHAN_FLAG; + global_fout &= ~DEBUGCHAN_FLAG; + } else { + global_fin |= DEBUGCHAN_FLAG; + global_fout |= DEBUGCHAN_FLAG; + } + c = ast_channel_walk_locked(NULL); + } else { + c = ast_get_channel_by_name_locked(argv[4]); + if (c == NULL) + ast_cli(fd, "No such channel %s\n", argv[4]); + } + while (c) { + if (!(c->fin & DEBUGCHAN_FLAG) || !(c->fout & DEBUGCHAN_FLAG)) { + if (is_off) { + c->fin &= ~DEBUGCHAN_FLAG; + c->fout &= ~DEBUGCHAN_FLAG; + } else { + c->fin |= DEBUGCHAN_FLAG; + c->fout |= DEBUGCHAN_FLAG; + } + ast_cli(fd, "Debugging %s on channel %s\n", is_off ? "disabled" : "enabled", c->name); + } + ast_channel_unlock(c); + if (!is_all) + break; + c = ast_channel_walk_locked(c); + } + ast_cli(fd, "Debugging on new channels is %s\n", is_off ? "disabled" : "enabled"); + return RESULT_SUCCESS; +} + +static int handle_nodebugchan_deprecated(int fd, int argc, char *argv[]) { struct ast_channel *c=NULL; int is_all; /* 'no debug channel {all|chan_id}' */ - if (argc != 3) + if (argc != 4) return RESULT_SHOWUSAGE; - is_all = !strcasecmp("all", argv[2]); + is_all = !strcasecmp("all", argv[3]); if (is_all) { global_fin &= ~DEBUGCHAN_FLAG; global_fout &= ~DEBUGCHAN_FLAG; c = ast_channel_walk_locked(NULL); } else { - c = ast_get_channel_by_name_locked(argv[2]); + c = ast_get_channel_by_name_locked(argv[3]); if (c == NULL) - ast_cli(fd, "No such channel %s\n", argv[2]); + ast_cli(fd, "No such channel %s\n", argv[3]); } while(c) { if ((c->fin & DEBUGCHAN_FLAG) || (c->fout & DEBUGCHAN_FLAG)) { @@ -860,6 +993,11 @@ static char *complete_ch_5(const char *line, const char *word, int pos, int stat return ast_complete_channels(line, word, pos, state, 4); } +static char *complete_mod_2(const char *line, const char *word, int pos, int state) +{ + return ast_module_helper(line, word, pos, state, 1, 1); +} + static char *complete_mod_3_nr(const char *line, const char *word, int pos, int state) { return ast_module_helper(line, word, pos, state, 2, 0); @@ -980,28 +1118,84 @@ static struct ast_cli_entry builtins[] = { { { NULL }, NULL, NULL, NULL } }; +static struct ast_cli_entry cli_debug_channel_deprecated = { + { "debug", "channel", NULL }, + handle_debugchan_deprecated, NULL, + NULL, complete_ch_3 }; + +static struct ast_cli_entry cli_debug_level_deprecated = { + { "debug", "level", NULL }, + handle_debuglevel_deprecated, NULL, + NULL }; + +static struct ast_cli_entry cli_set_debug_deprecated = { + { "set", "debug", NULL }, + handle_set_debug_deprecated, NULL, + NULL, NULL, &cli_debug_level_deprecated }; + +static struct ast_cli_entry cli_set_verbose_deprecated = { + { "set", "verbose", NULL }, + handle_set_verbose_deprecated, NULL, + NULL }; + +static struct ast_cli_entry cli_show_channel_deprecated = { + { "show", "channel", NULL }, + handle_showchan, NULL, + NULL, complete_ch_3 }; + +static struct ast_cli_entry cli_show_channels_deprecated = { + { "show", "channels", NULL }, + handle_chanlist, NULL, + NULL, complete_show_channels }; + +static struct ast_cli_entry cli_show_modules_deprecated = { + { "show", "modules", NULL }, + handle_modlist, NULL, + NULL }; + +static struct ast_cli_entry cli_show_modules_like_deprecated = { + { "show", "modules", "like", NULL }, + handle_modlist, NULL, + NULL, complete_mod_4 }; + +static struct ast_cli_entry cli_module_load_deprecated = { + { "load", NULL }, + handle_load_deprecated, NULL, + NULL, complete_fn }; + +static struct ast_cli_entry cli_module_reload_deprecated = { + { "reload", NULL }, + handle_reload_deprecated, NULL, + NULL, complete_mod_2 }; + +static struct ast_cli_entry cli_module_unload_deprecated = { + { "unload", NULL }, + handle_unload_deprecated, NULL, + NULL, complete_mod_2 }; + static struct ast_cli_entry cli_cli[] = { + /* Deprecated, but preferred command is now consolidated (and already has a deprecated command for it). */ + { { "no", "debug", "channel", NULL }, + handle_nodebugchan_deprecated, NULL, + NULL, complete_ch_4 }, + { { "core", "show", "channels", NULL }, handle_chanlist, "Display information on channels", chanlist_help, complete_show_channels }, - { { "core", "show" "channel", NULL }, + { { "core", "show", "channel", NULL }, handle_showchan, "Display information on a specific channel", showchan_help, complete_ch_4 }, - { { "core", "debug", "channel", NULL }, - handle_debugchan, "Enable debugging on a channel", - debugchan_help, complete_ch_4 }, - - { { "core", "no", "debug", "channel", NULL }, - handle_nodebugchan, "Disable debugging on a channel", - nodebugchan_help, complete_ch_5 }, + { { "core", "set", "debug", "channel", NULL }, + handle_core_set_debug_channel, "Enable/disable debugging on a channel", + debugchan_help, complete_ch_5, &cli_debug_channel_deprecated }, { { "core", "set", "debug", NULL }, - handle_debug, "Set level of debug chattiness", + handle_set_debug, "Set level of debug chattiness", debug_help }, - { { "core", "set", "no", "debug", NULL }, + { { "core", "set", "debug", "off", NULL }, handle_nodebug, "Turns off debug chattiness", nodebug_help }, @@ -1021,25 +1215,25 @@ static struct ast_cli_entry cli_cli[] = { handle_logger_mute, "Toggle logging output to a console", logger_mute_help }, - { { "core", "show", "modules", NULL }, + { { "module", "show", NULL }, handle_modlist, "List modules and info", modlist_help }, - { { "core", "show", "modules", "like", NULL }, + { { "module", "show", "like", NULL }, handle_modlist, "List modules and info", modlist_help, complete_mod_4 }, - { { "load", NULL }, + { { "module", "load", NULL }, handle_load, "Load a module by name", - load_help, complete_fn }, + load_help, complete_fn, &cli_module_load_deprecated }, - { { "reload", NULL }, + { { "module", "reload", NULL }, handle_reload, "Reload configuration", - reload_help, complete_mod_3 }, + reload_help, complete_mod_3, &cli_module_reload_deprecated }, - { { "unload", NULL }, + { { "module", "unload", NULL }, handle_unload, "Unload a module by name", - unload_help, complete_mod_3_nr }, + unload_help, complete_mod_3_nr, &cli_module_unload_deprecated }, { { "core", "show", "uptime", NULL }, handle_showuptime, "Show uptime information",