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 | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | load_module (void) |
static int | transfer_exec (struct ast_channel *chan, void *data) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Transfers a caller to another extension" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
static const char * | app = "Transfer" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static void __reg_module | ( | void | ) | [static] |
Definition at line 142 of file app_transfer.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 142 of file app_transfer.c.
static int load_module | ( | void | ) | [static] |
Definition at line 137 of file app_transfer.c.
References ast_register_application_xml, and transfer_exec().
{ return ast_register_application_xml(app, transfer_exec); }
static int transfer_exec | ( | struct ast_channel * | chan, |
void * | data | ||
) | [static] |
Definition at line 77 of file app_transfer.c.
References 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().
{ int res; int len; char *slash; char *tech = NULL; char *dest = NULL; char *status; char *parse; AST_DECLARE_APP_ARGS(args, AST_APP_ARG(dest); ); if (ast_strlen_zero((char *)data)) { ast_log(LOG_WARNING, "Transfer requires an argument ([Tech/]destination)\n"); pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "FAILURE"); return 0; } else parse = ast_strdupa(data); AST_STANDARD_APP_ARGS(args, parse); dest = args.dest; if ((slash = strchr(dest, '/')) && (len = (slash - dest))) { tech = dest; dest = slash + 1; /* Allow execution only if the Tech/destination agrees with the type of the channel */ if (strncasecmp(chan->tech->type, tech, len)) { pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "FAILURE"); return 0; } } /* Check if the channel supports transfer before we try it */ if (!chan->tech->transfer) { pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", "UNSUPPORTED"); return 0; } res = ast_transfer(chan, dest); if (res < 0) { status = "FAILURE"; res = 0; } else { status = "SUCCESS"; res = 0; } pbx_builtin_setvar_helper(chan, "TRANSFERSTATUS", status); return res; }
static int unload_module | ( | void | ) | [static] |
Definition at line 132 of file app_transfer.c.
References ast_unregister_application().
{ return ast_unregister_application(app); }
struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Transfers a caller to another extension" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
Definition at line 142 of file app_transfer.c.
const char* app = "Transfer" [static] |
Definition at line 75 of file app_transfer.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 142 of file app_transfer.c.