diff --git a/doc/CHANGES-staging/cli_refresh.txt b/doc/CHANGES-staging/cli_refresh.txt new file mode 100644 index 0000000000..82bcd23f9a --- /dev/null +++ b/doc/CHANGES-staging/cli_refresh.txt @@ -0,0 +1,5 @@ +Subject: cli + +The "module refresh" command has been added, +which allows unloading and then loading a +module with a single command. diff --git a/main/cli.c b/main/cli.c index dc1301912f..0c119531a6 100644 --- a/main/cli.c +++ b/main/cli.c @@ -805,6 +805,38 @@ static char *handle_logger_mute(struct ast_cli_entry *e, int cmd, struct ast_cli return CLI_SUCCESS; } +static char *handle_refresh(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) +{ + /* "module refresh " */ + switch (cmd) { + case CLI_INIT: + e->command = "module refresh"; + e->usage = + "Usage: module refresh \n" + " Unloads and loads the specified module into Asterisk.\n"; + return NULL; + + case CLI_GENERATE: + if (a->pos != e->args) { + return NULL; + } + return ast_module_helper(a->line, a->word, a->pos, a->n, a->pos, AST_MODULE_HELPER_UNLOAD); + } + if (a->argc != e->args + 1) { + return CLI_SHOWUSAGE; + } + if (ast_unload_resource(a->argv[e->args], AST_FORCE_SOFT)) { + ast_cli(a->fd, "Unable to unload resource %s\n", a->argv[e->args]); + return CLI_FAILURE; + } + if (ast_load_resource(a->argv[e->args])) { + ast_cli(a->fd, "Unable to load module %s\n", a->argv[e->args]); + return CLI_FAILURE; + } + ast_cli(a->fd, "Unloaded and loaded %s\n", a->argv[e->args]); + return CLI_SUCCESS; +} + static char *handle_unload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { /* "module unload mod_1 [mod_2 .. mod_N]" */ @@ -2016,6 +2048,8 @@ static struct ast_cli_entry cli_cli[] = { AST_CLI_DEFINE(handle_unload, "Unload a module by name"), + AST_CLI_DEFINE(handle_refresh, "Completely unloads and loads a module by name"), + AST_CLI_DEFINE(handle_showuptime, "Show uptime information"), AST_CLI_DEFINE(handle_softhangup, "Request a hangup on a given channel"),