#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/cli.h"
#include "asterisk/utils.h"
#include "asterisk/frame.h"
Go to the source code of this file.
Defines | |
#define | TIMEOUT 30 |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
ASTERISK_FILE_VERSION (__FILE__,"$Revision: 196758 $") | |
static char * | handle_orig (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
handle for orgination app or exten. | |
static char * | handle_redirect (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static int | load_module (void) |
static char * | orig_app (int fd, const char *chan, const char *app, const char *appdata) |
orginate a call from the CLI | |
static char * | orig_exten (int fd, const char *chan, const char *data) |
orginate from extension | |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Call origination and redirection from the CLI" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_cli_entry | cli_cliorig [] |
Definition in file res_clioriginate.c.
#define TIMEOUT 30 |
The timeout for originated calls, in seconds
Definition at line 39 of file res_clioriginate.c.
Referenced by orig_app(), orig_exten(), rpt(), and rpt_tele_thread().
static void __reg_module | ( | void | ) | [static] |
Definition at line 240 of file res_clioriginate.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 240 of file res_clioriginate.c.
ASTERISK_FILE_VERSION | ( | __FILE__ | , | |
"$Revision: 196758 $" | ||||
) |
static char* handle_orig | ( | struct ast_cli_entry * | e, | |
int | cmd, | |||
struct ast_cli_args * | a | |||
) | [static] |
handle for orgination app or exten.
e | pointer to the CLI structure to initialize | |
cmd | operation to execute | |
a | structure that contains either application or extension arguments |
CLI_SUCCESS | on success. | |
CLI_SHOWUSAGE | on failure. |
Definition at line 118 of file res_clioriginate.c.
References ast_cli_args::argv, ast_cli_complete(), ast_complete_applications(), ast_log(), ast_module_ref(), ast_module_unref(), ast_strlen_zero(), CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, ast_cli_entry::command, ast_cli_args::fd, ast_cli_args::line, LOG_WARNING, ast_cli_args::n, orig_app(), orig_exten(), ast_cli_args::pos, ast_cli_entry::usage, and ast_cli_args::word.
00119 { 00120 static const char * const choices[] = { "application", "extension", NULL }; 00121 char *res = NULL; 00122 switch (cmd) { 00123 case CLI_INIT: 00124 e->command = "channel originate"; 00125 e->usage = 00126 " There are two ways to use this command. A call can be originated between a\n" 00127 "channel and a specific application, or between a channel and an extension in\n" 00128 "the dialplan. This is similar to call files or the manager originate action.\n" 00129 "Calls originated with this command are given a timeout of 30 seconds.\n\n" 00130 00131 "Usage1: channel originate <tech/data> application <appname> [appdata]\n" 00132 " This will originate a call between the specified channel tech/data and the\n" 00133 "given application. Arguments to the application are optional. If the given\n" 00134 "arguments to the application include spaces, all of the arguments to the\n" 00135 "application need to be placed in quotation marks.\n\n" 00136 00137 "Usage2: channel originate <tech/data> extension [exten@][context]\n" 00138 " This will originate a call between the specified channel tech/data and the\n" 00139 "given extension. If no context is specified, the 'default' context will be\n" 00140 "used. If no extension is given, the 's' extension will be used.\n"; 00141 return NULL; 00142 case CLI_GENERATE: 00143 /* ugly, can be removed when CLI entries have ast_module pointers */ 00144 ast_module_ref(ast_module_info->self); 00145 if (a->pos == 3) { 00146 res = ast_cli_complete(a->word, choices, a->n); 00147 } else if (a->pos == 4) { 00148 if (!strcasecmp("application", a->argv[3])) { 00149 res = ast_complete_applications(a->line, a->word, a->n); 00150 } 00151 } 00152 ast_module_unref(ast_module_info->self); 00153 return res; 00154 } 00155 00156 if (ast_strlen_zero(a->argv[2]) || ast_strlen_zero(a->argv[3])) 00157 return CLI_SHOWUSAGE; 00158 00159 /* ugly, can be removed when CLI entries have ast_module pointers */ 00160 ast_module_ref(ast_module_info->self); 00161 00162 if (!strcasecmp("application", a->argv[3])) { 00163 res = orig_app(a->fd, a->argv[2], a->argv[4], a->argv[5]); 00164 } else if (!strcasecmp("extension", a->argv[3])) { 00165 res = orig_exten(a->fd, a->argv[2], a->argv[4]); 00166 } else { 00167 ast_log(LOG_WARNING, "else"); 00168 res = CLI_SHOWUSAGE; 00169 } 00170 00171 ast_module_unref(ast_module_info->self); 00172 00173 return res; 00174 }
static char* handle_redirect | ( | struct ast_cli_entry * | e, | |
int | cmd, | |||
struct ast_cli_args * | a | |||
) | [static] |
Definition at line 176 of file res_clioriginate.c.
References ast_cli_args::argc, ast_cli_entry::args, ast_cli_args::argv, ast_async_parseable_goto(), ast_channel_get_by_name(), ast_channel_unref, ast_cli(), ast_complete_channels(), CLI_FAILURE, CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, ast_cli_args::fd, ast_cli_args::line, ast_cli_args::n, name, ast_cli_args::pos, ast_cli_entry::usage, and ast_cli_args::word.
00177 { 00178 const char *name, *dest; 00179 struct ast_channel *chan; 00180 int res; 00181 00182 switch (cmd) { 00183 case CLI_INIT: 00184 e->command = "channel redirect"; 00185 e->usage = "" 00186 "Usage: channel redirect <channel> <[[context,]exten,]priority>\n" 00187 " Redirect an active channel to a specified extension.\n"; 00188 /*! \todo It would be nice to be able to redirect 2 channels at the same 00189 * time like you can with AMI redirect. However, it is not possible to acquire 00190 * two channels without the potential for a deadlock with how ast_channel structs 00191 * are managed today. Once ast_channel is a refcounted object, this command 00192 * will be able to support that. */ 00193 return NULL; 00194 case CLI_GENERATE: 00195 return ast_complete_channels(a->line, a->word, a->pos, a->n, 2); 00196 } 00197 00198 if (a->argc != e->args + 2) { 00199 return CLI_SHOWUSAGE; 00200 } 00201 00202 name = a->argv[2]; 00203 dest = a->argv[3]; 00204 00205 if (!(chan = ast_channel_get_by_name(name))) { 00206 ast_cli(a->fd, "Channel '%s' not found\n", name); 00207 return CLI_FAILURE; 00208 } 00209 00210 res = ast_async_parseable_goto(chan, dest); 00211 00212 chan = ast_channel_unref(chan); 00213 00214 if (!res) { 00215 ast_cli(a->fd, "Channel '%s' successfully redirected to %s\n", name, dest); 00216 } else { 00217 ast_cli(a->fd, "Channel '%s' failed to be redirected to %s\n", name, dest); 00218 } 00219 00220 return res ? CLI_FAILURE : CLI_SUCCESS; 00221 }
static int load_module | ( | void | ) | [static] |
Definition at line 233 of file res_clioriginate.c.
References ARRAY_LEN, ast_cli_register_multiple(), AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, and cli_cliorig.
00234 { 00235 int res; 00236 res = ast_cli_register_multiple(cli_cliorig, ARRAY_LEN(cli_cliorig)); 00237 return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS; 00238 }
static char* orig_app | ( | int | fd, | |
const char * | chan, | |||
const char * | app, | |||
const char * | appdata | |||
) | [static] |
orginate a call from the CLI
fd | file descriptor for cli | |
chan | channel to create type/data | |
app | application you want to run | |
appdata | data for application |
CLI_SUCCESS | on success. | |
CLI_SHOWUSAGE | on failure. |
Definition at line 50 of file res_clioriginate.c.
References ast_cli(), AST_FORMAT_SLINEAR, ast_pbx_outgoing_app(), ast_strdupa, ast_strlen_zero(), CLI_SHOWUSAGE, CLI_SUCCESS, strsep(), and TIMEOUT.
Referenced by handle_orig().
00051 { 00052 char *chantech; 00053 char *chandata; 00054 int reason = 0; 00055 00056 if (ast_strlen_zero(app)) 00057 return CLI_SHOWUSAGE; 00058 00059 chandata = ast_strdupa(chan); 00060 00061 chantech = strsep(&chandata, "/"); 00062 if (!chandata) { 00063 ast_cli(fd, "*** No data provided after channel type! ***\n"); 00064 return CLI_SHOWUSAGE; 00065 } 00066 00067 ast_pbx_outgoing_app(chantech, AST_FORMAT_SLINEAR, chandata, TIMEOUT * 1000, app, appdata, &reason, 0, NULL, NULL, NULL, NULL, NULL); 00068 00069 return CLI_SUCCESS; 00070 }
static char* orig_exten | ( | int | fd, | |
const char * | chan, | |||
const char * | data | |||
) | [static] |
orginate from extension
fd | file descriptor for cli | |
chan | channel to create type/data | |
data | contains exten@context |
CLI_SUCCESS | on success. | |
CLI_SHOWUSAGE | on failure. |
Definition at line 80 of file res_clioriginate.c.
References ast_cli(), AST_FORMAT_SLINEAR, ast_pbx_outgoing_exten(), ast_strdupa, ast_strlen_zero(), CLI_SHOWUSAGE, CLI_SUCCESS, context, exten, strsep(), and TIMEOUT.
Referenced by handle_orig(), and park_call_exec().
00081 { 00082 char *chantech; 00083 char *chandata; 00084 char *exten = NULL; 00085 char *context = NULL; 00086 int reason = 0; 00087 00088 chandata = ast_strdupa(chan); 00089 00090 chantech = strsep(&chandata, "/"); 00091 if (!chandata) { 00092 ast_cli(fd, "*** No data provided after channel type! ***\n"); 00093 return CLI_SHOWUSAGE; 00094 } 00095 00096 if (!ast_strlen_zero(data)) { 00097 context = ast_strdupa(data); 00098 exten = strsep(&context, "@"); 00099 } 00100 00101 if (ast_strlen_zero(exten)) 00102 exten = "s"; 00103 if (ast_strlen_zero(context)) 00104 context = "default"; 00105 00106 ast_pbx_outgoing_exten(chantech, AST_FORMAT_SLINEAR, chandata, TIMEOUT * 1000, context, exten, 1, &reason, 0, NULL, NULL, NULL, NULL, NULL); 00107 00108 return CLI_SUCCESS; 00109 }
static int unload_module | ( | void | ) | [static] |
Definition at line 228 of file res_clioriginate.c.
References ARRAY_LEN, ast_cli_unregister_multiple(), and cli_cliorig.
00229 { 00230 return ast_cli_unregister_multiple(cli_cliorig, ARRAY_LEN(cli_cliorig)); 00231 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Call origination and redirection from the CLI" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 240 of file res_clioriginate.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 240 of file res_clioriginate.c.
struct ast_cli_entry cli_cliorig[] [static] |
Initial value:
{ { .handler = handle_orig , .summary = "Originate a call" ,__VA_ARGS__ }, { .handler = handle_redirect , .summary = "Redirect a call" ,__VA_ARGS__ }, }
Definition at line 223 of file res_clioriginate.c.
Referenced by load_module(), and unload_module().