summaryrefslogtreecommitdiff
path: root/res/res_clioriginate.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2008-12-12 20:12:23 +0000
committerRussell Bryant <russell@russellbryant.com>2008-12-12 20:12:23 +0000
commitafceccd015b585c1b1ae1cd27ca1b5f10d8b65a0 (patch)
tree9a8e12900bdc875aa8666b0a867cb65d82f3045d /res/res_clioriginate.c
parent0692660afc841d55463953ca7c6be3b9e8c67bea (diff)
Add a new CLI command, "channel redirect", which is similar in operation
to AMI Redirect. Review: http://reviewboard.digium.com/r/89/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@163716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_clioriginate.c')
-rw-r--r--res/res_clioriginate.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/res/res_clioriginate.c b/res/res_clioriginate.c
index 1052888dc..3839ebaf6 100644
--- a/res/res_clioriginate.c
+++ b/res/res_clioriginate.c
@@ -172,17 +172,59 @@ static char *handle_orig(struct ast_cli_entry *e, int cmd, struct ast_cli_args *
return res;
}
+static char *handle_redirect(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ const char *name, *dest;
+ struct ast_channel *chan;
+ int res;
+
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "channel redirect";
+ e->usage = ""
+ "Usage: channel redirect <channel> <[[context,]exten,]priority>\n"
+ " Redirect an active channel to a specified extension.\n";
+ return NULL;
+ case CLI_GENERATE:
+ return ast_complete_channels(a->line, a->word, a->pos, a->n, 2);
+ }
+
+ if (a->argc != e->args + 2) {
+ return CLI_SHOWUSAGE;
+ }
+
+ name = a->argv[2];
+ dest = a->argv[3];
+
+ chan = ast_get_channel_by_name_locked(name);
+ if (!chan) {
+ ast_cli(a->fd, "Channel '%s' not found\n", name);
+ return CLI_FAILURE;
+ }
+
+ res = ast_async_parseable_goto(chan, dest);
+
+ ast_channel_unlock(chan);
+
+ if (!res) {
+ ast_cli(a->fd, "Channel '%s' successfully redirected to %s\n", name, dest);
+ } else {
+ ast_cli(a->fd, "Channel '%s' failed to be redirected to %s\n", name, dest);
+ }
+
+ return res ? CLI_FAILURE : CLI_SUCCESS;
+}
+
static struct ast_cli_entry cli_cliorig[] = {
AST_CLI_DEFINE(handle_orig, "Originate a call"),
+ AST_CLI_DEFINE(handle_redirect, "Redirect a call"),
};
-/*! \brief Unload orginate module */
static int unload_module(void)
{
return ast_cli_unregister_multiple(cli_cliorig, ARRAY_LEN(cli_cliorig));
}
-/*! \brief Load orginate module */
static int load_module(void)
{
int res;
@@ -190,4 +232,4 @@ static int load_module(void)
return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Call origination from the CLI");
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Call origination and redirection from the CLI");