Asterisk - The Open Source Telephony Project GIT-master-f36a736
app_channelredirect.c
Go to the documentation of this file.
1/*
2 * Asterisk -- An open source telephony toolkit.
3 *
4 * Copyright (C) 2006, Sergey Basmanov
5 *
6 * See http://www.asterisk.org for more information about
7 * the Asterisk project. Please do not directly contact
8 * any of the maintainers of this project for assistance;
9 * the project provides a web site, mailing lists and IRC
10 * channels for your use.
11 *
12 * This program is free software, distributed under the terms of
13 * the GNU General Public License Version 2. See the LICENSE file
14 * at the top of the source tree.
15 */
16
17/*! \file
18 *
19 * \brief ChannelRedirect application
20 *
21 * \author Sergey Basmanov <sergey_basmanov@mail.ru>
22 *
23 * \ingroup applications
24 */
25
26/*** MODULEINFO
27 <support_level>core</support_level>
28 ***/
29
30#include "asterisk.h"
31
32#include "asterisk/file.h"
33#include "asterisk/channel.h"
34#include "asterisk/pbx.h"
35#include "asterisk/module.h"
36#include "asterisk/lock.h"
37#include "asterisk/app.h"
38#include "asterisk/features.h"
39
40/*** DOCUMENTATION
41 <application name="ChannelRedirect" language="en_US">
42 <synopsis>
43 Redirects given channel to a dialplan target
44 </synopsis>
45 <syntax>
46 <parameter name="channel" required="true" />
47 <parameter name="context" required="false" />
48 <parameter name="extension" required="false" />
49 <parameter name="priority" required="true" />
50 </syntax>
51 <description>
52 <para>Sends the specified channel to the specified extension priority</para>
53
54 <para>This application sets the following channel variables upon completion</para>
55 <variablelist>
56 <variable name="CHANNELREDIRECT_STATUS">
57 <value name="NOCHANNEL" />
58 <value name="SUCCESS" />
59 <para>Are set to the result of the redirection</para>
60 </variable>
61 </variablelist>
62 </description>
63 </application>
64 ***/
65static const char app[] = "ChannelRedirect";
66
67static int asyncgoto_exec(struct ast_channel *chan, const char *data)
68{
69 int res = -1;
70 char *info;
71 struct ast_channel *chan2 = NULL;
72
74 AST_APP_ARG(channel);
75 AST_APP_ARG(label);
76 );
77
78 if (ast_strlen_zero(data)) {
79 ast_log(LOG_WARNING, "%s requires an argument (channel,[[context,]exten,]priority)\n", app);
80 return -1;
81 }
82
85
86 if (ast_strlen_zero(args.channel) || ast_strlen_zero(args.label)) {
87 ast_log(LOG_WARNING, "%s requires an argument (channel,[[context,]exten,]priority)\n", app);
88 return -1;
89 }
90
91 if (!(chan2 = ast_channel_get_by_name(args.channel))) {
92 ast_log(LOG_WARNING, "No such channel: %s\n", args.channel);
93 pbx_builtin_setvar_helper(chan, "CHANNELREDIRECT_STATUS", "NOCHANNEL");
94 return 0;
95 }
96
97 res = ast_async_parseable_goto(chan2, args.label);
98
99 chan2 = ast_channel_unref(chan2);
100
101 pbx_builtin_setvar_helper(chan, "CHANNELREDIRECT_STATUS", "SUCCESS");
102
103 return res;
104}
105
106static int unload_module(void)
107{
109}
110
111static int load_module(void)
112{
115}
116
117AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Redirects a given channel to a dialplan target");
static const char app[]
static int asyncgoto_exec(struct ast_channel *chan, const char *data)
static int load_module(void)
static int unload_module(void)
Asterisk main include file. File version handling, generic pbx functions.
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:298
#define ast_log
Definition: astobj2.c:42
General Asterisk PBX channel definitions.
#define ast_channel_unref(c)
Decrease channel reference count.
Definition: channel.h:3004
struct ast_channel * ast_channel_get_by_name(const char *name)
Find a channel by name.
Definition: channel.c:1473
Call Parking and Pickup API Includes code and algorithms from the Zapata library.
Generic File Format Support. Should be included by clients of the file handling routines....
Application convenience functions, designed to give consistent look and feel to Asterisk apps.
#define AST_APP_ARG(name)
Define an application argument.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
#define LOG_WARNING
Asterisk locking-related definitions:
Asterisk module definitions.
#define AST_MODULE_INFO_STANDARD(keystr, desc)
Definition: module.h:581
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
int ast_unregister_application(const char *app)
Unregister an application.
Definition: pbx_app.c:392
@ AST_MODULE_LOAD_SUCCESS
Definition: module.h:70
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Definition: module.h:640
def info(msg)
Core PBX routines and definitions.
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name.
int ast_async_parseable_goto(struct ast_channel *chan, const char *goto_string)
Definition: pbx.c:8871
#define NULL
Definition: resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
Main Channel structure associated with a channel.
const char * data
const char * args