Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Functions | Variables
app_bridgeaddchan.c File Reference

Application to place the channel into an existing Bridge. More...

#include "asterisk.h"
#include "asterisk/file.h"
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/bridge.h"
#include "asterisk/features.h"
Include dependency graph for app_bridgeaddchan.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int bridgeadd_exec (struct ast_channel *chan, const char *data)
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Bridge Add Channel Application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const char app [] = "BridgeAdd"
 
static const struct ast_module_infoast_module_info = &__mod_info
 

Detailed Description

Application to place the channel into an existing Bridge.

Author
Alec Davis

Definition in file app_bridgeaddchan.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 147 of file app_bridgeaddchan.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 147 of file app_bridgeaddchan.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 147 of file app_bridgeaddchan.c.

◆ bridgeadd_exec()

static int bridgeadd_exec ( struct ast_channel chan,
const char *  data 
)
static

Definition at line 77 of file app_bridgeaddchan.c.

78{
79 struct ast_channel *c_ref;
80 struct ast_bridge_features chan_features;
81 struct ast_bridge *bridge;
82 char *c_name;
83 int failed;
84
85 /* Answer the channel if needed */
86 if (ast_channel_state(chan) != AST_STATE_UP) {
87 ast_answer(chan);
88 }
89
90 if (ast_strlen_zero(data)) {
91 data = "";
92 c_ref = NULL;
93 } else {
94 c_ref = ast_channel_get_by_name_prefix(data, strlen(data));
95 }
96 if (!c_ref) {
97 ast_verb(4, "Channel '%s' not found\n", data);
98 pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "NONEXISTENT");
99 return 0;
100 }
101 if (chan == c_ref) {
102 ast_channel_unref(c_ref);
103 pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "LOOP");
104 return 0;
105 }
106
107 c_name = ast_strdupa(ast_channel_name(c_ref));
108
109 ast_channel_lock(c_ref);
110 bridge = ast_channel_get_bridge(c_ref);
111 ast_channel_unlock(c_ref);
112
113 ast_channel_unref(c_ref);
114
115 if (!bridge) {
116 ast_verb(4, "Channel '%s' is not in a bridge\n", c_name);
117 pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "FAILURE");
118 return 0;
119 }
120
121 ast_verb(4, "%s is joining %s in bridge %s\n",
122 ast_channel_name(chan), c_name, bridge->uniqueid);
123
124 failed = ast_bridge_features_init(&chan_features)
125 || ast_bridge_join(bridge, chan, NULL, &chan_features, NULL, 0);
126 if (failed) {
127 ast_verb(4, "%s failed to join %s in bridge %s\n",
128 ast_channel_name(chan), c_name, bridge->uniqueid);
129 }
130
131 ast_bridge_features_cleanup(&chan_features);
132 ao2_cleanup(bridge);
133 pbx_builtin_setvar_helper(chan, "BRIDGERESULT", failed ? "FAILURE" : "SUCCESS");
134 return 0;
135}
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition astmm.h:298
#define ao2_cleanup(obj)
Definition astobj2.h:1934
int ast_bridge_join(struct ast_bridge *bridge, struct ast_channel *chan, struct ast_channel *swap, struct ast_bridge_features *features, struct ast_bridge_tech_optimizations *tech_args, enum ast_bridge_join_flags flags)
Join a channel to a bridge (blocking)
Definition bridge.c:1690
int ast_bridge_features_init(struct ast_bridge_features *features)
Initialize bridge features structure.
Definition bridge.c:3699
void ast_bridge_features_cleanup(struct ast_bridge_features *features)
Clean up the contents of a bridge features structure.
Definition bridge.c:3732
const char * ast_channel_name(const struct ast_channel *chan)
#define ast_channel_lock(chan)
Definition channel.h:2982
struct ast_channel * ast_channel_get_by_name_prefix(const char *name, size_t name_len)
Find a channel by a name prefix.
Definition channel.c:1399
struct ast_bridge * ast_channel_get_bridge(const struct ast_channel *chan)
Get the bridge associated with a channel.
Definition channel.c:10578
#define ast_channel_unref(c)
Decrease channel reference count.
Definition channel.h:3018
int ast_answer(struct ast_channel *chan)
Answer a channel.
Definition channel.c:2803
#define ast_channel_unlock(chan)
Definition channel.h:2983
ast_channel_state
ast_channel states
@ AST_STATE_UP
#define ast_verb(level,...)
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.
#define NULL
Definition resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65
Structure that contains features information.
Structure that contains information about a bridge.
Definition bridge.h:353
const ast_string_field uniqueid
Definition bridge.h:405
Main Channel structure associated with a channel.

References ao2_cleanup, ast_answer(), ast_bridge_features_cleanup(), ast_bridge_features_init(), ast_bridge_join(), ast_channel_get_bridge(), ast_channel_get_by_name_prefix(), ast_channel_lock, ast_channel_name(), ast_channel_unlock, ast_channel_unref, AST_STATE_UP, ast_strdupa, ast_strlen_zero(), ast_verb, NULL, pbx_builtin_setvar_helper(), and ast_bridge::uniqueid.

Referenced by load_module().

◆ load_module()

static int load_module ( void  )
static

Definition at line 142 of file app_bridgeaddchan.c.

143{
145}
static const char app[]
static int bridgeadd_exec(struct ast_channel *chan, const char *data)
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Definition module.h:640

References app, ast_register_application_xml, and bridgeadd_exec().

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 137 of file app_bridgeaddchan.c.

138{
140}
int ast_unregister_application(const char *app)
Unregister an application.
Definition pbx_app.c:392

References app, and ast_unregister_application().

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Bridge Add Channel Application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 147 of file app_bridgeaddchan.c.

◆ app

const char app[] = "BridgeAdd"
static

Definition at line 75 of file app_bridgeaddchan.c.

Referenced by load_module(), and unload_module().

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 147 of file app_bridgeaddchan.c.