Asterisk - The Open Source Telephony Project GIT-master-b023714
Loading...
Searching...
No Matches
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 <since>
43 <version>1.4.0</version>
44 </since>
45 <synopsis>
46 Redirects given channel to a dialplan target
47 </synopsis>
48 <syntax>
49 <parameter name="channel" required="true" />
50 <parameter name="context" required="false" />
51 <parameter name="extension" required="false" />
52 <parameter name="priority" required="true" />
53 </syntax>
54 <description>
55 <para>Sends the specified channel to the specified extension priority</para>
56
57 <para>This application sets the following channel variables upon completion</para>
58 <variablelist>
59 <variable name="CHANNELREDIRECT_STATUS">
60 <value name="NOCHANNEL" />
61 <value name="SUCCESS" />
62 <para>Are set to the result of the redirection</para>
63 </variable>
64 </variablelist>
65 </description>
66 </application>
67 ***/
68static const char app[] = "ChannelRedirect";
69
70static int asyncgoto_exec(struct ast_channel *chan, const char *data)
71{
72 int res = -1;
73 char *info;
74 struct ast_channel *chan2 = NULL;
75
77 AST_APP_ARG(channel);
78 AST_APP_ARG(label);
79 );
80
81 if (ast_strlen_zero(data)) {
82 ast_log(LOG_WARNING, "%s requires an argument (channel,[[context,]exten,]priority)\n", app);
83 return -1;
84 }
85
86 info = ast_strdupa(data);
88
89 if (ast_strlen_zero(args.channel) || ast_strlen_zero(args.label)) {
90 ast_log(LOG_WARNING, "%s requires an argument (channel,[[context,]exten,]priority)\n", app);
91 return -1;
92 }
93
94 if (!(chan2 = ast_channel_get_by_name(args.channel))) {
95 ast_log(LOG_WARNING, "No such channel: %s\n", args.channel);
96 pbx_builtin_setvar_helper(chan, "CHANNELREDIRECT_STATUS", "NOCHANNEL");
97 return 0;
98 }
99
100 res = ast_async_parseable_goto(chan2, args.label);
101
102 chan2 = ast_channel_unref(chan2);
103
104 pbx_builtin_setvar_helper(chan, "CHANNELREDIRECT_STATUS", "SUCCESS");
105
106 return res;
107}
108
109static int unload_module(void)
110{
112}
113
119
120AST_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.
struct ast_channel * ast_channel_get_by_name(const char *search)
Find a channel by name or uniqueid.
Definition channel.c:1398
#define ast_channel_unref(c)
Decrease channel reference count.
Definition channel.h:3018
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
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:8896
static struct @519 args
#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