Transfer a caller. More...
#include "asterisk.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
#include "asterisk/channel.h"
Go to the source code of this file.
Functions | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Transfers a caller to another extension") | |
static int | load_module (void) |
static int | transfer_exec (struct ast_channel *chan, const char *data) |
static int | unload_module (void) |
Variables | |
static const char *const | app = "Transfer" |
Transfer a caller.
Requires transfer support from channel driver
Definition in file app_transfer.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Transfers a caller to another extension" | ||||
) |
static int load_module | ( | void | ) | [static] |
Definition at line 141 of file app_transfer.c.
References ast_register_application_xml, and transfer_exec().
00142 { 00143 return ast_register_application_xml(app, transfer_exec); 00144 }
static int transfer_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 81 of file app_transfer.c.
References args, AST_APP_ARG, AST_DECLARE_APP_ARGS, ast_log(), AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero(), ast_transfer(), len(), LOG_WARNING, parse(), pbx_builtin_setvar_helper(), status, ast_channel::tech, ast_channel_tech::transfer, and ast_channel_tech::type.
Referenced by load_module().
00082 { 00083 int res; 00084 int len; 00085 char *slash; 00086 char *tech = NULL; 00087 char *dest = NULL; 00088 char *status; 00089 char *parse; 00090 AST_DECLARE_APP_ARGS(args, 00091 AST_APP_ARG(dest); 00092 ); 00093 00094 if (ast_strlen_zero((char *)data)) { 00095 ast_log(LOG_WARNING, "Transfer requires an argument ([Tech/]destination)\n"); 00096 pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "FAILURE"); 00097 return 0; 00098 } else 00099 parse = ast_strdupa(data); 00100 00101 AST_STANDARD_APP_ARGS(args, parse); 00102 00103 dest = args.dest; 00104 00105 if ((slash = strchr(dest, '/')) && (len = (slash - dest))) { 00106 tech = dest; 00107 dest = slash + 1; 00108 /* Allow execution only if the Tech/destination agrees with the type of the channel */ 00109 if (strncasecmp(chan->tech->type, tech, len)) { 00110 pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "FAILURE"); 00111 return 0; 00112 } 00113 } 00114 00115 /* Check if the channel supports transfer before we try it */ 00116 if (!chan->tech->transfer) { 00117 pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "UNSUPPORTED"); 00118 return 0; 00119 } 00120 00121 res = ast_transfer(chan, dest); 00122 00123 if (res < 0) { 00124 status = "FAILURE"; 00125 res = 0; 00126 } else { 00127 status = "SUCCESS"; 00128 res = 0; 00129 } 00130 00131 pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", status); 00132 00133 return res; 00134 }
static int unload_module | ( | void | ) | [static] |
Definition at line 136 of file app_transfer.c.
References ast_unregister_application().
00137 { 00138 return ast_unregister_application(app); 00139 }
const char* const app = "Transfer" [static] |
Definition at line 79 of file app_transfer.c.