Stasis-HTTP: Flesh out bridge-related capabilities
[asterisk/asterisk.git] / res / res_stasis_bridge_add.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2013, Digium, Inc.
5  *
6  * Kinsey Moore <kmoore@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief res_stasis bridge add channel support.
22  *
23  * \author Kinsey Moore <kmoore@digium.com>
24  */
25
26 /*** MODULEINFO
27         <depend type="module">res_stasis</depend>
28         <support_level>core</support_level>
29  ***/
30
31 #include "asterisk.h"
32
33 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
34
35 #include "asterisk/module.h"
36 #include "asterisk/stasis_app_impl.h"
37 #include "asterisk/bridging.h"
38
39 static void *app_control_join_bridge(struct stasis_app_control *control,
40         struct ast_channel *chan, void *data)
41 {
42         struct ast_bridge_features features;
43         struct ast_bridge *bridge = data;
44         ast_bridge_features_init(&features);
45         ast_bridge_join(bridge, chan, NULL, &features, NULL, 0);
46         ast_bridge_features_cleanup(&features);
47
48         return NULL;
49 }
50
51 void stasis_app_control_add_channel_to_bridge(struct stasis_app_control *control, struct ast_bridge *bridge)
52 {
53         ast_debug(3, "%s: Sending channel add_to_bridge command\n",
54                         stasis_app_control_get_channel_id(control));
55
56         stasis_app_send_command_async(control, app_control_join_bridge, bridge);
57 }
58
59 static int load_module(void)
60 {
61         return AST_MODULE_LOAD_SUCCESS;
62 }
63
64 static int unload_module(void)
65 {
66         return 0;
67 }
68
69 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS,
70         "Stasis application bridge add channel support",
71         .load = load_module,
72         .unload = unload_module,
73         .nonoptreq = "res_stasis");