Fri Aug 17 00:17:23 2018

Asterisk developer's documentation


app_transfer.c File Reference

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"

Detailed Description

Transfer a caller.

Author:
Mark Spencer <markster@digium.com>

Requires transfer support from channel driver

Definition in file app_transfer.c.


Function Documentation

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 }


Variable Documentation

const char* const app = "Transfer" [static]

Definition at line 79 of file app_transfer.c.


Generated on 17 Aug 2018 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1