FS-7845 File rename to remove mod_* prefix to local module C files. Change

function name prefixes from shorthand 'conf' to longer form
'conference'. Also fixes the channel variable names which had been
caught in an over zealous perl -pi -e command...
This commit is contained in:
William King 2015-07-16 16:58:39 -07:00
parent 14aa720512
commit d8194e9edb
13 changed files with 1672 additions and 1672 deletions

View File

@ -2,8 +2,8 @@ include $(top_srcdir)/build/modmake.rulesam
MODNAME=mod_conference MODNAME=mod_conference
mod_LTLIBRARIES = mod_conference.la mod_LTLIBRARIES = mod_conference.la
mod_conference_la_SOURCES = mod_conference.c mod_conference_api.c mod_conference_loop.c mod_conference_al.c mod_conference_cdr.c mod_conference_video.c mod_conference_la_SOURCES = mod_conference.c conference_api.c conference_loop.c conference_al.c conference_cdr.c conference_video.c
mod_conference_la_SOURCES += mod_conference_event.c mod_conference_member.c mod_conference_utils.c mod_conference_file.c mod_conference_record.c mod_conference_la_SOURCES += conference_event.c conference_member.c conference_utils.c conference_file.c conference_record.c
mod_conference_la_CFLAGS = $(AM_CFLAGS) -I. mod_conference_la_CFLAGS = $(AM_CFLAGS) -I.
mod_conference_la_LIBADD = $(switch_builddir)/libfreeswitch.la mod_conference_la_LIBADD = $(switch_builddir)/libfreeswitch.la
mod_conference_la_LDFLAGS = -avoid-version -module -no-undefined -shared mod_conference_la_LDFLAGS = -avoid-version -module -no-undefined -shared

View File

@ -43,7 +43,7 @@
al_handle_t *conf_al_create(switch_memory_pool_t *pool) al_handle_t *conference_al_create(switch_memory_pool_t *pool)
{ {
al_handle_t *al; al_handle_t *al;
@ -54,22 +54,22 @@ al_handle_t *conf_al_create(switch_memory_pool_t *pool)
} }
#ifndef OPENAL_POSITIONING #ifndef OPENAL_POSITIONING
void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream) void conference_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream)
{ {
} }
void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate) void conference_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate)
{ {
} }
#else #else
void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream) void conference_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream)
{ {
float offset; float offset;
float pos; float pos;
float radius; float radius;
float x, z; float x, z;
float div = 3.14159f / 180; float div = 3.14159f / 180;
conf_member_t *member; conference_member_t *member;
uint32_t count = 0; uint32_t count = 0;
if (!conference->count) { if (!conference->count) {
@ -78,14 +78,14 @@ void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *strea
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (member->channel && conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK) && !conf_utils_member_test_flag(member, MFLAG_NO_POSITIONAL)) { if (member->channel && conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK) && !conference_utils_member_test_flag(member, MFLAG_NO_POSITIONAL)) {
count++; count++;
} }
} }
if (count < 3) { if (count < 3) {
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (member->channel && !conf_utils_member_test_flag(member, MFLAG_NO_POSITIONAL) && member->al) { if (member->channel && !conference_utils_member_test_flag(member, MFLAG_NO_POSITIONAL) && member->al) {
member->al->pos_x = 0; member->al->pos_x = 0;
member->al->pos_y = 0; member->al->pos_y = 0;
@ -112,14 +112,14 @@ void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *strea
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (!member->channel || conf_utils_member_test_flag(member, MFLAG_NO_POSITIONAL) || !conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) { if (!member->channel || conference_utils_member_test_flag(member, MFLAG_NO_POSITIONAL) || !conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
continue; continue;
} }
if (!member->al) { if (!member->al) {
member->al = conf_al_create(member->pool); member->al = conference_al_create(member->pool);
} }
conf_utils_member_set_flag(member, MFLAG_POSITIONAL); conference_utils_member_set_flag(member, MFLAG_POSITIONAL);
if (pos == 0) { if (pos == 0) {
x = 0; x = 0;
@ -163,7 +163,7 @@ void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *strea
void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate) void conference_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate)
{ {
if (rate != 48000) { if (rate != 48000) {
@ -180,7 +180,7 @@ void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rat
0 0
}; };
switch_mutex_lock(conf_globals.setup_mutex); switch_mutex_lock(conference_globals.setup_mutex);
if ((al->device = alcLoopbackOpenDeviceSOFT(NULL))) { if ((al->device = alcLoopbackOpenDeviceSOFT(NULL))) {
const ALshort silence[16] = { 0 }; const ALshort silence[16] = { 0 };
float orient[6] = { /*fwd:*/ 0., 0., -1., /*up:*/ 0., 1., 0. }; float orient[6] = { /*fwd:*/ 0., 0., -1., /*up:*/ 0., 1., 0. };
@ -205,7 +205,7 @@ void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rat
alSourceQueueBuffers(al->source, 2, al->buffer_in); alSourceQueueBuffers(al->source, 2, al->buffer_in);
alSourcePlay(al->source); alSourcePlay(al->source);
} }
switch_mutex_unlock(conf_globals.setup_mutex); switch_mutex_unlock(conference_globals.setup_mutex);
} }
if (al->device) { if (al->device) {
@ -238,13 +238,13 @@ void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rat
#endif #endif
#ifndef OPENAL_POSITIONING #ifndef OPENAL_POSITIONING
switch_status_t conf_al_parse_position(al_handle_t *al, const char *data) switch_status_t conference_al_parse_position(al_handle_t *al, const char *data)
{ {
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
#else #else
switch_status_t conf_al_parse_position(al_handle_t *al, const char *data) switch_status_t conference_al_parse_position(al_handle_t *al, const char *data)
{ {
char *args[3]; char *args[3];
int num; int num;
@ -270,11 +270,11 @@ switch_status_t conf_al_parse_position(al_handle_t *al, const char *data)
#endif #endif
#ifdef OPENAL_POSITIONING #ifdef OPENAL_POSITIONING
void conf_al_close(al_handle_t *al) void conference_al_close(al_handle_t *al)
{ {
if (!al) return; if (!al) return;
switch_mutex_lock(conf_globals.setup_mutex); switch_mutex_lock(conference_globals.setup_mutex);
if (al->source) { if (al->source) {
alDeleteSources(1, &al->source); alDeleteSources(1, &al->source);
al->source = 0; al->source = 0;
@ -295,7 +295,7 @@ void conf_al_close(al_handle_t *al)
alcCloseDevice(al->device); alcCloseDevice(al->device);
al->device = NULL; al->device = NULL;
} }
switch_mutex_unlock(conf_globals.setup_mutex); switch_mutex_unlock(conference_globals.setup_mutex);
} }
#endif #endif

View File

@ -42,28 +42,28 @@
#include <mod_conference.h> #include <mod_conference.h>
inline switch_bool_t conf_cdr_test_mflag(conf_cdr_node_t *np, member_flag_t mflag) inline switch_bool_t conference_cdr_test_mflag(conference_cdr_node_t *np, member_flag_t mflag)
{ {
return !!np->mflags[mflag]; return !!np->mflags[mflag];
} }
const char *conf_cdr_audio_flow(conf_member_t *member) const char *conference_cdr_audio_flow(conference_member_t *member)
{ {
const char *flow = "sendrecv"; const char *flow = "sendrecv";
if (!conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) { if (!conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
flow = "recvonly"; flow = "recvonly";
} }
if (member->channel && switch_channel_test_flag(member->channel, CF_HOLD)) { if (member->channel && switch_channel_test_flag(member->channel, CF_HOLD)) {
flow = conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK) ? "sendonly" : "inactive"; flow = conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK) ? "sendonly" : "inactive";
} }
return flow; return flow;
} }
char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *event, switch_event_t *revent) char *conference_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *event, switch_event_t *revent)
{ {
switch_xml_t xml, x_tag, x_tag1, x_tag2, x_tag3, x_tag4; switch_xml_t xml, x_tag, x_tag1, x_tag2, x_tag3, x_tag4;
char tmp[30]; char tmp[30];
@ -71,7 +71,7 @@ char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *even
char *dup_domain = NULL; char *dup_domain = NULL;
char *uri; char *uri;
int off = 0, off1 = 0, off2 = 0, off3 = 0, off4 = 0; int off = 0, off1 = 0, off2 = 0, off3 = 0, off4 = 0;
conf_cdr_node_t *np; conference_cdr_node_t *np;
char *tmpp = tmp; char *tmpp = tmp;
char *xml_text = NULL; char *xml_text = NULL;
@ -250,7 +250,7 @@ char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *even
const char *var; const char *var;
//char buf[1024]; //char buf[1024];
//switch_snprintf(buf, sizeof(buf), "conf_%s_%s_%s", conference->name, conference->domain, np->cp->caller_id_number); //switch_snprintf(buf, sizeof(buf), "conference_%s_%s_%s", conference->name, conference->domain, np->cp->caller_id_number);
//switch_channel_set_variable(channel, "conference_call_key", buf); //switch_channel_set_variable(channel, "conference_call_key", buf);
if (!(x_tag3 = switch_xml_add_child_d(x_tag2, "media", off3++))) { if (!(x_tag3 = switch_xml_add_child_d(x_tag2, "media", off3++))) {
@ -276,7 +276,7 @@ char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *even
if (!(x_tag4 = switch_xml_add_child_d(x_tag3, "status", off4++))) { if (!(x_tag4 = switch_xml_add_child_d(x_tag3, "status", off4++))) {
abort(); abort();
} }
switch_xml_set_txt_d(x_tag4, conf_cdr_audio_flow(np->member)); switch_xml_set_txt_d(x_tag4, conference_cdr_audio_flow(np->member));
if (switch_channel_test_flag(channel, CF_VIDEO)) { if (switch_channel_test_flag(channel, CF_VIDEO)) {
@ -327,13 +327,13 @@ char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *even
} }
cJSON *conf_cdr_json_render(conference_obj_t *conference, cJSON *req) cJSON *conference_cdr_json_render(conference_obj_t *conference, cJSON *req)
{ {
char tmp[30]; char tmp[30];
const char *domain; const char *name; const char *domain; const char *name;
char *dup_domain = NULL; char *dup_domain = NULL;
char *uri; char *uri;
conf_cdr_node_t *np; conference_cdr_node_t *np;
char *tmpp = tmp; char *tmpp = tmp;
cJSON *json = cJSON_CreateObject(), *jusers = NULL, *jold_users = NULL, *juser = NULL, *jvars = NULL; cJSON *json = cJSON_CreateObject(), *jusers = NULL, *jold_users = NULL, *juser = NULL, *jvars = NULL;
@ -437,7 +437,7 @@ cJSON *conf_cdr_json_render(conference_obj_t *conference, cJSON *req)
switch_channel_get_variables(channel, &var_event); switch_channel_get_variables(channel, &var_event);
if ((prefix = switch_event_get_header(var_event, "json_conf_var_prefix"))) { if ((prefix = switch_event_get_header(var_event, "json_conference_var_prefix"))) {
all = strcasecmp(prefix, "__all__"); all = strcasecmp(prefix, "__all__");
} else { } else {
prefix = "json_"; prefix = "json_";
@ -457,7 +457,7 @@ cJSON *conf_cdr_json_render(conference_obj_t *conference, cJSON *req)
json_add_child_string(juser, "rtpAudioSSRC", var); json_add_child_string(juser, "rtpAudioSSRC", var);
} }
json_add_child_string(juser, "rtpAudioDirection", conf_cdr_audio_flow(np->member)); json_add_child_string(juser, "rtpAudioDirection", conference_cdr_audio_flow(np->member));
if (switch_channel_test_flag(channel, CF_VIDEO)) { if (switch_channel_test_flag(channel, CF_VIDEO)) {
@ -486,7 +486,7 @@ cJSON *conf_cdr_json_render(conference_obj_t *conference, cJSON *req)
return json; return json;
} }
void conf_cdr_del(conf_member_t *member) void conference_cdr_del(conference_member_t *member)
{ {
if (member->channel) { if (member->channel) {
switch_channel_get_variables(member->channel, &member->cdr_node->var_event); switch_channel_get_variables(member->channel, &member->cdr_node->var_event);
@ -498,9 +498,9 @@ void conf_cdr_del(conf_member_t *member)
} }
} }
void conf_cdr_add(conf_member_t *member) void conference_cdr_add(conference_member_t *member)
{ {
conf_cdr_node_t *np; conference_cdr_node_t *np;
switch_caller_profile_t *cp; switch_caller_profile_t *cp;
switch_channel_t *channel; switch_channel_t *channel;
@ -530,9 +530,9 @@ void conf_cdr_add(conf_member_t *member)
} }
void conf_cdr_rejected(conference_obj_t *conference, switch_channel_t *channel, cdr_reject_reason_t reason) void conference_cdr_rejected(conference_obj_t *conference, switch_channel_t *channel, cdr_reject_reason_t reason)
{ {
conf_cdr_reject_t *rp; conference_cdr_reject_t *rp;
switch_caller_profile_t *cp; switch_caller_profile_t *cp;
rp = switch_core_alloc(conference->pool, sizeof(*rp)); rp = switch_core_alloc(conference->pool, sizeof(*rp));
@ -549,12 +549,12 @@ void conf_cdr_rejected(conference_obj_t *conference, switch_channel_t *channel,
rp->cp = switch_caller_profile_dup(conference->pool, cp); rp->cp = switch_caller_profile_dup(conference->pool, cp);
} }
void conf_cdr_render(conference_obj_t *conference) void conference_cdr_render(conference_obj_t *conference)
{ {
switch_xml_t cdr, x_ptr, x_member, x_members, x_conference, x_cp, x_flags, x_tag, x_rejected, x_attempt; switch_xml_t cdr, x_ptr, x_member, x_members, x_conference, x_cp, x_flags, x_tag, x_rejected, x_attempt;
conf_cdr_node_t *np; conference_cdr_node_t *np;
conf_cdr_reject_t *rp; conference_cdr_reject_t *rp;
int cdr_off = 0, conf_off = 0; int cdr_off = 0, conference_off = 0;
char str[512]; char str[512];
char *path = NULL, *xml_text; char *path = NULL, *xml_text;
int fd; int fd;
@ -571,30 +571,30 @@ void conf_cdr_render(conference_obj_t *conference)
abort(); abort();
} }
if (!(x_ptr = switch_xml_add_child_d(x_conference, "name", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "name", conference_off++))) {
abort(); abort();
} }
switch_xml_set_txt_d(x_ptr, conference->name); switch_xml_set_txt_d(x_ptr, conference->name);
if (!(x_ptr = switch_xml_add_child_d(x_conference, "hostname", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "hostname", conference_off++))) {
abort(); abort();
} }
switch_xml_set_txt_d(x_ptr, switch_core_get_hostname()); switch_xml_set_txt_d(x_ptr, switch_core_get_hostname());
if (!(x_ptr = switch_xml_add_child_d(x_conference, "rate", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "rate", conference_off++))) {
abort(); abort();
} }
switch_snprintf(str, sizeof(str), "%d", conference->rate); switch_snprintf(str, sizeof(str), "%d", conference->rate);
switch_xml_set_txt_d(x_ptr, str); switch_xml_set_txt_d(x_ptr, str);
if (!(x_ptr = switch_xml_add_child_d(x_conference, "interval", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "interval", conference_off++))) {
abort(); abort();
} }
switch_snprintf(str, sizeof(str), "%d", conference->interval); switch_snprintf(str, sizeof(str), "%d", conference->interval);
switch_xml_set_txt_d(x_ptr, str); switch_xml_set_txt_d(x_ptr, str);
if (!(x_ptr = switch_xml_add_child_d(x_conference, "start_time", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "start_time", conference_off++))) {
abort(); abort();
} }
switch_xml_set_attr_d(x_ptr, "type", "UNIX-epoch"); switch_xml_set_attr_d(x_ptr, "type", "UNIX-epoch");
@ -602,17 +602,17 @@ void conf_cdr_render(conference_obj_t *conference)
switch_xml_set_txt_d(x_ptr, str); switch_xml_set_txt_d(x_ptr, str);
if (!(x_ptr = switch_xml_add_child_d(x_conference, "end_time", conf_off++))) { if (!(x_ptr = switch_xml_add_child_d(x_conference, "end_time", conference_off++))) {
abort(); abort();
} }
switch_xml_set_attr_d(x_ptr, "endconf_forced", conf_utils_test_flag(conference, CFLAG_ENDCONF_FORCED) ? "true" : "false"); switch_xml_set_attr_d(x_ptr, "endconference_forced", conference_utils_test_flag(conference, CFLAG_ENDCONF_FORCED) ? "true" : "false");
switch_xml_set_attr_d(x_ptr, "type", "UNIX-epoch"); switch_xml_set_attr_d(x_ptr, "type", "UNIX-epoch");
switch_snprintf(str, sizeof(str), "%ld", (long)conference->end_time); switch_snprintf(str, sizeof(str), "%ld", (long)conference->end_time);
switch_xml_set_txt_d(x_ptr, str); switch_xml_set_txt_d(x_ptr, str);
if (!(x_members = switch_xml_add_child_d(x_conference, "members", conf_off++))) { if (!(x_members = switch_xml_add_child_d(x_conference, "members", conference_off++))) {
abort(); abort();
} }
@ -621,7 +621,7 @@ void conf_cdr_render(conference_obj_t *conference)
int flag_off = 0; int flag_off = 0;
if (!(x_member = switch_xml_add_child_d(x_members, "member", conf_off++))) { if (!(x_member = switch_xml_add_child_d(x_members, "member", conference_off++))) {
abort(); abort();
} }
@ -647,16 +647,16 @@ void conf_cdr_render(conference_obj_t *conference)
switch_assert(x_flags); switch_assert(x_flags);
x_tag = switch_xml_add_child_d(x_flags, "is_moderator", flag_off++); x_tag = switch_xml_add_child_d(x_flags, "is_moderator", flag_off++);
switch_xml_set_txt_d(x_tag, conf_cdr_test_mflag(np, MFLAG_MOD) ? "true" : "false"); switch_xml_set_txt_d(x_tag, conference_cdr_test_mflag(np, MFLAG_MOD) ? "true" : "false");
x_tag = switch_xml_add_child_d(x_flags, "end_conference", flag_off++); x_tag = switch_xml_add_child_d(x_flags, "end_conference", flag_off++);
switch_xml_set_txt_d(x_tag, conf_cdr_test_mflag(np, MFLAG_ENDCONF) ? "true" : "false"); switch_xml_set_txt_d(x_tag, conference_cdr_test_mflag(np, MFLAG_ENDCONF) ? "true" : "false");
x_tag = switch_xml_add_child_d(x_flags, "was_kicked", flag_off++); x_tag = switch_xml_add_child_d(x_flags, "was_kicked", flag_off++);
switch_xml_set_txt_d(x_tag, conf_cdr_test_mflag(np, MFLAG_KICKED) ? "true" : "false"); switch_xml_set_txt_d(x_tag, conference_cdr_test_mflag(np, MFLAG_KICKED) ? "true" : "false");
x_tag = switch_xml_add_child_d(x_flags, "is_ghost", flag_off++); x_tag = switch_xml_add_child_d(x_flags, "is_ghost", flag_off++);
switch_xml_set_txt_d(x_tag, conf_cdr_test_mflag(np, MFLAG_GHOST) ? "true" : "false"); switch_xml_set_txt_d(x_tag, conference_cdr_test_mflag(np, MFLAG_GHOST) ? "true" : "false");
if (!(x_cp = switch_xml_add_child_d(x_member, "caller_profile", member_off++))) { if (!(x_cp = switch_xml_add_child_d(x_member, "caller_profile", member_off++))) {
abort(); abort();
@ -674,7 +674,7 @@ void conf_cdr_render(conference_obj_t *conference)
} }
if (!(x_rejected = switch_xml_add_child_d(x_conference, "rejected", conf_off++))) { if (!(x_rejected = switch_xml_add_child_d(x_conference, "rejected", conference_off++))) {
abort(); abort();
} }

View File

@ -42,13 +42,13 @@
#include <mod_conference.h> #include <mod_conference.h>
void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id) void conference_event_mod_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id)
{ {
cJSON *data, *addobj = NULL; cJSON *data, *addobj = NULL;
const char *action = NULL; const char *action = NULL;
char *value = NULL; char *value = NULL;
cJSON *jid = 0; cJSON *jid = 0;
char *conf_name = strdup(event_channel + 15); char *conference_name = strdup(event_channel + 15);
int cid = 0; int cid = 0;
char *p; char *p;
switch_stream_handle_t stream = { 0 }; switch_stream_handle_t stream = { 0 };
@ -57,7 +57,7 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
char *argv[10] = {0}; char *argv[10] = {0};
int argc = 0; int argc = 0;
if (conf_name && (p = strchr(conf_name, '@'))) { if (conference_name && (p = strchr(conference_name, '@'))) {
*p = '\0'; *p = '\0';
} }
@ -87,7 +87,7 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
} }
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "conf %s CMD %s [%s] %d\n", conf_name, key, action, cid); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "conf %s CMD %s [%s] %d\n", conference_name, key, action, cid);
if (zstr(action)) { if (zstr(action)) {
goto end; goto end;
@ -103,7 +103,7 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
!strcasecmp(action, "unvmute") || !strcasecmp(action, "unvmute") ||
!strcasecmp(action, "tvmute") !strcasecmp(action, "tvmute")
) { ) {
exec = switch_mprintf("%s %s %d", conf_name, action, cid); exec = switch_mprintf("%s %s %d", conference_name, action, cid);
} else if (!strcasecmp(action, "volume_in") || } else if (!strcasecmp(action, "volume_in") ||
!strcasecmp(action, "volume_out") || !strcasecmp(action, "volume_out") ||
!strcasecmp(action, "vid-res-id") || !strcasecmp(action, "vid-res-id") ||
@ -112,26 +112,26 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
!strcasecmp(action, "vid-canvas") || !strcasecmp(action, "vid-canvas") ||
!strcasecmp(action, "vid-watching-canvas") || !strcasecmp(action, "vid-watching-canvas") ||
!strcasecmp(action, "vid-banner")) { !strcasecmp(action, "vid-banner")) {
exec = switch_mprintf("%s %s %d %s", conf_name, action, cid, argv[0]); exec = switch_mprintf("%s %s %d %s", conference_name, action, cid, argv[0]);
} else if (!strcasecmp(action, "play") || !strcasecmp(action, "stop")) { } else if (!strcasecmp(action, "play") || !strcasecmp(action, "stop")) {
exec = switch_mprintf("%s %s %s", conf_name, action, argv[0]); exec = switch_mprintf("%s %s %s", conference_name, action, argv[0]);
} else if (!strcasecmp(action, "recording") || !strcasecmp(action, "vid-layout") || !strcasecmp(action, "vid-write-png")) { } else if (!strcasecmp(action, "recording") || !strcasecmp(action, "vid-layout") || !strcasecmp(action, "vid-write-png")) {
if (!argv[1]) { if (!argv[1]) {
argv[1] = "all"; argv[1] = "all";
} }
exec = switch_mprintf("%s %s %s %s", conf_name, action, argv[0], argv[1]); exec = switch_mprintf("%s %s %s %s", conference_name, action, argv[0], argv[1]);
} else if (!strcasecmp(action, "transfer") && cid) { } else if (!strcasecmp(action, "transfer") && cid) {
conf_member_t *member; conference_member_t *member;
conference_obj_t *conference; conference_obj_t *conference;
exec = switch_mprintf("%s %s %s", argv[0], switch_str_nil(argv[1]), switch_str_nil(argv[2])); exec = switch_mprintf("%s %s %s", argv[0], switch_str_nil(argv[1]), switch_str_nil(argv[2]));
stream.write_function(&stream, "+OK Call transferred to %s", argv[0]); stream.write_function(&stream, "+OK Call transferred to %s", argv[0]);
if ((conference = conf_find(conf_name, NULL))) { if ((conference = conference_find(conference_name, NULL))) {
if ((member = conf_member_get(conference, cid))) { if ((member = conference_member_get(conference, cid))) {
switch_ivr_session_transfer(member->session, argv[0], argv[1], argv[2]); switch_ivr_session_transfer(member->session, argv[0], argv[1], argv[2]);
switch_thread_rwlock_unlock(member->rwlock); switch_thread_rwlock_unlock(member->rwlock);
} }
@ -144,8 +144,8 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
const void *vvar; const void *vvar;
cJSON *array = cJSON_CreateArray(); cJSON *array = cJSON_CreateArray();
conference_obj_t *conference = NULL; conference_obj_t *conference = NULL;
if ((conference = conf_find(conf_name, NULL))) { if ((conference = conference_find(conference_name, NULL))) {
switch_mutex_lock(conf_globals.setup_mutex); switch_mutex_lock(conference_globals.setup_mutex);
if (conference->layout_hash) { if (conference->layout_hash) {
for (hi = switch_core_hash_first(conference->layout_hash); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first(conference->layout_hash); hi; hi = switch_core_hash_next(&hi)) {
switch_core_hash_this(hi, &vvar, NULL, &val); switch_core_hash_this(hi, &vvar, NULL, &val);
@ -163,14 +163,14 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
} }
} }
switch_mutex_unlock(conf_globals.setup_mutex); switch_mutex_unlock(conference_globals.setup_mutex);
switch_thread_rwlock_unlock(conference->rwlock); switch_thread_rwlock_unlock(conference->rwlock);
} }
addobj = array; addobj = array;
} }
if (exec) { if (exec) {
conf_api_main_real(exec, NULL, &stream); conference_api_main_real(exec, NULL, &stream);
} }
end: end:
@ -193,26 +193,26 @@ void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, cons
cJSON_AddItemToObject(jdata, "error", cJSON_CreateString("Invalid Command")); cJSON_AddItemToObject(jdata, "error", cJSON_CreateString("Invalid Command"));
} }
switch_event_channel_broadcast(event_channel, &msg, __FILE__, conf_globals.event_channel_id); switch_event_channel_broadcast(event_channel, &msg, __FILE__, conference_globals.event_channel_id);
switch_safe_free(stream.data); switch_safe_free(stream.data);
switch_safe_free(exec); switch_safe_free(exec);
switch_safe_free(conf_name); switch_safe_free(conference_name);
} }
void conf_event_la_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id) void conference_event_la_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id)
{ {
switch_live_array_parse_json(json, conf_globals.event_channel_id); switch_live_array_parse_json(json, conference_globals.event_channel_id);
} }
void conf_event_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id) void conference_event_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id)
{ {
char *domain = NULL, *name = NULL; char *domain = NULL, *name = NULL;
conference_obj_t *conference = NULL; conference_obj_t *conference = NULL;
cJSON *data, *reply = NULL, *conf_desc = NULL; cJSON *data, *reply = NULL, *conference_desc = NULL;
const char *action = NULL; const char *action = NULL;
char *dup = NULL; char *dup = NULL;
@ -236,40 +236,40 @@ void conf_event_channel_handler(const char *event_channel, cJSON *json, const ch
} }
if (!strcasecmp(action, "bootstrap")) { if (!strcasecmp(action, "bootstrap")) {
if (!zstr(name) && (conference = conf_find(name, domain))) { if (!zstr(name) && (conference = conference_find(name, domain))) {
conf_desc = conf_cdr_json_render(conference, json); conference_desc = conference_cdr_json_render(conference, json);
} else { } else {
conf_desc = cJSON_CreateObject(); conference_desc = cJSON_CreateObject();
json_add_child_string(conf_desc, "conferenceDescription", "FreeSWITCH Conference"); json_add_child_string(conference_desc, "conferenceDescription", "FreeSWITCH Conference");
json_add_child_string(conf_desc, "conferenceState", "inactive"); json_add_child_string(conference_desc, "conferenceState", "inactive");
json_add_child_array(conf_desc, "users"); json_add_child_array(conference_desc, "users");
json_add_child_array(conf_desc, "oldUsers"); json_add_child_array(conference_desc, "oldUsers");
} }
} else { } else {
conf_desc = cJSON_CreateObject(); conference_desc = cJSON_CreateObject();
json_add_child_string(conf_desc, "error", "Invalid action"); json_add_child_string(conference_desc, "error", "Invalid action");
} }
json_add_child_string(conf_desc, "action", "conferenceDescription"); json_add_child_string(conference_desc, "action", "conferenceDescription");
cJSON_AddItemToObject(reply, "data", conf_desc); cJSON_AddItemToObject(reply, "data", conference_desc);
switch_safe_free(dup); switch_safe_free(dup);
switch_event_channel_broadcast(event_channel, &reply, "mod_conference", conf_globals.event_channel_id); switch_event_channel_broadcast(event_channel, &reply, "mod_conference", conference_globals.event_channel_id);
} }
void conf_event_send_json(conference_obj_t *conference) void conference_event_send_json(conference_obj_t *conference)
{ {
cJSON *event, *conf_desc = NULL; cJSON *event, *conference_desc = NULL;
char *name = NULL, *domain = NULL, *dup_domain = NULL; char *name = NULL, *domain = NULL, *dup_domain = NULL;
char *event_channel = NULL; char *event_channel = NULL;
if (!conf_utils_test_flag(conference, CFLAG_JSON_EVENTS)) { if (!conference_utils_test_flag(conference, CFLAG_JSON_EVENTS)) {
return; return;
} }
conf_desc = conf_cdr_json_render(conference, NULL); conference_desc = conference_cdr_json_render(conference, NULL);
if (!(name = conference->name)) { if (!(name = conference->name)) {
name = "conference"; name = "conference";
@ -287,20 +287,20 @@ void conf_event_send_json(conference_obj_t *conference)
event = cJSON_CreateObject(); event = cJSON_CreateObject();
json_add_child_string(event, "eventChannel", event_channel); json_add_child_string(event, "eventChannel", event_channel);
cJSON_AddItemToObject(event, "data", conf_desc); cJSON_AddItemToObject(event, "data", conference_desc);
switch_event_channel_broadcast(event_channel, &event, "mod_conference", conf_globals.event_channel_id); switch_event_channel_broadcast(event_channel, &event, "mod_conference", conference_globals.event_channel_id);
switch_safe_free(dup_domain); switch_safe_free(dup_domain);
switch_safe_free(event_channel); switch_safe_free(event_channel);
} }
void conf_event_la_command_handler(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data) void conference_event_la_command_handler(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data)
{ {
} }
void conf_event_adv_la(conference_obj_t *conference, conf_member_t *member, switch_bool_t join) void conference_event_adv_la(conference_obj_t *conference, conference_member_t *member, switch_bool_t join)
{ {
//if (member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY) { //if (member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY) {
@ -326,21 +326,21 @@ void conf_event_adv_la(conference_obj_t *conference, conf_member_t *member, swit
cJSON_AddItemToObject(data, "action", cJSON_CreateString(join ? "conference-liveArray-join" : "conference-liveArray-part")); cJSON_AddItemToObject(data, "action", cJSON_CreateString(join ? "conference-liveArray-join" : "conference-liveArray-part"));
cJSON_AddItemToObject(data, "laChannel", cJSON_CreateString(conference->la_event_channel)); cJSON_AddItemToObject(data, "laChannel", cJSON_CreateString(conference->la_event_channel));
cJSON_AddItemToObject(data, "laName", cJSON_CreateString(conference->la_name)); cJSON_AddItemToObject(data, "laName", cJSON_CreateString(conference->la_name));
cJSON_AddItemToObject(data, "role", cJSON_CreateString(conf_utils_member_test_flag(member, MFLAG_MOD) ? "moderator" : "participant")); cJSON_AddItemToObject(data, "role", cJSON_CreateString(conference_utils_member_test_flag(member, MFLAG_MOD) ? "moderator" : "participant"));
cJSON_AddItemToObject(data, "chatID", cJSON_CreateString(conference->chat_id)); cJSON_AddItemToObject(data, "chatID", cJSON_CreateString(conference->chat_id));
cJSON_AddItemToObject(data, "canvasCount", cJSON_CreateNumber(conference->canvas_count)); cJSON_AddItemToObject(data, "canvasCount", cJSON_CreateNumber(conference->canvas_count));
if (conf_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { if (conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
cJSON_AddItemToObject(data, "secondScreen", cJSON_CreateTrue()); cJSON_AddItemToObject(data, "secondScreen", cJSON_CreateTrue());
} }
if (conf_utils_member_test_flag(member, MFLAG_MOD)) { if (conference_utils_member_test_flag(member, MFLAG_MOD)) {
cJSON_AddItemToObject(data, "modChannel", cJSON_CreateString(conference->mod_event_channel)); cJSON_AddItemToObject(data, "modChannel", cJSON_CreateString(conference->mod_event_channel));
} }
switch_core_get_variables(&variables); switch_core_get_variables(&variables);
for (hp = variables->headers; hp; hp = hp->next) { for (hp = variables->headers; hp; hp = hp->next) {
if (!strncasecmp(hp->name, "conf_verto_", 11)) { if (!strncasecmp(hp->name, "conference_verto_", 11)) {
char *var = hp->name + 11; char *var = hp->name + 11;
if (var) { if (var) {
cJSON_AddItemToObject(data, var, cJSON_CreateString(hp->value)); cJSON_AddItemToObject(data, var, cJSON_CreateString(hp->value));
@ -349,7 +349,7 @@ void conf_event_adv_la(conference_obj_t *conference, conf_member_t *member, swit
} }
switch_event_destroy(&variables); switch_event_destroy(&variables);
switch_event_channel_broadcast(event_channel, &msg, "mod_conference", conf_globals.event_channel_id); switch_event_channel_broadcast(event_channel, &msg, "mod_conference", conference_globals.event_channel_id);
if (cookie) { if (cookie) {
switch_event_channel_permission_modify(cookie, conference->la_event_channel, join); switch_event_channel_permission_modify(cookie, conference->la_event_channel, join);
@ -358,13 +358,13 @@ void conf_event_adv_la(conference_obj_t *conference, conf_member_t *member, swit
} }
} }
void conf_event_send_rfc(conference_obj_t *conference) void conference_event_send_rfc(conference_obj_t *conference)
{ {
switch_event_t *event; switch_event_t *event;
char *body; char *body;
char *name = NULL, *domain = NULL, *dup_domain = NULL; char *name = NULL, *domain = NULL, *dup_domain = NULL;
if (!conf_utils_test_flag(conference, CFLAG_RFC4579)) { if (!conference_utils_test_flag(conference, CFLAG_RFC4579)) {
return; return;
} }
@ -386,7 +386,7 @@ void conf_event_send_rfc(conference_obj_t *conference)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-name", name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-name", name);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-domain", domain); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "conference-domain", domain);
body = conf_cdr_rfc4579_render(conference, NULL, event); body = conference_cdr_rfc4579_render(conference, NULL, event);
switch_event_add_body(event, "%s", body); switch_event_add_body(event, "%s", body);
free(body); free(body);
switch_event_fire(&event); switch_event_fire(&event);
@ -397,7 +397,7 @@ void conf_event_send_rfc(conference_obj_t *conference)
} }
switch_status_t conf_event_add_data(conference_obj_t *conference, switch_event_t *event) switch_status_t conference_event_add_data(conference_obj_t *conference, switch_event_t *event)
{ {
switch_status_t status = SWITCH_STATUS_SUCCESS; switch_status_t status = SWITCH_STATUS_SUCCESS;
@ -411,9 +411,9 @@ switch_status_t conf_event_add_data(conference_obj_t *conference, switch_event_t
} }
/* send a message to every member of the conference */ /* send a message to every member of the conference */
void conf_event_chat_message_broadcast(conference_obj_t *conference, switch_event_t *event) void conference_event_chat_message_broadcast(conference_obj_t *conference, switch_event_t *event)
{ {
conf_member_t *member = NULL; conference_member_t *member = NULL;
switch_event_t *processed; switch_event_t *processed;
switch_assert(conference != NULL); switch_assert(conference != NULL);
@ -421,7 +421,7 @@ void conf_event_chat_message_broadcast(conference_obj_t *conference, switch_even
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (member->session && !conf_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (member->session && !conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
const char *presence_id = switch_channel_get_variable(member->channel, "presence_id"); const char *presence_id = switch_channel_get_variable(member->channel, "presence_id");
const char *chat_proto = switch_channel_get_variable(member->channel, "chat_proto"); const char *chat_proto = switch_channel_get_variable(member->channel, "chat_proto");
switch_event_t *reply = NULL; switch_event_t *reply = NULL;
@ -446,7 +446,7 @@ void conf_event_chat_message_broadcast(conference_obj_t *conference, switch_even
switch_mutex_unlock(conference->member_mutex); switch_mutex_unlock(conference->member_mutex);
} }
void conf_event_call_setup_handler(switch_event_t *event) void conference_event_call_setup_handler(switch_event_t *event)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
conference_obj_t *conference = NULL; conference_obj_t *conference = NULL;
@ -462,12 +462,12 @@ void conf_event_call_setup_handler(switch_event_t *event)
if (!ext) ext = dial_str; if (!ext) ext = dial_str;
if (!zstr(conf) && !zstr(dial_str) && !zstr(action) && (conference = conf_find(conf, domain))) { if (!zstr(conf) && !zstr(dial_str) && !zstr(action) && (conference = conference_find(conf, domain))) {
switch_event_t *var_event; switch_event_t *var_event;
switch_event_header_t *hp; switch_event_header_t *hp;
if (conf_utils_test_flag(conference, CFLAG_RFC4579)) { if (conference_utils_test_flag(conference, CFLAG_RFC4579)) {
char *key = switch_mprintf("conf_%s_%s_%s_%s", conference->name, conference->domain, ext, ext_domain); char *key = switch_mprintf("conference_%s_%s_%s_%s", conference->name, conference->domain, ext, ext_domain);
char *expanded = NULL, *ostr = dial_str;; char *expanded = NULL, *ostr = dial_str;;
if (!strcasecmp(action, "call")) { if (!strcasecmp(action, "call")) {
@ -503,7 +503,7 @@ void conf_event_call_setup_handler(switch_event_t *event)
} }
} }
status = conf_outcall_bg(conference, NULL, NULL, ostr, 60, NULL, NULL, NULL, NULL, NULL, NULL, &var_event); status = conference_outcall_bg(conference, NULL, NULL, ostr, 60, NULL, NULL, NULL, NULL, NULL, NULL, &var_event);
if (expanded && expanded != conference->outcall_templ) { if (expanded && expanded != conference->outcall_templ) {
switch_safe_free(expanded); switch_safe_free(expanded);
@ -512,9 +512,9 @@ void conf_event_call_setup_handler(switch_event_t *event)
} else if (!strcasecmp(action, "end")) { } else if (!strcasecmp(action, "end")) {
if (switch_core_session_hupall_matching_var("conference_call_key", key, SWITCH_CAUSE_NORMAL_CLEARING)) { if (switch_core_session_hupall_matching_var("conference_call_key", key, SWITCH_CAUSE_NORMAL_CLEARING)) {
conf_send_notify(conference, "SIP/2.0 200 OK\r\n", call_id, SWITCH_TRUE); conference_send_notify(conference, "SIP/2.0 200 OK\r\n", call_id, SWITCH_TRUE);
} else { } else {
conf_send_notify(conference, "SIP/2.0 481 Failure\r\n", call_id, SWITCH_TRUE); conference_send_notify(conference, "SIP/2.0 481 Failure\r\n", call_id, SWITCH_TRUE);
} }
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
} }
@ -547,7 +547,7 @@ void conf_event_call_setup_handler(switch_event_t *event)
} }
void conf_data_event_handler(switch_event_t *event) void conference_data_event_handler(switch_event_t *event)
{ {
switch_event_t *revent; switch_event_t *revent;
char *name = switch_event_get_header(event, "conference-name"); char *name = switch_event_get_header(event, "conference-name");
@ -555,14 +555,14 @@ void conf_data_event_handler(switch_event_t *event)
conference_obj_t *conference = NULL; conference_obj_t *conference = NULL;
char *body = NULL; char *body = NULL;
if (!zstr(name) && (conference = conf_find(name, domain))) { if (!zstr(name) && (conference = conference_find(name, domain))) {
if (conf_utils_test_flag(conference, CFLAG_RFC4579)) { if (conference_utils_test_flag(conference, CFLAG_RFC4579)) {
switch_event_dup(&revent, event); switch_event_dup(&revent, event);
revent->event_id = SWITCH_EVENT_CONFERENCE_DATA; revent->event_id = SWITCH_EVENT_CONFERENCE_DATA;
revent->flags |= EF_UNIQ_HEADERS; revent->flags |= EF_UNIQ_HEADERS;
switch_event_add_header(revent, SWITCH_STACK_TOP, "Event-Name", "CONFERENCE_DATA"); switch_event_add_header(revent, SWITCH_STACK_TOP, "Event-Name", "CONFERENCE_DATA");
body = conf_cdr_rfc4579_render(conference, event, revent); body = conference_cdr_rfc4579_render(conference, event, revent);
switch_event_add_body(revent, "%s", body); switch_event_add_body(revent, "%s", body);
switch_event_fire(&revent); switch_event_fire(&revent);
switch_safe_free(body); switch_safe_free(body);
@ -572,11 +572,11 @@ void conf_data_event_handler(switch_event_t *event)
} }
void conf_event_pres_handler(switch_event_t *event) void conference_event_pres_handler(switch_event_t *event)
{ {
char *to = switch_event_get_header(event, "to"); char *to = switch_event_get_header(event, "to");
char *domain_name = NULL; char *domain_name = NULL;
char *dup_to = NULL, *conf_name, *dup_conf_name = NULL; char *dup_to = NULL, *conference_name, *dup_conference_name = NULL;
conference_obj_t *conference; conference_obj_t *conference;
if (!to || strncasecmp(to, "conf+", 5) || !strchr(to, '@')) { if (!to || strncasecmp(to, "conf+", 5) || !strchr(to, '@')) {
@ -588,16 +588,16 @@ void conf_event_pres_handler(switch_event_t *event)
} }
conf_name = dup_to + 5; conference_name = dup_to + 5;
if ((domain_name = strchr(conf_name, '@'))) { if ((domain_name = strchr(conference_name, '@'))) {
*domain_name++ = '\0'; *domain_name++ = '\0';
} }
dup_conf_name = switch_mprintf("%q@%q", conf_name, domain_name); dup_conference_name = switch_mprintf("%q@%q", conference_name, domain_name);
if ((conference = conf_find(conf_name, NULL)) || (conference = conf_find(dup_conf_name, NULL))) { if ((conference = conference_find(conference_name, NULL)) || (conference = conference_find(dup_conference_name, NULL))) {
if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference->name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference->name);
@ -608,7 +608,7 @@ void conf_event_pres_handler(switch_event_t *event)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conf_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_ROUTING");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", conference->count == 1 ? "early" : "confirmed");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", conference->count == 1 ? "outbound" : "inbound"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", conference->count == 1 ? "outbound" : "inbound");
@ -617,14 +617,14 @@ void conf_event_pres_handler(switch_event_t *event)
switch_thread_rwlock_unlock(conference->rwlock); switch_thread_rwlock_unlock(conference->rwlock);
} else if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { } else if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conf_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", conference_name);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", to); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", to);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conf_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "unique-id", conference_name);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "channel-state", "CS_HANGUP");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
@ -632,7 +632,7 @@ void conf_event_pres_handler(switch_event_t *event)
} }
switch_safe_free(dup_to); switch_safe_free(dup_to);
switch_safe_free(dup_conf_name); switch_safe_free(dup_conference_name);
} }
@ -670,7 +670,7 @@ switch_status_t chat_send(switch_event_t *message_event)
switch_copy_string(name, to, sizeof(name)); switch_copy_string(name, to, sizeof(name));
} }
if (!(conference = conf_find(name, NULL))) { if (!(conference = conference_find(name, NULL))) {
switch_core_chat_send_args(proto, CONF_CHAT_PROTO, to, hint && strchr(hint, '/') ? hint : from, "", switch_core_chat_send_args(proto, CONF_CHAT_PROTO, to, hint && strchr(hint, '/') ? hint : from, "",
"Conference not active.", NULL, NULL, SWITCH_FALSE); "Conference not active.", NULL, NULL, SWITCH_FALSE);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
@ -681,9 +681,9 @@ switch_status_t chat_send(switch_event_t *message_event)
if (body != NULL && (lbuf = strdup(body))) { if (body != NULL && (lbuf = strdup(body))) {
/* special case list */ /* special case list */
if (conference->broadcast_chat_messages) { if (conference->broadcast_chat_messages) {
conf_event_chat_message_broadcast(conference, message_event); conference_event_chat_message_broadcast(conference, message_event);
} else if (switch_stristr("list", lbuf)) { } else if (switch_stristr("list", lbuf)) {
conf_list_pretty(conference, &stream); conference_list_pretty(conference, &stream);
/* provide help */ /* provide help */
} else { } else {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;

View File

@ -45,12 +45,12 @@
switch_status_t conference_file_close(conference_obj_t *conference, conference_file_node_t *node) switch_status_t conference_file_close(conference_obj_t *conference, conference_file_node_t *node)
{ {
switch_event_t *event; switch_event_t *event;
conf_member_t *member = NULL; conference_member_t *member = NULL;
if (test_eflag(conference, EFLAG_PLAY_FILE_DONE) && if (test_eflag(conference, EFLAG_PLAY_FILE_DONE) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "seconds", "%ld", (long) node->fh.samples_in / node->fh.native_rate); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "seconds", "%ld", (long) node->fh.samples_in / node->fh.native_rate);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "milliseconds", "%ld", (long) node->fh.samples_in / (node->fh.native_rate / 1000)); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "milliseconds", "%ld", (long) node->fh.samples_in / (node->fh.native_rate / 1000));
@ -63,8 +63,8 @@ switch_status_t conference_file_close(conference_obj_t *conference, conference_f
if (node->member_id) { if (node->member_id) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member-done"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "play-file-member-done");
if ((member = conf_member_get(conference, node->member_id))) { if ((member = conference_member_get(conference, node->member_id))) {
conf_member_add_event_data(member, event); conference_member_add_event_data(member, event);
switch_thread_rwlock_unlock(member->rwlock); switch_thread_rwlock_unlock(member->rwlock);
} }
@ -83,7 +83,7 @@ switch_status_t conference_file_close(conference_obj_t *conference, conference_f
#ifdef OPENAL_POSITIONING #ifdef OPENAL_POSITIONING
if (node->al && node->al->device) { if (node->al && node->al->device) {
conf_al_close(node->al); conference_al_close(node->al);
} }
#endif #endif
if (switch_core_file_has_video(&node->fh) && conference->canvas) { if (switch_core_file_has_video(&node->fh) && conference->canvas) {
@ -175,7 +175,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
} }
if (!async && say) { if (!async && say) {
status = conf_say(conference, file + 4, leadin); status = conference_say(conference, file + 4, leadin);
goto done; goto done;
} }
@ -196,7 +196,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
switch_safe_free(params_portion); switch_safe_free(params_portion);
} else if (!async) { } else if (!async) {
status = conf_say(conference, file, leadin); status = conference_say(conference, file, leadin);
goto done; goto done;
} else { } else {
goto done; goto done;
@ -232,7 +232,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
flags = SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT; flags = SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT;
if (conference->members_with_video && conf_utils_test_flag(conference, CFLAG_TRANSCODE_VIDEO)) { if (conference->members_with_video && conference_utils_test_flag(conference, CFLAG_TRANSCODE_VIDEO)) {
flags |= SWITCH_FILE_FLAG_VIDEO; flags |= SWITCH_FILE_FLAG_VIDEO;
} }
@ -244,7 +244,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
if (test_eflag(conference, EFLAG_PLAY_FILE) && if (test_eflag(conference, EFLAG_PLAY_FILE) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
if (fnode->fh.params) { if (fnode->fh.params) {
switch_event_merge(event, conference->fnode->fh.params); switch_event_merge(event, conference->fnode->fh.params);
@ -271,8 +271,8 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
} }
if (!bad_params && !zstr(position) && conference->channels == 2) { if (!bad_params && !zstr(position) && conference->channels == 2) {
fnode->al = conf_al_create(pool); fnode->al = conference_al_create(pool);
if (conf_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) { if (conference_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) {
switch_core_file_close(&fnode->fh); switch_core_file_close(&fnode->fh);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Position Data.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Position Data.\n");
fnode->al = NULL; fnode->al = NULL;
@ -288,7 +288,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
fnode->file = switch_core_strdup(fnode->pool, file); fnode->file = switch_core_strdup(fnode->pool, file);
if (!conference->fnode || (async && !conference->async_fnode)) { if (!conference->fnode || (async && !conference->async_fnode)) {
conf_video_fnode_check(fnode); conference_video_fnode_check(fnode);
} }
/* Queue the node */ /* Queue the node */

View File

@ -41,7 +41,7 @@
*/ */
#include <mod_conference.h> #include <mod_conference.h>
int conf_member_noise_gate_check(conf_member_t *member) int conference_member_noise_gate_check(conference_member_t *member)
{ {
int r = 0; int r = 0;
@ -62,7 +62,7 @@ int conf_member_noise_gate_check(conf_member_t *member)
return r; return r;
} }
void conf_member_clear_avg(conf_member_t *member) void conference_member_clear_avg(conference_member_t *member)
{ {
member->avg_score = 0; member->avg_score = 0;
@ -71,7 +71,7 @@ void conf_member_clear_avg(conf_member_t *member)
member->agc_concur = 0; member->agc_concur = 0;
} }
void conf_member_do_binding(conf_member_t *member, conf_key_callback_t handler, const char *digits, const char *data) void conference_member_do_binding(conference_member_t *member, conference_key_callback_t handler, const char *digits, const char *data)
{ {
key_binding_t *binding; key_binding_t *binding;
@ -85,11 +85,11 @@ void conf_member_do_binding(conf_member_t *member, conf_key_callback_t handler,
} }
binding->handler = handler; binding->handler = handler;
switch_ivr_dmachine_bind(member->dmachine, "conf", digits, 0, conf_loop_dmachine_dispatcher, binding); switch_ivr_dmachine_bind(member->dmachine, "conf", digits, 0, conference_loop_dmachine_dispatcher, binding);
} }
void conf_member_bind_controls(conf_member_t *member, const char *controls) void conference_member_bind_controls(conference_member_t *member, const char *controls)
{ {
switch_xml_t cxml, cfg, xgroups, xcontrol; switch_xml_t cxml, cfg, xgroups, xcontrol;
switch_event_t *params; switch_event_t *params;
@ -123,12 +123,12 @@ void conf_member_bind_controls(conf_member_t *member, const char *controls)
if (zstr(key) || zstr(digits)) continue; if (zstr(key) || zstr(digits)) continue;
for(i = 0; i < conf_loop_mapping_len(); i++) { for(i = 0; i < conference_loop_mapping_len(); i++) {
if (!strcasecmp(key, control_mappings[i].name)) { if (!strcasecmp(key, control_mappings[i].name)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s binding '%s' to '%s'\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s binding '%s' to '%s'\n",
switch_core_session_get_name(member->session), digits, key); switch_core_session_get_name(member->session), digits, key);
conf_member_do_binding(member, control_mappings[i].handler, digits, data); conference_member_do_binding(member, control_mappings[i].handler, digits, data);
} }
} }
} }
@ -145,24 +145,24 @@ void conf_member_bind_controls(conf_member_t *member, const char *controls)
} }
void conf_member_update_status_field(conf_member_t *member) void conference_member_update_status_field(conference_member_t *member)
{ {
char *str, *vstr = "", display[128] = "", *json_display = NULL; char *str, *vstr = "", display[128] = "", *json_display = NULL;
cJSON *json, *audio, *video; cJSON *json, *audio, *video;
if (!member->conference->la || !member->json || if (!member->conference->la || !member->json ||
!member->status_field || switch_channel_test_flag(member->channel, CF_VIDEO_ONLY) || conf_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { !member->status_field || switch_channel_test_flag(member->channel, CF_VIDEO_ONLY) || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
return; return;
} }
switch_live_array_lock(member->conference->la); switch_live_array_lock(member->conference->la);
if (conf_utils_test_flag(member->conference, CFLAG_JSON_STATUS)) { if (conference_utils_test_flag(member->conference, CFLAG_JSON_STATUS)) {
json = cJSON_CreateObject(); json = cJSON_CreateObject();
audio = cJSON_CreateObject(); audio = cJSON_CreateObject();
cJSON_AddItemToObject(audio, "muted", cJSON_CreateBool(!conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK))); cJSON_AddItemToObject(audio, "muted", cJSON_CreateBool(!conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)));
cJSON_AddItemToObject(audio, "onHold", cJSON_CreateBool(switch_channel_test_flag(member->channel, CF_HOLD))); cJSON_AddItemToObject(audio, "onHold", cJSON_CreateBool(switch_channel_test_flag(member->channel, CF_HOLD)));
cJSON_AddItemToObject(audio, "talking", cJSON_CreateBool(conf_utils_member_test_flag(member, MFLAG_TALKING))); cJSON_AddItemToObject(audio, "talking", cJSON_CreateBool(conference_utils_member_test_flag(member, MFLAG_TALKING)));
cJSON_AddItemToObject(audio, "floor", cJSON_CreateBool(member == member->conference->floor_holder)); cJSON_AddItemToObject(audio, "floor", cJSON_CreateBool(member == member->conference->floor_holder));
cJSON_AddItemToObject(audio, "energyScore", cJSON_CreateNumber(member->score)); cJSON_AddItemToObject(audio, "energyScore", cJSON_CreateNumber(member->score));
cJSON_AddItemToObject(json, "audio", audio); cJSON_AddItemToObject(json, "audio", audio);
@ -171,9 +171,9 @@ void conf_member_update_status_field(conf_member_t *member)
video = cJSON_CreateObject(); video = cJSON_CreateObject();
cJSON_AddItemToObject(video, "avatarPresented", cJSON_CreateBool(!!member->avatar_png_img)); cJSON_AddItemToObject(video, "avatarPresented", cJSON_CreateBool(!!member->avatar_png_img));
cJSON_AddItemToObject(video, "mediaFlow", cJSON_CreateString(member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY ? "sendOnly" : "sendRecv")); cJSON_AddItemToObject(video, "mediaFlow", cJSON_CreateString(member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY ? "sendOnly" : "sendRecv"));
cJSON_AddItemToObject(video, "muted", cJSON_CreateBool(!conf_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN))); cJSON_AddItemToObject(video, "muted", cJSON_CreateBool(!conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN)));
cJSON_AddItemToObject(video, "floor", cJSON_CreateBool(member && member->id == member->conference->video_floor_holder)); cJSON_AddItemToObject(video, "floor", cJSON_CreateBool(member && member->id == member->conference->video_floor_holder));
if (member && member->id == member->conference->video_floor_holder && conf_utils_test_flag(member->conference, CFLAG_VID_FLOOR_LOCK)) { if (member && member->id == member->conference->video_floor_holder && conference_utils_test_flag(member->conference, CFLAG_VID_FLOOR_LOCK)) {
cJSON_AddItemToObject(video, "floorLocked", cJSON_CreateTrue()); cJSON_AddItemToObject(video, "floorLocked", cJSON_CreateTrue());
} }
cJSON_AddItemToObject(video, "reservationID", member->video_reservation_id ? cJSON_AddItemToObject(video, "reservationID", member->video_reservation_id ?
@ -189,24 +189,24 @@ void conf_member_update_status_field(conf_member_t *member)
json_display = cJSON_PrintUnformatted(json); json_display = cJSON_PrintUnformatted(json);
cJSON_Delete(json); cJSON_Delete(json);
} else { } else {
if (!conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) { if (!conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
str = "MUTE"; str = "MUTE";
} else if (switch_channel_test_flag(member->channel, CF_HOLD)) { } else if (switch_channel_test_flag(member->channel, CF_HOLD)) {
str = "HOLD"; str = "HOLD";
} else if (member == member->conference->floor_holder) { } else if (member == member->conference->floor_holder) {
if (conf_utils_member_test_flag(member, MFLAG_TALKING)) { if (conference_utils_member_test_flag(member, MFLAG_TALKING)) {
str = "TALKING (FLOOR)"; str = "TALKING (FLOOR)";
} else { } else {
str = "FLOOR"; str = "FLOOR";
} }
} else if (conf_utils_member_test_flag(member, MFLAG_TALKING)) { } else if (conference_utils_member_test_flag(member, MFLAG_TALKING)) {
str = "TALKING"; str = "TALKING";
} else { } else {
str = "ACTIVE"; str = "ACTIVE";
} }
if (switch_channel_test_flag(member->channel, CF_VIDEO)) { if (switch_channel_test_flag(member->channel, CF_VIDEO)) {
if (!conf_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN)) { if (!conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN)) {
vstr = " VIDEO (BLIND)"; vstr = " VIDEO (BLIND)";
} else { } else {
vstr = " VIDEO"; vstr = " VIDEO";
@ -230,7 +230,7 @@ void conf_member_update_status_field(conf_member_t *member)
switch_live_array_unlock(member->conference->la); switch_live_array_unlock(member->conference->la);
} }
switch_status_t conf_member_add_event_data(conf_member_t *member, switch_event_t *event) switch_status_t conference_member_add_event_data(conference_member_t *member, switch_event_t *event)
{ {
switch_status_t status = SWITCH_STATUS_SUCCESS; switch_status_t status = SWITCH_STATUS_SUCCESS;
@ -238,7 +238,7 @@ switch_status_t conf_member_add_event_data(conf_member_t *member, switch_event_t
return status; return status;
if (member->conference) { if (member->conference) {
status = conf_event_add_data(member->conference, event); status = conference_event_add_data(member->conference, event);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Floor", "%s", (member == member->conference->floor_holder) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Floor", "%s", (member == member->conference->floor_holder) ? "true" : "false" );
} }
@ -255,14 +255,14 @@ switch_status_t conf_member_add_event_data(conf_member_t *member, switch_event_t
} }
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Hear", "%s", conf_utils_member_test_flag(member, MFLAG_CAN_HEAR) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Hear", "%s", conference_utils_member_test_flag(member, MFLAG_CAN_HEAR) ? "true" : "false" );
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "See", "%s", conf_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "See", "%s", conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) ? "true" : "false" );
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Speak", "%s", conf_utils_member_test_flag(member, MFLAG_CAN_SPEAK) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Speak", "%s", conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK) ? "true" : "false" );
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Talking", "%s", conf_utils_member_test_flag(member, MFLAG_TALKING) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Talking", "%s", conference_utils_member_test_flag(member, MFLAG_TALKING) ? "true" : "false" );
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Mute-Detect", "%s", conf_utils_member_test_flag(member, MFLAG_MUTE_DETECT) ? "true" : "false" ); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Mute-Detect", "%s", conference_utils_member_test_flag(member, MFLAG_MUTE_DETECT) ? "true" : "false" );
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-ID", "%u", member->id); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-ID", "%u", member->id);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-Type", "%s", conf_utils_member_test_flag(member, MFLAG_MOD) ? "moderator" : "member"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-Type", "%s", conference_utils_member_test_flag(member, MFLAG_MOD) ? "moderator" : "member");
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-Ghost", "%s", conf_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Member-Ghost", "%s", conference_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false");
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Energy-Level", "%d", member->energy_level); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Energy-Level", "%d", member->energy_level);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Current-Energy", "%d", member->score); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Current-Energy", "%d", member->score);
@ -271,17 +271,17 @@ switch_status_t conf_member_add_event_data(conf_member_t *member, switch_event_t
#ifndef OPENAL_POSITIONING #ifndef OPENAL_POSITIONING
switch_status_t conf_member_parse_position(conf_member_t *member, const char *data) switch_status_t conference_member_parse_position(conference_member_t *member, const char *data)
{ {
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
#else #else
switch_status_t conf_member_parse_position(conf_member_t *member, const char *data) switch_status_t conference_member_parse_position(conference_member_t *member, const char *data)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
if (member->al) { if (member->al) {
status = conf_al_parse_position(member->al, data); status = conference_al_parse_position(member->al, data);
} }
return status; return status;
@ -290,7 +290,7 @@ switch_status_t conf_member_parse_position(conf_member_t *member, const char *da
#endif #endif
/* if other_member has a relationship with member, produce it */ /* if other_member has a relationship with member, produce it */
conference_relationship_t *conf_member_get_relationship(conf_member_t *member, conf_member_t *other_member) conference_relationship_t *conference_member_get_relationship(conference_member_t *member, conference_member_t *other_member)
{ {
conference_relationship_t *rel = NULL, *global = NULL; conference_relationship_t *rel = NULL, *global = NULL;
@ -318,7 +318,7 @@ conference_relationship_t *conf_member_get_relationship(conf_member_t *member, c
} }
/* stop playing a file for the member of the conference */ /* stop playing a file for the member of the conference */
uint32_t conf_member_stop_file(conf_member_t *member, file_stop_t stop) uint32_t conference_member_stop_file(conference_member_t *member, file_stop_t stop)
{ {
conference_file_node_t *nptr; conference_file_node_t *nptr;
uint32_t count = 0; uint32_t count = 0;
@ -349,9 +349,9 @@ uint32_t conf_member_stop_file(conf_member_t *member, file_stop_t stop)
/* traverse the conference member list for the specified member id and return it's pointer */ /* traverse the conference member list for the specified member id and return it's pointer */
conf_member_t *conf_member_get(conference_obj_t *conference, uint32_t id) conference_member_t *conference_member_get(conference_obj_t *conference, uint32_t id)
{ {
conf_member_t *member = NULL; conference_member_t *member = NULL;
switch_assert(conference != NULL); switch_assert(conference != NULL);
if (!id) { if (!id) {
@ -361,7 +361,7 @@ conf_member_t *conf_member_get(conference_obj_t *conference, uint32_t id)
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (conf_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
continue; continue;
} }
@ -371,8 +371,8 @@ conf_member_t *conf_member_get(conference_obj_t *conference, uint32_t id)
} }
if (member) { if (member) {
if (!conf_utils_member_test_flag(member, MFLAG_INTREE) || if (!conference_utils_member_test_flag(member, MFLAG_INTREE) ||
conf_utils_member_test_flag(member, MFLAG_KICKED) || conference_utils_member_test_flag(member, MFLAG_KICKED) ||
(member->session && !switch_channel_up(switch_core_session_get_channel(member->session)))) { (member->session && !switch_channel_up(switch_core_session_get_channel(member->session)))) {
/* member is kicked or hanging up so forget it */ /* member is kicked or hanging up so forget it */
@ -392,7 +392,7 @@ conf_member_t *conf_member_get(conference_obj_t *conference, uint32_t id)
return member; return member;
} }
void conf_member_check_agc_levels(conf_member_t *member) void conference_member_check_agc_levels(conference_member_t *member)
{ {
int x = 0; int x = 0;
@ -415,13 +415,13 @@ void conf_member_check_agc_levels(conf_member_t *member)
member->id, member->conference->agc_level - member->avg_score, member->conference->agc_level, member->id, member->conference->agc_level - member->avg_score, member->conference->agc_level,
member->score, member->avg_score, member->agc_volume_in_level, x > 0 ? "+++" : "---"); member->score, member->avg_score, member->agc_volume_in_level, x > 0 ? "+++" : "---");
conf_member_clear_avg(member); conference_member_clear_avg(member);
} }
} }
void conf_member_check_channels(switch_frame_t *frame, conf_member_t *member, switch_bool_t in) void conference_member_check_channels(switch_frame_t *frame, conference_member_t *member, switch_bool_t in)
{ {
if (member->conference->channels != member->read_impl.number_of_channels || conf_utils_member_test_flag(member, MFLAG_POSITIONAL)) { if (member->conference->channels != member->read_impl.number_of_channels || conference_utils_member_test_flag(member, MFLAG_POSITIONAL)) {
uint32_t rlen; uint32_t rlen;
int from, to; int from, to;
@ -435,14 +435,14 @@ void conf_member_check_channels(switch_frame_t *frame, conf_member_t *member, sw
rlen = frame->datalen / 2 / from; rlen = frame->datalen / 2 / from;
if (in && frame->rate == 48000 && ((from == 1 && to == 2) || (from == 2 && to == 2)) && conf_utils_member_test_flag(member, MFLAG_POSITIONAL)) { if (in && frame->rate == 48000 && ((from == 1 && to == 2) || (from == 2 && to == 2)) && conference_utils_member_test_flag(member, MFLAG_POSITIONAL)) {
if (from == 2 && to == 2) { if (from == 2 && to == 2) {
switch_mux_channels((int16_t *) frame->data, rlen, 2, 1); switch_mux_channels((int16_t *) frame->data, rlen, 2, 1);
frame->datalen /= 2; frame->datalen /= 2;
rlen = frame->datalen / 2; rlen = frame->datalen / 2;
} }
conf_al_process(member->al, frame->data, frame->datalen, frame->rate); conference_al_process(member->al, frame->data, frame->datalen, frame->rate);
} else { } else {
switch_mux_channels((int16_t *) frame->data, rlen, from, to); switch_mux_channels((int16_t *) frame->data, rlen, from, to);
} }
@ -453,7 +453,7 @@ void conf_member_check_channels(switch_frame_t *frame, conf_member_t *member, sw
} }
void conf_member_add_file_data(conf_member_t *member, int16_t *data, switch_size_t file_data_len) void conference_member_add_file_data(conference_member_t *member, int16_t *data, switch_size_t file_data_len)
{ {
switch_size_t file_sample_len; switch_size_t file_sample_len;
int16_t file_frame[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 }; int16_t file_frame[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 };
@ -517,7 +517,7 @@ void conf_member_add_file_data(conf_member_t *member, int16_t *data, switch_size
} }
if (member->fnode->al) { if (member->fnode->al) {
conf_al_process(member->fnode->al, file_frame, file_sample_len * 2, member->conference->rate); conference_al_process(member->fnode->al, file_frame, file_sample_len * 2, member->conference->rate);
} }
for (i = 0; i < (int)file_sample_len * member->conference->channels; i++) { for (i = 0; i < (int)file_sample_len * member->conference->channels; i++) {
@ -541,7 +541,7 @@ void conf_member_add_file_data(conf_member_t *member, int16_t *data, switch_size
/* Add a custom relationship to a member */ /* Add a custom relationship to a member */
conference_relationship_t *conf_member_add_relationship(conf_member_t *member, uint32_t id) conference_relationship_t *conference_member_add_relationship(conference_member_t *member, uint32_t id)
{ {
conference_relationship_t *rel = NULL; conference_relationship_t *rel = NULL;
@ -563,7 +563,7 @@ conference_relationship_t *conf_member_add_relationship(conf_member_t *member, u
} }
/* Remove a custom relationship from a member */ /* Remove a custom relationship from a member */
switch_status_t conf_member_del_relationship(conf_member_t *member, uint32_t id) switch_status_t conference_member_del_relationship(conference_member_t *member, uint32_t id)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
conference_relationship_t *rel, *last = NULL; conference_relationship_t *rel, *last = NULL;
@ -576,7 +576,7 @@ switch_status_t conf_member_del_relationship(conf_member_t *member, uint32_t id)
if (id == 0 || rel->id == id) { if (id == 0 || rel->id == id) {
/* we just forget about rel here cos it was allocated by the member's pool /* we just forget about rel here cos it was allocated by the member's pool
it will be freed when the member is */ it will be freed when the member is */
conf_member_t *omember; conference_member_t *omember;
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
@ -587,9 +587,9 @@ switch_status_t conf_member_del_relationship(conf_member_t *member, uint32_t id)
} }
if ((rel->flags & RFLAG_CAN_SEND_VIDEO)) { if ((rel->flags & RFLAG_CAN_SEND_VIDEO)) {
conf_utils_member_clear_flag(member, MFLAG_RECEIVING_VIDEO); conference_utils_member_clear_flag(member, MFLAG_RECEIVING_VIDEO);
if ((omember = conf_member_get(member->conference, rel->id))) { if ((omember = conference_member_get(member->conference, rel->id))) {
conf_utils_member_clear_flag(omember, MFLAG_RECEIVING_VIDEO); conference_utils_member_clear_flag(omember, MFLAG_RECEIVING_VIDEO);
switch_thread_rwlock_unlock(omember->rwlock); switch_thread_rwlock_unlock(omember->rwlock);
} }
} }
@ -611,7 +611,7 @@ switch_status_t conf_member_del_relationship(conf_member_t *member, uint32_t id)
/* Gain exclusive access and add the member to the list */ /* Gain exclusive access and add the member to the list */
switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *member) switch_status_t conference_member_add(conference_obj_t *conference, conference_member_t *member)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
switch_event_t *event; switch_event_t *event;
@ -645,46 +645,46 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
switch_queue_create(&member->dtmf_queue, 100, member->pool); switch_queue_create(&member->dtmf_queue, 100, member->pool);
if (conf_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS)) { if (conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS)) {
video_layout_t *vlayout = NULL; video_layout_t *vlayout = NULL;
switch_mutex_lock(conference->canvas_mutex); switch_mutex_lock(conference->canvas_mutex);
if ((vlayout = conf_video_get_layout(conference, conference->video_layout_name, conference->video_layout_group))) { if ((vlayout = conference_video_get_layout(conference, conference->video_layout_name, conference->video_layout_group))) {
conf_video_init_canvas(conference, vlayout, &member->canvas); conference_video_init_canvas(conference, vlayout, &member->canvas);
conf_video_init_canvas_layers(conference, member->canvas, vlayout); conference_video_init_canvas_layers(conference, member->canvas, vlayout);
} }
switch_mutex_unlock(conference->canvas_mutex); switch_mutex_unlock(conference->canvas_mutex);
} }
if (member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY) { if (member->video_flow == SWITCH_MEDIA_FLOW_SENDONLY) {
conf_utils_member_clear_flag_locked(member, MFLAG_CAN_BE_SEEN); conference_utils_member_clear_flag_locked(member, MFLAG_CAN_BE_SEEN);
} }
conference->members = member; conference->members = member;
conf_utils_member_set_flag_locked(member, MFLAG_INTREE); conference_utils_member_set_flag_locked(member, MFLAG_INTREE);
switch_mutex_unlock(conference->member_mutex); switch_mutex_unlock(conference->member_mutex);
conf_cdr_add(member); conference_cdr_add(member);
if (!conf_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (!conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
if (conf_utils_member_test_flag(member, MFLAG_GHOST)) { if (conference_utils_member_test_flag(member, MFLAG_GHOST)) {
conference->count_ghosts++; conference->count_ghosts++;
} else { } else {
conference->count++; conference->count++;
} }
if (conf_utils_member_test_flag(member, MFLAG_ENDCONF)) { if (conference_utils_member_test_flag(member, MFLAG_ENDCONF)) {
if (conference->end_count++) { if (conference->end_count++) {
conference->endconf_time = 0; conference->endconference_time = 0;
} }
} }
conf_send_presence(conference); conference_send_presence(conference);
channel = switch_core_session_get_channel(member->session); channel = switch_core_session_get_channel(member->session);
member->video_flow = switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO); member->video_flow = switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO);
conf_video_check_avatar(member, SWITCH_FALSE); conference_video_check_avatar(member, SWITCH_FALSE);
if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_canvas", SWITCH_FALSE, -1))) { if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_canvas", SWITCH_FALSE, -1))) {
int id = atoi(var) - 1; int id = atoi(var) - 1;
@ -706,7 +706,7 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
} }
} }
conf_video_reset_member_codec_index(member); conference_video_reset_member_codec_index(member);
if ((var = switch_channel_get_variable_dup(member->channel, "video_mute_png", SWITCH_FALSE, -1))) { if ((var = switch_channel_get_variable_dup(member->channel, "video_mute_png", SWITCH_FALSE, -1))) {
member->video_mute_png = switch_core_strdup(member->pool, var); member->video_mute_png = switch_core_strdup(member->pool, var);
@ -718,12 +718,12 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
} }
if ((var = switch_channel_get_variable(channel, "video_use_dedicated_encoder")) && switch_true(var)) { if ((var = switch_channel_get_variable(channel, "video_use_dedicated_encoder")) && switch_true(var)) {
conf_utils_member_set_flag_locked(member, MFLAG_NO_MINIMIZE_ENCODING); conference_utils_member_set_flag_locked(member, MFLAG_NO_MINIMIZE_ENCODING);
} }
switch_channel_set_variable_printf(channel, "conf_member_id", "%d", member->id); switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id);
switch_channel_set_variable_printf(channel, "conference_moderator", "%s", conf_utils_member_test_flag(member, MFLAG_MOD) ? "true" : "false"); switch_channel_set_variable_printf(channel, "conference_moderator", "%s", conference_utils_member_test_flag(member, MFLAG_MOD) ? "true" : "false");
switch_channel_set_variable_printf(channel, "conference_ghost", "%s", conf_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false"); switch_channel_set_variable_printf(channel, "conference_ghost", "%s", conference_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false");
switch_channel_set_variable(channel, "conference_recording", conference->record_filename); switch_channel_set_variable(channel, "conference_recording", conference->record_filename);
switch_channel_set_variable(channel, CONFERENCE_UUID_VARIABLE, conference->uuid_str); switch_channel_set_variable(channel, CONFERENCE_UUID_VARIABLE, conference->uuid_str);
@ -733,26 +733,26 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
} }
if (!switch_channel_get_variable(channel, "conference_call_key")) { if (!switch_channel_get_variable(channel, "conference_call_key")) {
char *key = switch_core_session_sprintf(member->session, "conf_%s_%s_%s", char *key = switch_core_session_sprintf(member->session, "conference_%s_%s_%s",
conference->name, conference->domain, switch_channel_get_variable(channel, "caller_id_number")); conference->name, conference->domain, switch_channel_get_variable(channel, "caller_id_number"));
switch_channel_set_variable(channel, "conference_call_key", key); switch_channel_set_variable(channel, "conference_call_key", key);
} }
if (conf_utils_test_flag(conference, CFLAG_WAIT_MOD) && conf_utils_member_test_flag(member, MFLAG_MOD)) { if (conference_utils_test_flag(conference, CFLAG_WAIT_MOD) && conference_utils_member_test_flag(member, MFLAG_MOD)) {
conf_utils_clear_flag(conference, CFLAG_WAIT_MOD); conference_utils_clear_flag(conference, CFLAG_WAIT_MOD);
} }
if (conference->count > 1) { if (conference->count > 1) {
if ((conference->moh_sound && !conf_utils_test_flag(conference, CFLAG_WAIT_MOD)) || if ((conference->moh_sound && !conference_utils_test_flag(conference, CFLAG_WAIT_MOD)) ||
(conf_utils_test_flag(conference, CFLAG_WAIT_MOD) && !switch_true(switch_channel_get_variable(channel, "conference_permanent_wait_mod_moh")))) { (conference_utils_test_flag(conference, CFLAG_WAIT_MOD) && !switch_true(switch_channel_get_variable(channel, "conference_permanent_wait_mod_moh")))) {
/* stop MoH if any */ /* stop MoH if any */
conference_file_stop(conference, FILE_STOP_ASYNC); conference_file_stop(conference, FILE_STOP_ASYNC);
} }
if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ) && !zstr(conference->enter_sound)) { if (!switch_channel_test_app_flag_key("conference_silent", channel, CONF_SILENT_REQ) && !zstr(conference->enter_sound)) {
const char * enter_sound = switch_channel_get_variable(channel, "conference_enter_sound"); const char * enter_sound = switch_channel_get_variable(channel, "conference_enter_sound");
if (conf_utils_test_flag(conference, CFLAG_ENTER_SOUND) && !conf_utils_member_test_flag(member, MFLAG_SILENT)) { if (conference_utils_test_flag(conference, CFLAG_ENTER_SOUND) && !conference_utils_member_test_flag(member, MFLAG_SILENT)) {
if (!zstr(enter_sound)) { if (!zstr(enter_sound)) {
conference_file_play(conference, (char *)enter_sound, CONF_DEFAULT_LEADIN, conference_file_play(conference, (char *)enter_sound, CONF_DEFAULT_LEADIN,
switch_core_session_get_channel(member->session), 0); switch_core_session_get_channel(member->session), 0);
@ -769,24 +769,24 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
if (call_list) { if (call_list) {
char saymsg[1024]; char saymsg[1024];
switch_snprintf(saymsg, sizeof(saymsg), "Auto Calling %d parties", call_list->iteration); switch_snprintf(saymsg, sizeof(saymsg), "Auto Calling %d parties", call_list->iteration);
conf_member_say(member, saymsg, 0); conference_member_say(member, saymsg, 0);
} else { } else {
if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ)) { if (!switch_channel_test_app_flag_key("conference_silent", channel, CONF_SILENT_REQ)) {
/* announce the total number of members in the conference */ /* announce the total number of members in the conference */
if (conference->count >= conference->announce_count && conference->announce_count > 1) { if (conference->count >= conference->announce_count && conference->announce_count > 1) {
switch_snprintf(msg, sizeof(msg), "There are %d callers", conference->count); switch_snprintf(msg, sizeof(msg), "There are %d callers", conference->count);
conf_member_say(member, msg, CONF_DEFAULT_LEADIN); conference_member_say(member, msg, CONF_DEFAULT_LEADIN);
} else if (conference->count == 1 && !conference->perpetual_sound && !conf_utils_test_flag(conference, CFLAG_WAIT_MOD)) { } else if (conference->count == 1 && !conference->perpetual_sound && !conference_utils_test_flag(conference, CFLAG_WAIT_MOD)) {
/* as long as its not a bridge_to conference, announce if person is alone */ /* as long as its not a bridge_to conference, announce if person is alone */
if (!conf_utils_test_flag(conference, CFLAG_BRIDGE_TO)) { if (!conference_utils_test_flag(conference, CFLAG_BRIDGE_TO)) {
if (conference->alone_sound && !conf_utils_member_test_flag(member, MFLAG_GHOST)) { if (conference->alone_sound && !conference_utils_member_test_flag(member, MFLAG_GHOST)) {
conference_file_stop(conference, FILE_STOP_ASYNC); conference_file_stop(conference, FILE_STOP_ASYNC);
conference_file_play(conference, conference->alone_sound, CONF_DEFAULT_LEADIN, conference_file_play(conference, conference->alone_sound, CONF_DEFAULT_LEADIN,
switch_core_session_get_channel(member->session), 0); switch_core_session_get_channel(member->session), 0);
} else { } else {
switch_snprintf(msg, sizeof(msg), "You are currently the only person in this conference."); switch_snprintf(msg, sizeof(msg), "You are currently the only person in this conference.");
conf_member_say(member, msg, CONF_DEFAULT_LEADIN); conference_member_say(member, msg, CONF_DEFAULT_LEADIN);
} }
} }
} }
@ -794,35 +794,35 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
} }
if (conference->min && conference->count >= conference->min) { if (conference->min && conference->count >= conference->min) {
conf_utils_set_flag(conference, CFLAG_ENFORCE_MIN); conference_utils_set_flag(conference, CFLAG_ENFORCE_MIN);
} }
if (!switch_channel_test_app_flag_key("conf_silent", channel, CONF_SILENT_REQ) && if (!switch_channel_test_app_flag_key("conference_silent", channel, CONF_SILENT_REQ) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_member_add_event_data(member, event); conference_member_add_event_data(member, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "add-member"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "add-member");
switch_event_fire(&event); switch_event_fire(&event);
} }
switch_channel_clear_app_flag_key("conf_silent", channel, CONF_SILENT_REQ); switch_channel_clear_app_flag_key("conference_silent", channel, CONF_SILENT_REQ);
switch_channel_set_app_flag_key("conf_silent", channel, CONF_SILENT_DONE); switch_channel_set_app_flag_key("conference_silent", channel, CONF_SILENT_DONE);
if ((position = switch_channel_get_variable(channel, "conference_position"))) { if ((position = switch_channel_get_variable(channel, "conference_position"))) {
if (conference->channels == 2) { if (conference->channels == 2) {
if (conf_utils_member_test_flag(member, MFLAG_NO_POSITIONAL)) { if (conference_utils_member_test_flag(member, MFLAG_NO_POSITIONAL)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
"%s has positional audio blocked.\n", switch_channel_get_name(channel)); "%s has positional audio blocked.\n", switch_channel_get_name(channel));
} else { } else {
if (conf_member_parse_position(member, position) != SWITCH_STATUS_SUCCESS) { if (conference_member_parse_position(member, position) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s invalid position data\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s invalid position data\n", switch_channel_get_name(channel));
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s position data set\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s position data set\n", switch_channel_get_name(channel));
} }
conf_utils_member_set_flag(member, MFLAG_POSITIONAL); conference_utils_member_set_flag(member, MFLAG_POSITIONAL);
member->al = conf_al_create(member->pool); member->al = conference_al_create(member->pool);
} }
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s cannot set position data on mono conference.\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s cannot set position data on mono conference.\n", switch_channel_get_name(channel));
@ -834,7 +834,7 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
controls = switch_channel_get_variable(channel, "conference_controls"); controls = switch_channel_get_variable(channel, "conference_controls");
if (zstr(controls)) { if (zstr(controls)) {
if (!conf_utils_member_test_flag(member, MFLAG_MOD) || !conference->moderator_controls) { if (!conference_utils_member_test_flag(member, MFLAG_MOD) || !conference->moderator_controls) {
controls = conference->caller_controls; controls = conference->caller_controls;
} else { } else {
controls = conference->moderator_controls; controls = conference->moderator_controls;
@ -848,7 +848,7 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
if (strcasecmp(controls, "none")) { if (strcasecmp(controls, "none")) {
switch_ivr_dmachine_create(&member->dmachine, "mod_conference", NULL, switch_ivr_dmachine_create(&member->dmachine, "mod_conference", NULL,
conference->ivr_dtmf_timeout, conference->ivr_input_timeout, NULL, NULL, NULL); conference->ivr_dtmf_timeout, conference->ivr_input_timeout, NULL, NULL, NULL);
conf_member_bind_controls(member, controls); conference_member_bind_controls(member, controls);
} }
} }
@ -858,7 +858,7 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
switch_mutex_unlock(member->audio_in_mutex); switch_mutex_unlock(member->audio_in_mutex);
if (conference->la && member->channel && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) { if (conference->la && member->channel && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
if (!conf_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
member->json = cJSON_CreateArray(); member->json = cJSON_CreateArray();
cJSON_AddItemToArray(member->json, cJSON_CreateStringPrintf("%0.4d", member->id)); cJSON_AddItemToArray(member->json, cJSON_CreateStringPrintf("%0.4d", member->id));
cJSON_AddItemToArray(member->json, cJSON_CreateString(switch_channel_get_variable(member->channel, "caller_id_number"))); cJSON_AddItemToArray(member->json, cJSON_CreateString(switch_channel_get_variable(member->channel, "caller_id_number")));
@ -877,35 +877,35 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
cJSON_AddItemToArray(member->json, cJSON_CreateNull()); cJSON_AddItemToArray(member->json, cJSON_CreateNull());
conf_member_update_status_field(member); conference_member_update_status_field(member);
//switch_live_array_add_alias(conference->la, switch_core_session_get_uuid(member->session), "conference"); //switch_live_array_add_alias(conference->la, switch_core_session_get_uuid(member->session), "conference");
} }
conf_event_adv_la(conference, member, SWITCH_TRUE); conference_event_adv_la(conference, member, SWITCH_TRUE);
if (!conf_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
switch_live_array_add(conference->la, switch_core_session_get_uuid(member->session), -1, &member->json, SWITCH_FALSE); switch_live_array_add(conference->la, switch_core_session_get_uuid(member->session), -1, &member->json, SWITCH_FALSE);
} }
} }
if (conf_utils_test_flag(conference, CFLAG_POSITIONAL)) { if (conference_utils_test_flag(conference, CFLAG_POSITIONAL)) {
conf_al_gen_arc(conference, NULL); conference_al_gen_arc(conference, NULL);
} }
conf_event_send_rfc(conference); conference_event_send_rfc(conference);
conf_event_send_json(conference); conference_event_send_json(conference);
switch_mutex_unlock(conference->mutex); switch_mutex_unlock(conference->mutex);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
conf_video_find_floor(member, SWITCH_TRUE); conference_video_find_floor(member, SWITCH_TRUE);
if (conf_utils_member_test_flag(member, MFLAG_JOIN_VID_FLOOR)) { if (conference_utils_member_test_flag(member, MFLAG_JOIN_VID_FLOOR)) {
conf_video_set_floor_holder(conference, member, SWITCH_TRUE); conference_video_set_floor_holder(conference, member, SWITCH_TRUE);
conf_utils_set_flag(member->conference, CFLAG_VID_FLOOR_LOCK); conference_utils_set_flag(member->conference, CFLAG_VID_FLOOR_LOCK);
if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) { if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "conference %s OK video floor %d %s\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "conference %s OK video floor %d %s\n",
@ -916,10 +916,10 @@ switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *mem
return status; return status;
} }
void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *member) void conference_member_set_floor_holder(conference_obj_t *conference, conference_member_t *member)
{ {
switch_event_t *event; switch_event_t *event;
conf_member_t *old_member = NULL; conference_member_t *old_member = NULL;
int old_id = 0; int old_id = 0;
if (conference->floor_holder) { if (conference->floor_holder) {
@ -939,7 +939,7 @@ void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *m
switch_channel_get_name(member->channel)); switch_channel_get_name(member->channel));
conference->floor_holder = member; conference->floor_holder = member;
conf_member_update_status_field(member); conference_member_update_status_field(member);
} else { } else {
conference->floor_holder = NULL; conference->floor_holder = NULL;
} }
@ -947,16 +947,16 @@ void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *m
if (old_member) { if (old_member) {
old_id = old_member->id; old_id = old_member->id;
conf_member_update_status_field(old_member); conference_member_update_status_field(old_member);
old_member->floor_packets = 0; old_member->floor_packets = 0;
} }
conf_utils_set_flag(conference, CFLAG_FLOOR_CHANGE); conference_utils_set_flag(conference, CFLAG_FLOOR_CHANGE);
switch_mutex_unlock(conference->mutex); switch_mutex_unlock(conference->mutex);
if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) { if (test_eflag(conference, EFLAG_FLOOR_CHANGE)) {
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT); switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "floor-change"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "floor-change");
if (old_id) { if (old_id) {
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d", old_id); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Old-ID", "%d", old_id);
@ -965,7 +965,7 @@ void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *m
} }
if (conference->floor_holder) { if (conference->floor_holder) {
conf_member_add_event_data(conference->floor_holder, event); conference_member_add_event_data(conference->floor_holder, event);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", conference->floor_holder->id); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "New-ID", "%d", conference->floor_holder->id);
} else { } else {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "New-ID", "none"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "New-ID", "none");
@ -977,10 +977,10 @@ void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *m
} }
/* Gain exclusive access and remove the member from the list */ /* Gain exclusive access and remove the member from the list */
switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *member) switch_status_t conference_member_del(conference_obj_t *conference, conference_member_t *member)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
conf_member_t *imember, *last = NULL; conference_member_t *imember, *last = NULL;
switch_event_t *event; switch_event_t *event;
conference_file_node_t *member_fnode; conference_file_node_t *member_fnode;
switch_speech_handle_t *member_sh; switch_speech_handle_t *member_sh;
@ -999,18 +999,18 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
lock_member(member); lock_member(member);
conf_member_del_relationship(member, 0); conference_member_del_relationship(member, 0);
conf_cdr_del(member); conference_cdr_del(member);
#ifdef OPENAL_POSITIONING #ifdef OPENAL_POSITIONING
if (member->al && member->al->device) { if (member->al && member->al->device) {
conf_al_close(member->al); conference_al_close(member->al);
} }
#endif #endif
if (member->canvas) { if (member->canvas) {
conf_video_destroy_canvas(&member->canvas); conference_video_destroy_canvas(&member->canvas);
} }
member_fnode = member->fnode; member_fnode = member->fnode;
@ -1032,7 +1032,7 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
switch_mutex_lock(member->audio_in_mutex); switch_mutex_lock(member->audio_in_mutex);
switch_mutex_lock(member->audio_out_mutex); switch_mutex_lock(member->audio_out_mutex);
lock_member(member); lock_member(member);
conf_utils_member_clear_flag(member, MFLAG_INTREE); conference_utils_member_clear_flag(member, MFLAG_INTREE);
if (member->rec) { if (member->rec) {
conference->recording_members--; conference->recording_members--;
@ -1077,11 +1077,11 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
} }
if (member == member->conference->floor_holder) { if (member == member->conference->floor_holder) {
conf_member_set_floor_holder(member->conference, NULL); conference_member_set_floor_holder(member->conference, NULL);
} }
if (member->id == member->conference->video_floor_holder) { if (member->id == member->conference->video_floor_holder) {
conf_utils_clear_flag(member->conference, CFLAG_VID_FLOOR_LOCK); conference_utils_clear_flag(member->conference, CFLAG_VID_FLOOR_LOCK);
if (member->conference->last_video_floor_holder) { if (member->conference->last_video_floor_holder) {
member->conference->video_floor_holder = member->conference->last_video_floor_holder; member->conference->video_floor_holder = member->conference->last_video_floor_holder;
member->conference->last_video_floor_holder = 0; member->conference->last_video_floor_holder = 0;
@ -1089,36 +1089,36 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
member->conference->video_floor_holder = 0; member->conference->video_floor_holder = 0;
} }
if (!conf_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (!conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
switch_channel_t *channel = switch_core_session_get_channel(member->session); switch_channel_t *channel = switch_core_session_get_channel(member->session);
if (conf_utils_member_test_flag(member, MFLAG_GHOST)) { if (conference_utils_member_test_flag(member, MFLAG_GHOST)) {
conference->count_ghosts--; conference->count_ghosts--;
} else { } else {
conference->count--; conference->count--;
} }
if (conf_utils_member_test_flag(member, MFLAG_ENDCONF)) { if (conference_utils_member_test_flag(member, MFLAG_ENDCONF)) {
if (!--conference->end_count) { if (!--conference->end_count) {
//conf_utils_set_flag_locked(conference, CFLAG_DESTRUCT); //conference_utils_set_flag_locked(conference, CFLAG_DESTRUCT);
conference->endconf_time = switch_epoch_time_now(NULL); conference->endconference_time = switch_epoch_time_now(NULL);
} }
} }
conf_send_presence(conference); conference_send_presence(conference);
switch_channel_set_variable(channel, "conference_call_key", NULL); switch_channel_set_variable(channel, "conference_call_key", NULL);
if ((conference->min && conf_utils_test_flag(conference, CFLAG_ENFORCE_MIN) && (conference->count + conference->count_ghosts) < conference->min) if ((conference->min && conference_utils_test_flag(conference, CFLAG_ENFORCE_MIN) && (conference->count + conference->count_ghosts) < conference->min)
|| (conf_utils_test_flag(conference, CFLAG_DYNAMIC) && (conference->count + conference->count_ghosts == 0))) { || (conference_utils_test_flag(conference, CFLAG_DYNAMIC) && (conference->count + conference->count_ghosts == 0))) {
conf_utils_set_flag(conference, CFLAG_DESTRUCT); conference_utils_set_flag(conference, CFLAG_DESTRUCT);
} else { } else {
if (!switch_true(switch_channel_get_variable(channel, "conference_permanent_wait_mod_moh")) && conf_utils_test_flag(conference, CFLAG_WAIT_MOD)) { if (!switch_true(switch_channel_get_variable(channel, "conference_permanent_wait_mod_moh")) && conference_utils_test_flag(conference, CFLAG_WAIT_MOD)) {
/* Stop MOH if any */ /* Stop MOH if any */
conference_file_stop(conference, FILE_STOP_ASYNC); conference_file_stop(conference, FILE_STOP_ASYNC);
} }
if (!exit_sound && conference->exit_sound && conf_utils_test_flag(conference, CFLAG_EXIT_SOUND) && !conf_utils_member_test_flag(member, MFLAG_SILENT)) { if (!exit_sound && conference->exit_sound && conference_utils_test_flag(conference, CFLAG_EXIT_SOUND) && !conference_utils_member_test_flag(member, MFLAG_SILENT)) {
conference_file_play(conference, conference->exit_sound, 0, channel, 0); conference_file_play(conference, conference->exit_sound, 0, channel, 0);
} }
if (conference->count == 1 && conference->alone_sound && !conf_utils_test_flag(conference, CFLAG_WAIT_MOD) && !conf_utils_member_test_flag(member, MFLAG_GHOST)) { if (conference->count == 1 && conference->alone_sound && !conference_utils_test_flag(conference, CFLAG_WAIT_MOD) && !conference_utils_member_test_flag(member, MFLAG_GHOST)) {
conference_file_stop(conference, FILE_STOP_ASYNC); conference_file_stop(conference, FILE_STOP_ASYNC);
conference_file_play(conference, conference->alone_sound, 0, channel, 0); conference_file_play(conference, conference->alone_sound, 0, channel, 0);
} }
@ -1126,15 +1126,15 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
if (test_eflag(conference, EFLAG_DEL_MEMBER) && if (test_eflag(conference, EFLAG_DEL_MEMBER) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_member_add_event_data(member, event); conference_member_add_event_data(member, event);
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "del-member"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "del-member");
switch_event_fire(&event); switch_event_fire(&event);
} }
} }
conf_video_find_floor(member, SWITCH_FALSE); conference_video_find_floor(member, SWITCH_FALSE);
conf_video_detach_video_layer(member); conference_video_detach_video_layer(member);
member->conference = NULL; member->conference = NULL;
@ -1147,14 +1147,14 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
if (conference->la && member->session && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) { if (conference->la && member->session && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
switch_live_array_del(conference->la, switch_core_session_get_uuid(member->session)); switch_live_array_del(conference->la, switch_core_session_get_uuid(member->session));
//switch_live_array_clear_alias(conference->la, switch_core_session_get_uuid(member->session), "conference"); //switch_live_array_clear_alias(conference->la, switch_core_session_get_uuid(member->session), "conference");
conf_event_adv_la(conference, member, SWITCH_FALSE); conference_event_adv_la(conference, member, SWITCH_FALSE);
} }
conf_event_send_rfc(conference); conference_event_send_rfc(conference);
conf_event_send_json(conference); conference_event_send_json(conference);
if (conf_utils_test_flag(conference, CFLAG_POSITIONAL)) { if (conference_utils_test_flag(conference, CFLAG_POSITIONAL)) {
conf_al_gen_arc(conference, NULL); conference_al_gen_arc(conference, NULL);
} }
if (member->session) { if (member->session) {
@ -1167,9 +1167,9 @@ switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *mem
return status; return status;
} }
void conf_member_send_all_dtmf(conf_member_t *member, conference_obj_t *conference, const char *dtmf) void conference_member_send_all_dtmf(conference_member_t *member, conference_obj_t *conference, const char *dtmf)
{ {
conf_member_t *imember; conference_member_t *imember;
switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->mutex);
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
@ -1198,7 +1198,7 @@ void conf_member_send_all_dtmf(conf_member_t *member, conference_obj_t *conferen
/* Play a file in the conference room to a member */ /* Play a file in the conference room to a member */
switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_t leadin, switch_bool_t mux) switch_status_t conference_member_play_file(conference_member_t *member, char *file, uint32_t leadin, switch_bool_t mux)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
char *dfile = NULL, *expanded = NULL; char *dfile = NULL, *expanded = NULL;
@ -1207,7 +1207,7 @@ switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_
int channels = member->conference->channels; int channels = member->conference->channels;
int bad_params = 0; int bad_params = 0;
if (member == NULL || file == NULL || conf_utils_member_test_flag(member, MFLAG_KICKED)) if (member == NULL || file == NULL || conference_utils_member_test_flag(member, MFLAG_KICKED))
return status; return status;
if ((expanded = switch_channel_expand_variables(switch_core_session_get_channel(member->session), file)) != file) { if ((expanded = switch_channel_expand_variables(switch_core_session_get_channel(member->session), file)) != file) {
@ -1217,7 +1217,7 @@ switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_
} }
if (!strncasecmp(file, "say:", 4)) { if (!strncasecmp(file, "say:", 4)) {
if (!zstr(file + 4)) { if (!zstr(file + 4)) {
status = conf_member_say(member, file + 4, leadin); status = conference_member_say(member, file + 4, leadin);
} }
goto done; goto done;
} }
@ -1228,7 +1228,7 @@ switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_
} }
file = dfile; file = dfile;
} else if (!zstr(file)) { } else if (!zstr(file)) {
status = conf_member_say(member, file, leadin); status = conference_member_say(member, file, leadin);
goto done; goto done;
} }
} }
@ -1276,8 +1276,8 @@ switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_
const char *position = switch_event_get_header(fnode->fh.params, "position"); const char *position = switch_event_get_header(fnode->fh.params, "position");
if (!bad_params && !zstr(position) && member->conference->channels == 2) { if (!bad_params && !zstr(position) && member->conference->channels == 2) {
fnode->al = conf_al_create(pool); fnode->al = conference_al_create(pool);
if (conf_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) { if (conference_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) {
switch_core_file_close(&fnode->fh); switch_core_file_close(&fnode->fh);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Invalid Position Data.\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_ERROR, "Invalid Position Data.\n");
fnode->al = NULL; fnode->al = NULL;
@ -1309,7 +1309,7 @@ switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_
} }
/* Say some thing with TTS in the conference room */ /* Say some thing with TTS in the conference room */
switch_status_t conf_member_say(conf_member_t *member, char *text, uint32_t leadin) switch_status_t conference_member_say(conference_member_t *member, char *text, uint32_t leadin)
{ {
conference_obj_t *conference = member->conference; conference_obj_t *conference = member->conference;
conference_file_node_t *fnode, *nptr; conference_file_node_t *fnode, *nptr;
@ -1370,8 +1370,8 @@ switch_status_t conf_member_say(conf_member_t *member, char *text, uint32_t lead
position = NULL; position = NULL;
} else { } else {
channels = 1; channels = 1;
fnode->al = conf_al_create(pool); fnode->al = conference_al_create(pool);
if (conf_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) { if (conference_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) {
fnode->al = NULL; fnode->al = NULL;
channels = conference->channels; channels = conference->channels;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Position Data.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Position Data.\n");
@ -1441,9 +1441,9 @@ switch_status_t conf_member_say(conf_member_t *member, char *text, uint32_t lead
/* execute a callback for every member of the conference */ /* execute a callback for every member of the conference */
void conf_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conf_api_member_cmd_t pfncallback, void *data) void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conference_api_member_cmd_t pfncallback, void *data)
{ {
conf_member_t *member = NULL; conference_member_t *member = NULL;
switch_assert(conference != NULL); switch_assert(conference != NULL);
switch_assert(stream != NULL); switch_assert(stream != NULL);
@ -1451,8 +1451,8 @@ void conf_member_itterator(conference_obj_t *conference, switch_stream_handle_t
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (!(non_mod && conf_utils_member_test_flag(member, MFLAG_MOD))) { if (!(non_mod && conference_utils_member_test_flag(member, MFLAG_MOD))) {
if (member->session && !conf_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (member->session && !conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
pfncallback(member, stream, data); pfncallback(member, stream, data);
} }
} else { } else {
@ -1463,7 +1463,7 @@ void conf_member_itterator(conference_obj_t *conference, switch_stream_handle_t
} }
int conf_member_get_canvas_id(conf_member_t *member, const char *val, switch_bool_t watching) int conference_member_get_canvas_id(conference_member_t *member, const char *val, switch_bool_t watching)
{ {
int index = -1; int index = -1;
int cur; int cur;
@ -1526,7 +1526,7 @@ int conf_member_get_canvas_id(conf_member_t *member, const char *val, switch_boo
} }
int conf_member_setup_media(conf_member_t *member, conference_obj_t *conference) int conference_member_setup_media(conference_member_t *member, conference_obj_t *conference)
{ {
switch_codec_implementation_t read_impl = { 0 }; switch_codec_implementation_t read_impl = { 0 };

View File

@ -41,12 +41,12 @@
*/ */
#include <mod_conference.h> #include <mod_conference.h>
void conf_record_launch_thread(conference_obj_t *conference, char *path, switch_bool_t autorec) void conference_record_launch_thread(conference_obj_t *conference, char *path, switch_bool_t autorec)
{ {
switch_thread_t *thread; switch_thread_t *thread;
switch_threadattr_t *thd_attr = NULL; switch_threadattr_t *thd_attr = NULL;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
conf_record_t *rec; conference_record_t *rec;
/* Setup a memory pool to use. */ /* Setup a memory pool to use. */
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) { if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
@ -73,28 +73,28 @@ void conf_record_launch_thread(conference_obj_t *conference, char *path, switch_
switch_threadattr_create(&thd_attr, rec->pool); switch_threadattr_create(&thd_attr, rec->pool);
switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_detach_set(thd_attr, 1);
switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
switch_thread_create(&thread, thd_attr, conf_record_thread_run, rec, rec->pool); switch_thread_create(&thread, thd_attr, conference_record_thread_run, rec, rec->pool);
} }
/* stop the specified recording */ /* stop the specified recording */
switch_status_t conf_record_stop(conference_obj_t *conference, switch_stream_handle_t *stream, char *path) switch_status_t conference_record_stop(conference_obj_t *conference, switch_stream_handle_t *stream, char *path)
{ {
conf_member_t *member = NULL; conference_member_t *member = NULL;
int count = 0; int count = 0;
switch_assert(conference != NULL); switch_assert(conference != NULL);
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
if (conf_utils_member_test_flag(member, MFLAG_NOCHANNEL) && (!path || !strcmp(path, member->rec_path))) { if (conference_utils_member_test_flag(member, MFLAG_NOCHANNEL) && (!path || !strcmp(path, member->rec_path))) {
if (!conf_utils_test_flag(conference, CFLAG_CONF_RESTART_AUTO_RECORD) && member->rec && member->rec->autorec) { if (!conference_utils_test_flag(conference, CFLAG_CONF_RESTART_AUTO_RECORD) && member->rec && member->rec->autorec) {
stream->write_function(stream, "Stopped AUTO recording file %s (Auto Recording Now Disabled)\n", member->rec_path); stream->write_function(stream, "Stopped AUTO recording file %s (Auto Recording Now Disabled)\n", member->rec_path);
conference->auto_record = 0; conference->auto_record = 0;
} else { } else {
stream->write_function(stream, "Stopped recording file %s\n", member->rec_path); stream->write_function(stream, "Stopped recording file %s\n", member->rec_path);
} }
conf_utils_member_clear_flag_locked(member, MFLAG_RUNNING); conference_utils_member_clear_flag_locked(member, MFLAG_RUNNING);
count++; count++;
} }
@ -106,9 +106,9 @@ switch_status_t conf_record_stop(conference_obj_t *conference, switch_stream_han
return count; return count;
} }
/* stop/pause/resume the specified recording */ /* stop/pause/resume the specified recording */
switch_status_t conf_record_action(conference_obj_t *conference, char *path, recording_action_type_t action) switch_status_t conference_record_action(conference_obj_t *conference, char *path, recording_action_type_t action)
{ {
conf_member_t *member = NULL; conference_member_t *member = NULL;
int count = 0; int count = 0;
//switch_file_handle_t *fh = NULL; //switch_file_handle_t *fh = NULL;
@ -116,21 +116,21 @@ switch_status_t conf_record_action(conference_obj_t *conference, char *path, rec
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) for (member = conference->members; member; member = member->next)
{ {
if (conf_utils_member_test_flag(member, MFLAG_NOCHANNEL) && (!path || !strcmp(path, member->rec_path))) if (conference_utils_member_test_flag(member, MFLAG_NOCHANNEL) && (!path || !strcmp(path, member->rec_path)))
{ {
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Action: %d\n", action); //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Action: %d\n", action);
switch (action) switch (action)
{ {
case REC_ACTION_STOP: case REC_ACTION_STOP:
conf_utils_member_clear_flag_locked(member, MFLAG_RUNNING); conference_utils_member_clear_flag_locked(member, MFLAG_RUNNING);
count++; count++;
break; break;
case REC_ACTION_PAUSE: case REC_ACTION_PAUSE:
conf_utils_member_set_flag_locked(member, MFLAG_PAUSE_RECORDING); conference_utils_member_set_flag_locked(member, MFLAG_PAUSE_RECORDING);
count = 1; count = 1;
break; break;
case REC_ACTION_RESUME: case REC_ACTION_RESUME:
conf_utils_member_clear_flag_locked(member, MFLAG_PAUSE_RECORDING); conference_utils_member_clear_flag_locked(member, MFLAG_PAUSE_RECORDING);
count = 1; count = 1;
break; break;
} }
@ -142,11 +142,11 @@ switch_status_t conf_record_action(conference_obj_t *conference, char *path, rec
/* Sub-Routine called by a record entity inside a conference */ /* Sub-Routine called by a record entity inside a conference */
void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *obj) void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, void *obj)
{ {
int16_t *data_buf; int16_t *data_buf;
conf_member_t smember = { 0 }, *member; conference_member_t smember = { 0 }, *member;
conf_record_t *rp, *last = NULL, *rec = (conf_record_t *) obj; conference_record_t *rp, *last = NULL, *rec = (conference_record_t *) obj;
conference_obj_t *conference = rec->conference; conference_obj_t *conference = rec->conference;
uint32_t samples = switch_samples_per_packet(conference->rate, conference->interval); uint32_t samples = switch_samples_per_packet(conference->rate, conference->interval);
uint32_t mux_used; uint32_t mux_used;
@ -170,9 +170,9 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
data_buf_len = samples * sizeof(int16_t) * conference->channels; data_buf_len = samples * sizeof(int16_t) * conference->channels;
switch_zmalloc(data_buf, data_buf_len); switch_zmalloc(data_buf, data_buf_len);
switch_mutex_lock(conf_globals.hash_mutex); switch_mutex_lock(conference_globals.hash_mutex);
conf_globals.threads++; conference_globals.threads++;
switch_mutex_unlock(conf_globals.hash_mutex); switch_mutex_unlock(conference_globals.hash_mutex);
member = &smember; member = &smember;
@ -221,7 +221,7 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
flags = SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT; flags = SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT;
if (conference->members_with_video && conf_utils_test_flag(conference, CFLAG_TRANSCODE_VIDEO)) { if (conference->members_with_video && conference_utils_test_flag(conference, CFLAG_TRANSCODE_VIDEO)) {
flags |= SWITCH_FILE_FLAG_VIDEO; flags |= SWITCH_FILE_FLAG_VIDEO;
if (conference->canvas) { if (conference->canvas) {
char *orig_path = rec->path; char *orig_path = rec->path;
@ -240,7 +240,7 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
if (test_eflag(conference, EFLAG_RECORD) && if (test_eflag(conference, EFLAG_RECORD) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Error", "File could not be opened for recording"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Error", "File could not be opened for recording");
@ -252,8 +252,8 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->mutex);
if (conference->video_floor_holder) { if (conference->video_floor_holder) {
conf_member_t *member; conference_member_t *member;
if ((member = conf_member_get(conference, conference->video_floor_holder))) { if ((member = conference_member_get(conference, conference->video_floor_holder))) {
if (member->session) { if (member->session) {
switch_core_session_video_reinit(member->session); switch_core_session_video_reinit(member->session);
} }
@ -278,37 +278,37 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
if (test_eflag(conference, EFLAG_RECORD) && if (test_eflag(conference, EFLAG_RECORD) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "start-recording");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
switch_event_fire(&event); switch_event_fire(&event);
} }
if (conf_member_add(conference, member) != SWITCH_STATUS_SUCCESS) { if (conference_member_add(conference, member) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Joining Conference\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Joining Conference\n");
goto end; goto end;
} }
while (conf_utils_member_test_flag(member, MFLAG_RUNNING) && conf_utils_test_flag(conference, CFLAG_RUNNING) && (conference->count + conference->count_ghosts)) { while (conference_utils_member_test_flag(member, MFLAG_RUNNING) && conference_utils_test_flag(conference, CFLAG_RUNNING) && (conference->count + conference->count_ghosts)) {
len = 0; len = 0;
mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer); mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer);
if (conf_utils_member_test_flag(member, MFLAG_FLUSH_BUFFER)) { if (conference_utils_member_test_flag(member, MFLAG_FLUSH_BUFFER)) {
if (mux_used) { if (mux_used) {
switch_mutex_lock(member->audio_out_mutex); switch_mutex_lock(member->audio_out_mutex);
switch_buffer_zero(member->mux_buffer); switch_buffer_zero(member->mux_buffer);
switch_mutex_unlock(member->audio_out_mutex); switch_mutex_unlock(member->audio_out_mutex);
mux_used = 0; mux_used = 0;
} }
conf_utils_member_clear_flag_locked(member, MFLAG_FLUSH_BUFFER); conference_utils_member_clear_flag_locked(member, MFLAG_FLUSH_BUFFER);
} }
again: again:
if (switch_test_flag((&member->rec->fh), SWITCH_FILE_PAUSE)) { if (switch_test_flag((&member->rec->fh), SWITCH_FILE_PAUSE)) {
conf_utils_member_set_flag_locked(member, MFLAG_FLUSH_BUFFER); conference_utils_member_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
goto loop; goto loop;
} }
@ -334,10 +334,10 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
len = (switch_size_t) samples; len = (switch_size_t) samples;
} }
if (!conf_utils_member_test_flag(member, MFLAG_PAUSE_RECORDING)) { if (!conference_utils_member_test_flag(member, MFLAG_PAUSE_RECORDING)) {
if (!len || switch_core_file_write(&member->rec->fh, data_buf, &len) != SWITCH_STATUS_SUCCESS) { if (!len || switch_core_file_write(&member->rec->fh, data_buf, &len) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write Failed\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write Failed\n");
conf_utils_member_clear_flag_locked(member, MFLAG_RUNNING); conference_utils_member_clear_flag_locked(member, MFLAG_RUNNING);
} }
} }
@ -363,7 +363,7 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
switch_safe_free(data_buf); switch_safe_free(data_buf);
switch_core_timer_destroy(&timer); switch_core_timer_destroy(&timer);
conf_member_del(conference, member); conference_member_del(conference, member);
if (conference->canvas) { if (conference->canvas) {
conference->canvas->send_keyframe = 1; conference->canvas->send_keyframe = 1;
@ -371,7 +371,7 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
switch_buffer_destroy(&member->audio_buffer); switch_buffer_destroy(&member->audio_buffer);
switch_buffer_destroy(&member->mux_buffer); switch_buffer_destroy(&member->mux_buffer);
conf_utils_member_clear_flag_locked(member, MFLAG_RUNNING); conference_utils_member_clear_flag_locked(member, MFLAG_RUNNING);
if (switch_test_flag((&member->rec->fh), SWITCH_FILE_OPEN)) { if (switch_test_flag((&member->rec->fh), SWITCH_FILE_OPEN)) {
switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->mutex);
switch_mutex_unlock(conference->mutex); switch_mutex_unlock(conference->mutex);
@ -379,7 +379,7 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Recording of %s Stopped\n", rec->path); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Recording of %s Stopped\n", rec->path);
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) { if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conf_event_add_data(conference, event); conference_event_add_data(conference, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "stop-recording"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "stop-recording");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Path", rec->path);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Samples-Out", "%ld", (long) member->rec->fh.samples_out); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Samples-Out", "%ld", (long) member->rec->fh.samples_out);
@ -411,9 +411,9 @@ void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *o
switch_core_destroy_memory_pool(&pool); switch_core_destroy_memory_pool(&pool);
} }
switch_mutex_lock(conf_globals.hash_mutex); switch_mutex_lock(conference_globals.hash_mutex);
conf_globals.threads--; conference_globals.threads--;
switch_mutex_unlock(conf_globals.hash_mutex); switch_mutex_unlock(conference_globals.hash_mutex);
switch_thread_rwlock_unlock(conference->rwlock); switch_thread_rwlock_unlock(conference->rwlock);
return NULL; return NULL;

View File

@ -41,7 +41,7 @@
*/ */
#include <mod_conference.h> #include <mod_conference.h>
const char *conf_utils_combine_flag_var(switch_core_session_t *session, const char *var_name) const char *conference_utils_combine_flag_var(switch_core_session_t *session, const char *var_name)
{ {
switch_event_header_t *hp; switch_event_header_t *hp;
switch_event_t *event, *cevent; switch_event_t *event, *cevent;
@ -85,7 +85,7 @@ const char *conf_utils_combine_flag_var(switch_core_session_t *session, const ch
} }
void conf_utils_set_mflags(const char *flags, member_flag_t *f) void conference_utils_set_mflags(const char *flags, member_flag_t *f)
{ {
if (flags) { if (flags) {
char *dup = strdup(flags); char *dup = strdup(flags);
@ -150,7 +150,7 @@ void conf_utils_set_mflags(const char *flags, member_flag_t *f)
void conf_utils_set_cflags(const char *flags, conference_flag_t *f) void conference_utils_set_cflags(const char *flags, conference_flag_t *f)
{ {
if (flags) { if (flags) {
char *dup = strdup(flags); char *dup = strdup(flags);
@ -203,7 +203,7 @@ void conf_utils_set_cflags(const char *flags, conference_flag_t *f)
} }
void conf_utils_clear_eflags(char *events, uint32_t *f) void conference_utils_clear_eflags(char *events, uint32_t *f)
{ {
char buf[512] = ""; char buf[512] = "";
char *next = NULL; char *next = NULL;
@ -280,7 +280,7 @@ void conf_utils_clear_eflags(char *events, uint32_t *f)
} }
void conf_utils_merge_mflags(member_flag_t *a, member_flag_t *b) void conference_utils_merge_mflags(member_flag_t *a, member_flag_t *b)
{ {
int x; int x;
@ -289,71 +289,71 @@ void conf_utils_merge_mflags(member_flag_t *a, member_flag_t *b)
} }
} }
void conf_utils_set_flag(conference_obj_t *conference, conference_flag_t flag) void conference_utils_set_flag(conference_obj_t *conference, conference_flag_t flag)
{ {
conference->flags[flag] = 1; conference->flags[flag] = 1;
} }
void conf_utils_set_flag_locked(conference_obj_t *conference, conference_flag_t flag) void conference_utils_set_flag_locked(conference_obj_t *conference, conference_flag_t flag)
{ {
switch_mutex_lock(conference->flag_mutex); switch_mutex_lock(conference->flag_mutex);
conference->flags[flag] = 1; conference->flags[flag] = 1;
switch_mutex_unlock(conference->flag_mutex); switch_mutex_unlock(conference->flag_mutex);
} }
void conf_utils_clear_flag(conference_obj_t *conference, conference_flag_t flag) void conference_utils_clear_flag(conference_obj_t *conference, conference_flag_t flag)
{ {
conference->flags[flag] = 0; conference->flags[flag] = 0;
} }
void conf_utils_clear_flag_locked(conference_obj_t *conference, conference_flag_t flag) void conference_utils_clear_flag_locked(conference_obj_t *conference, conference_flag_t flag)
{ {
switch_mutex_lock(conference->flag_mutex); switch_mutex_lock(conference->flag_mutex);
conference->flags[flag] = 0; conference->flags[flag] = 0;
switch_mutex_unlock(conference->flag_mutex); switch_mutex_unlock(conference->flag_mutex);
} }
switch_bool_t conf_utils_test_flag(conference_obj_t *conference, conference_flag_t flag) switch_bool_t conference_utils_test_flag(conference_obj_t *conference, conference_flag_t flag)
{ {
return !!conference->flags[flag]; return !!conference->flags[flag];
} }
#if 0 #if 0
void conf_utils_conf_utils_set_mflag(conference_obj_t *conference, member_flag_t mflag) void conference_utils_conference_utils_set_mflag(conference_obj_t *conference, member_flag_t mflag)
{ {
conference->mflags[mflag] = 1; conference->mflags[mflag] = 1;
} }
void conf_utils_clear_mflag(conference_obj_t *conference, member_flag_t mflag) void conference_utils_clear_mflag(conference_obj_t *conference, member_flag_t mflag)
{ {
conference->mflags[mflag] = 0; conference->mflags[mflag] = 0;
} }
switch_bool_t conf_utils_test_mflag(conference_obj_t *conference, member_flag_t mflag) switch_bool_t conference_utils_test_mflag(conference_obj_t *conference, member_flag_t mflag)
{ {
return !!conference->mflags[mflag]; return !!conference->mflags[mflag];
} }
#endif #endif
void conf_utils_member_set_flag(conf_member_t *member, member_flag_t flag) void conference_utils_member_set_flag(conference_member_t *member, member_flag_t flag)
{ {
member->flags[flag] = 1; member->flags[flag] = 1;
} }
void conf_utils_member_set_flag_locked(conf_member_t *member, member_flag_t flag) void conference_utils_member_set_flag_locked(conference_member_t *member, member_flag_t flag)
{ {
switch_mutex_lock(member->flag_mutex); switch_mutex_lock(member->flag_mutex);
member->flags[flag] = 1; member->flags[flag] = 1;
switch_mutex_unlock(member->flag_mutex); switch_mutex_unlock(member->flag_mutex);
} }
void conf_utils_member_clear_flag(conf_member_t *member, member_flag_t flag) void conference_utils_member_clear_flag(conference_member_t *member, member_flag_t flag)
{ {
member->flags[flag] = 0; member->flags[flag] = 0;
} }
void conf_utils_member_clear_flag_locked(conf_member_t *member, member_flag_t flag) void conference_utils_member_clear_flag_locked(conference_member_t *member, member_flag_t flag)
{ {
switch_mutex_lock(member->flag_mutex); switch_mutex_lock(member->flag_mutex);
member->flags[flag] = 0; member->flags[flag] = 0;
switch_mutex_unlock(member->flag_mutex); switch_mutex_unlock(member->flag_mutex);
} }
switch_bool_t conf_utils_member_test_flag(conf_member_t *member, member_flag_t flag) switch_bool_t conference_utils_member_test_flag(conference_member_t *member, member_flag_t flag)
{ {
return !!member->flags[flag]; return !!member->flags[flag];
} }

File diff suppressed because it is too large Load Diff

View File

@ -103,7 +103,7 @@
//#define lock_member(_member) switch_mutex_lock(_member->write_mutex) //#define lock_member(_member) switch_mutex_lock(_member->write_mutex)
//#define unlock_member(_member) switch_mutex_unlock(_member->write_mutex) //#define unlock_member(_member) switch_mutex_unlock(_member->write_mutex)
#define CONFFUNCAPISIZE (sizeof(conf_api_sub_commands)/sizeof(conf_api_sub_commands[0])) #define CONFFUNCAPISIZE (sizeof(conference_api_sub_commands)/sizeof(conference_api_sub_commands[0]))
#define MAX_MUX_CODECS 10 #define MAX_MUX_CODECS 10
@ -119,7 +119,7 @@
/* STRUCTS */ /* STRUCTS */
struct conf_fps { struct conference_fps {
float fps; float fps;
int ms; int ms;
int samples; int samples;
@ -129,7 +129,7 @@ struct conf_fps {
typedef enum { typedef enum {
CONF_SILENT_REQ = (1 << 0), CONF_SILENT_REQ = (1 << 0),
CONF_SILENT_DONE = (1 << 1) CONF_SILENT_DONE = (1 << 1)
} conf_app_flag_t; } conference_app_flag_t;
extern char *mod_conference_cf_name; extern char *mod_conference_cf_name;
extern char *api_syntax; extern char *api_syntax;
@ -142,7 +142,7 @@ typedef enum {
} file_stop_t; } file_stop_t;
/* Global Values */ /* Global Values */
typedef struct conf_globals_s { typedef struct conference_globals_s {
switch_memory_pool_t *conference_pool; switch_memory_pool_t *conference_pool;
switch_mutex_t *conference_mutex; switch_mutex_t *conference_mutex;
switch_hash_t *conference_hash; switch_hash_t *conference_hash;
@ -153,13 +153,13 @@ typedef struct conf_globals_s {
int32_t running; int32_t running;
uint32_t threads; uint32_t threads;
switch_event_channel_id_t event_channel_id; switch_event_channel_id_t event_channel_id;
} conf_globals_t; } conference_globals_t;
extern conf_globals_t conf_globals; extern conference_globals_t conference_globals;
/* forward declaration for conference_obj and caller_control */ /* forward declaration for conference_obj and caller_control */
struct conference_member; struct conference_member;
typedef struct conference_member conf_member_t; typedef struct conference_member conference_member_t;
struct caller_control_actions; struct caller_control_actions;
@ -249,17 +249,17 @@ typedef enum {
CFLAG_MAX CFLAG_MAX
} conference_flag_t; } conference_flag_t;
typedef struct conf_cdr_node_s { typedef struct conference_cdr_node_s {
switch_caller_profile_t *cp; switch_caller_profile_t *cp;
char *record_path; char *record_path;
switch_time_t join_time; switch_time_t join_time;
switch_time_t leave_time; switch_time_t leave_time;
member_flag_t mflags[MFLAG_MAX]; member_flag_t mflags[MFLAG_MAX];
uint32_t id; uint32_t id;
conf_member_t *member; conference_member_t *member;
switch_event_t *var_event; switch_event_t *var_event;
struct conf_cdr_node_s *next; struct conference_cdr_node_s *next;
} conf_cdr_node_t; } conference_cdr_node_t;
typedef enum { typedef enum {
CDRR_LOCKED = 1, CDRR_LOCKED = 1,
@ -267,12 +267,12 @@ typedef enum {
CDRR_MAXMEMBERS CDRR_MAXMEMBERS
} cdr_reject_reason_t; } cdr_reject_reason_t;
typedef struct conf_cdr_reject_s { typedef struct conference_cdr_reject_s {
switch_caller_profile_t *cp; switch_caller_profile_t *cp;
switch_time_t reject_time; switch_time_t reject_time;
cdr_reject_reason_t reason; cdr_reject_reason_t reason;
struct conf_cdr_reject_s *next; struct conference_cdr_reject_s *next;
} conf_cdr_reject_t; } conference_cdr_reject_t;
typedef enum { typedef enum {
CDRE_NONE, CDRE_NONE,
@ -353,7 +353,7 @@ typedef struct al_handle_s {
ALfloat pos_z; ALfloat pos_z;
} al_handle_t; } al_handle_t;
void conf_al_close(al_handle_t *al); void conference_al_close(al_handle_t *al);
#else #else
typedef struct al_handle_s { typedef struct al_handle_s {
int unsupported; int unsupported;
@ -388,14 +388,14 @@ typedef enum {
} recording_action_type_t; } recording_action_type_t;
/* conference xml config sections */ /* conference xml config sections */
typedef struct conf_xml_cfg { typedef struct conference_xml_cfg {
switch_xml_t profile; switch_xml_t profile;
switch_xml_t controls; switch_xml_t controls;
} conf_xml_cfg_t; } conference_xml_cfg_t;
struct vid_helper { struct vid_helper {
conf_member_t *member_a; conference_member_t *member_a;
conf_member_t *member_b; conference_member_t *member_b;
int up; int up;
}; };
@ -496,13 +496,13 @@ typedef struct conference_record {
switch_bool_t autorec; switch_bool_t autorec;
struct conference_record *next; struct conference_record *next;
switch_file_handle_t fh; switch_file_handle_t fh;
} conf_record_t; } conference_record_t;
typedef enum { typedef enum {
CONF_VIDEO_MODE_PASSTHROUGH, CONF_VIDEO_MODE_PASSTHROUGH,
CONF_VIDEO_MODE_TRANSCODE, CONF_VIDEO_MODE_TRANSCODE,
CONF_VIDEO_MODE_MUX CONF_VIDEO_MODE_MUX
} conf_video_mode_t; } conference_video_mode_t;
/* Conference Object */ /* Conference Object */
typedef struct conference_obj { typedef struct conference_obj {
@ -540,7 +540,7 @@ typedef struct conference_obj {
char *video_super_canvas_bgcolor; char *video_super_canvas_bgcolor;
char *video_letterbox_bgcolor; char *video_letterbox_bgcolor;
char *no_video_avatar; char *no_video_avatar;
conf_video_mode_t conf_video_mode; conference_video_mode_t conference_video_mode;
int members_with_video; int members_with_video;
int members_with_avatar; int members_with_avatar;
switch_codec_settings_t video_codec_settings; switch_codec_settings_t video_codec_settings;
@ -569,8 +569,8 @@ typedef struct conference_obj {
uint32_t interval; uint32_t interval;
uint32_t channels; uint32_t channels;
switch_mutex_t *mutex; switch_mutex_t *mutex;
conf_member_t *members; conference_member_t *members;
conf_member_t *floor_holder; conference_member_t *floor_holder;
uint32_t video_floor_holder; uint32_t video_floor_holder;
uint32_t last_video_floor_holder; uint32_t last_video_floor_holder;
switch_mutex_t *member_mutex; switch_mutex_t *member_mutex;
@ -598,8 +598,8 @@ typedef struct conference_obj {
int end_count; int end_count;
uint32_t count_ghosts; uint32_t count_ghosts;
/* allow extra time after 'endconf' member leaves */ /* allow extra time after 'endconf' member leaves */
switch_time_t endconf_time; switch_time_t endconference_time;
int endconf_grace_time; int endconference_grace_time;
uint32_t relationship_total; uint32_t relationship_total;
uint32_t score; uint32_t score;
@ -614,15 +614,15 @@ typedef struct conference_obj {
char *uuid_str; char *uuid_str;
uint32_t originating; uint32_t originating;
switch_call_cause_t cancel_cause; switch_call_cause_t cancel_cause;
conf_cdr_node_t *cdr_nodes; conference_cdr_node_t *cdr_nodes;
conf_cdr_reject_t *cdr_rejected; conference_cdr_reject_t *cdr_rejected;
switch_time_t start_time; switch_time_t start_time;
switch_time_t end_time; switch_time_t end_time;
char *log_dir; char *log_dir;
cdr_event_mode_t cdr_event_mode; cdr_event_mode_t cdr_event_mode;
struct vid_helper vh[2]; struct vid_helper vh[2];
struct vid_helper mh; struct vid_helper mh;
conf_record_t *rec_node_head; conference_record_t *rec_node_head;
int last_speech_channels; int last_speech_channels;
mcu_canvas_t *canvas; mcu_canvas_t *canvas;
mcu_canvas_t *canvases[MAX_CANVASES+1]; mcu_canvas_t *canvases[MAX_CANVASES+1];
@ -633,7 +633,7 @@ typedef struct conference_obj {
switch_mutex_t *canvas_mutex; switch_mutex_t *canvas_mutex;
switch_hash_t *layout_hash; switch_hash_t *layout_hash;
switch_hash_t *layout_group_hash; switch_hash_t *layout_group_hash;
struct conf_fps video_fps; struct conference_fps video_fps;
int playing_video_file; int playing_video_file;
int recording_members; int recording_members;
uint32_t video_floor_packets; uint32_t video_floor_packets;
@ -673,7 +673,7 @@ struct conference_member {
switch_codec_t write_codec; switch_codec_t write_codec;
char *rec_path; char *rec_path;
switch_time_t rec_time; switch_time_t rec_time;
conf_record_t *rec; conference_record_t *rec;
uint8_t *frame; uint8_t *frame;
uint8_t *last_frame; uint8_t *last_frame;
uint32_t frame_size; uint32_t frame_size;
@ -702,7 +702,7 @@ struct conference_member {
uint32_t avg_tally; uint32_t avg_tally;
struct conference_member *next; struct conference_member *next;
switch_ivr_dmachine_t *dmachine; switch_ivr_dmachine_t *dmachine;
conf_cdr_node_t *cdr_node; conference_cdr_node_t *cdr_node;
char *kicked_sound; char *kicked_sound;
switch_queue_t *dtmf_queue; switch_queue_t *dtmf_queue;
switch_queue_t *video_queue; switch_queue_t *video_queue;
@ -762,17 +762,17 @@ typedef struct codec_set_s {
uint8_t *packet; uint8_t *packet;
} codec_set_t; } codec_set_t;
typedef void (*conf_key_callback_t) (conf_member_t *, struct caller_control_actions *); typedef void (*conference_key_callback_t) (conference_member_t *, struct caller_control_actions *);
typedef struct { typedef struct {
conf_member_t *member; conference_member_t *member;
caller_control_action_t action; caller_control_action_t action;
conf_key_callback_t handler; conference_key_callback_t handler;
} key_binding_t; } key_binding_t;
struct _mapping { struct _mapping {
const char *name; const char *name;
conf_key_callback_t handler; conference_key_callback_t handler;
}; };
typedef enum { typedef enum {
@ -825,126 +825,126 @@ struct bg_call {
/* FUNCTION DEFINITIONS */ /* FUNCTION DEFINITIONS */
switch_bool_t conf_utils_test_flag(conference_obj_t *conference, conference_flag_t flag); switch_bool_t conference_utils_test_flag(conference_obj_t *conference, conference_flag_t flag);
conference_relationship_t *conf_member_get_relationship(conf_member_t *member, conf_member_t *other_member); conference_relationship_t *conference_member_get_relationship(conference_member_t *member, conference_member_t *other_member);
uint32_t next_member_id(void); uint32_t next_member_id(void);
void conf_utils_set_cflags(const char *flags, conference_flag_t *f); void conference_utils_set_cflags(const char *flags, conference_flag_t *f);
void conf_utils_set_mflags(const char *flags, member_flag_t *f); void conference_utils_set_mflags(const char *flags, member_flag_t *f);
void conf_utils_merge_mflags(member_flag_t *a, member_flag_t *b); void conference_utils_merge_mflags(member_flag_t *a, member_flag_t *b);
void conf_utils_clear_eflags(char *events, uint32_t *f); void conference_utils_clear_eflags(char *events, uint32_t *f);
void conf_event_pres_handler(switch_event_t *event); void conference_event_pres_handler(switch_event_t *event);
void conf_data_event_handler(switch_event_t *event); void conference_data_event_handler(switch_event_t *event);
void conf_event_call_setup_handler(switch_event_t *event); void conference_event_call_setup_handler(switch_event_t *event);
void conf_member_add_file_data(conf_member_t *member, int16_t *data, switch_size_t file_data_len); void conference_member_add_file_data(conference_member_t *member, int16_t *data, switch_size_t file_data_len);
void conf_send_notify(conference_obj_t *conference, const char *status, const char *call_id, switch_bool_t final); void conference_send_notify(conference_obj_t *conference, const char *status, const char *call_id, switch_bool_t final);
switch_status_t conference_file_close(conference_obj_t *conference, conference_file_node_t *node); switch_status_t conference_file_close(conference_obj_t *conference, conference_file_node_t *node);
void *SWITCH_THREAD_FUNC conf_record_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, void *obj);
void conf_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream); void conference_al_gen_arc(conference_obj_t *conference, switch_stream_handle_t *stream);
void conf_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate); void conference_al_process(al_handle_t *al, void *data, switch_size_t datalen, int rate);
void conf_utils_member_set_flag_locked(conf_member_t *member, member_flag_t flag); void conference_utils_member_set_flag_locked(conference_member_t *member, member_flag_t flag);
void conf_utils_member_set_flag(conf_member_t *member, member_flag_t flag); void conference_utils_member_set_flag(conference_member_t *member, member_flag_t flag);
void conf_member_update_status_field(conf_member_t *member); void conference_member_update_status_field(conference_member_t *member);
void conf_video_vmute_snap(conf_member_t *member, switch_bool_t clear); void conference_video_vmute_snap(conference_member_t *member, switch_bool_t clear);
void conf_video_reset_video_bitrate_counters(conf_member_t *member); void conference_video_reset_video_bitrate_counters(conference_member_t *member);
void conf_video_clear_layer(mcu_layer_t *layer); void conference_video_clear_layer(mcu_layer_t *layer);
int conf_member_get_canvas_id(conf_member_t *member, const char *val, switch_bool_t watching); int conference_member_get_canvas_id(conference_member_t *member, const char *val, switch_bool_t watching);
void conf_video_reset_member_codec_index(conf_member_t *member); void conference_video_reset_member_codec_index(conference_member_t *member);
void conf_video_detach_video_layer(conf_member_t *member); void conference_video_detach_video_layer(conference_member_t *member);
void conf_utils_set_flag(conference_obj_t *conference, conference_flag_t flag); void conference_utils_set_flag(conference_obj_t *conference, conference_flag_t flag);
void conf_utils_set_flag_locked(conference_obj_t *conference, conference_flag_t flag); void conference_utils_set_flag_locked(conference_obj_t *conference, conference_flag_t flag);
void conf_utils_clear_flag(conference_obj_t *conference, conference_flag_t flag); void conference_utils_clear_flag(conference_obj_t *conference, conference_flag_t flag);
void conf_utils_clear_flag_locked(conference_obj_t *conference, conference_flag_t flag); void conference_utils_clear_flag_locked(conference_obj_t *conference, conference_flag_t flag);
switch_status_t conf_loop_dmachine_dispatcher(switch_ivr_dmachine_match_t *match); switch_status_t conference_loop_dmachine_dispatcher(switch_ivr_dmachine_match_t *match);
int conf_member_setup_media(conf_member_t *member, conference_obj_t *conference); int conference_member_setup_media(conference_member_t *member, conference_obj_t *conference);
al_handle_t *conf_al_create(switch_memory_pool_t *pool); al_handle_t *conference_al_create(switch_memory_pool_t *pool);
switch_status_t conf_member_parse_position(conf_member_t *member, const char *data); switch_status_t conference_member_parse_position(conference_member_t *member, const char *data);
video_layout_t *conf_video_find_best_layout(conference_obj_t *conference, layout_group_t *lg, uint32_t count); video_layout_t *conference_video_find_best_layout(conference_obj_t *conference, layout_group_t *lg, uint32_t count);
void conf_list_count_only(conference_obj_t *conference, switch_stream_handle_t *stream); void conference_list_count_only(conference_obj_t *conference, switch_stream_handle_t *stream);
void conf_member_set_floor_holder(conference_obj_t *conference, conf_member_t *member); void conference_member_set_floor_holder(conference_obj_t *conference, conference_member_t *member);
void conf_utils_member_clear_flag(conf_member_t *member, member_flag_t flag); void conference_utils_member_clear_flag(conference_member_t *member, member_flag_t flag);
void conf_utils_member_clear_flag_locked(conf_member_t *member, member_flag_t flag); void conference_utils_member_clear_flag_locked(conference_member_t *member, member_flag_t flag);
switch_status_t conf_video_attach_video_layer(conf_member_t *member, mcu_canvas_t *canvas, int idx); switch_status_t conference_video_attach_video_layer(conference_member_t *member, mcu_canvas_t *canvas, int idx);
int conf_video_set_fps(conference_obj_t *conference, float fps); int conference_video_set_fps(conference_obj_t *conference, float fps);
void conf_video_layer_set_logo(conf_member_t *member, mcu_layer_t *layer, const char *path); void conference_video_layer_set_logo(conference_member_t *member, mcu_layer_t *layer, const char *path);
void conf_video_layer_set_banner(conf_member_t *member, mcu_layer_t *layer, const char *text); void conference_video_layer_set_banner(conference_member_t *member, mcu_layer_t *layer, const char *text);
void conf_fnode_seek(conference_file_node_t *fnode, switch_stream_handle_t *stream, char *arg); void conference_fnode_seek(conference_file_node_t *fnode, switch_stream_handle_t *stream, char *arg);
uint32_t conf_member_stop_file(conf_member_t *member, file_stop_t stop); uint32_t conference_member_stop_file(conference_member_t *member, file_stop_t stop);
switch_bool_t conf_utils_member_test_flag(conf_member_t *member, member_flag_t flag); switch_bool_t conference_utils_member_test_flag(conference_member_t *member, member_flag_t flag);
void conf_list_pretty(conference_obj_t *conference, switch_stream_handle_t *stream); void conference_list_pretty(conference_obj_t *conference, switch_stream_handle_t *stream);
switch_status_t conf_record_stop(conference_obj_t *conference, switch_stream_handle_t *stream, char *path); switch_status_t conference_record_stop(conference_obj_t *conference, switch_stream_handle_t *stream, char *path);
switch_status_t conf_record_action(conference_obj_t *conference, char *path, recording_action_type_t action); switch_status_t conference_record_action(conference_obj_t *conference, char *path, recording_action_type_t action);
void conf_xlist(conference_obj_t *conference, switch_xml_t x_conference, int off); void conference_xlist(conference_obj_t *conference, switch_xml_t x_conference, int off);
void conf_event_send_json(conference_obj_t *conference); void conference_event_send_json(conference_obj_t *conference);
void conf_event_send_rfc(conference_obj_t *conference); void conference_event_send_rfc(conference_obj_t *conference);
void conf_member_update_status_field(conf_member_t *member); void conference_member_update_status_field(conference_member_t *member);
void conf_event_la_command_handler(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data); void conference_event_la_command_handler(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data);
void conf_event_adv_la(conference_obj_t *conference, conf_member_t *member, switch_bool_t join); void conference_event_adv_la(conference_obj_t *conference, conference_member_t *member, switch_bool_t join);
switch_status_t conf_video_init_canvas(conference_obj_t *conference, video_layout_t *vlayout, mcu_canvas_t **canvasP); switch_status_t conference_video_init_canvas(conference_obj_t *conference, video_layout_t *vlayout, mcu_canvas_t **canvasP);
switch_status_t conf_video_attach_canvas(conference_obj_t *conference, mcu_canvas_t *canvas, int super); switch_status_t conference_video_attach_canvas(conference_obj_t *conference, mcu_canvas_t *canvas, int super);
void conf_video_init_canvas_layers(conference_obj_t *conference, mcu_canvas_t *canvas, video_layout_t *vlayout); void conference_video_init_canvas_layers(conference_obj_t *conference, mcu_canvas_t *canvas, video_layout_t *vlayout);
switch_status_t conf_video_attach_video_layer(conf_member_t *member, mcu_canvas_t *canvas, int idx); switch_status_t conference_video_attach_video_layer(conference_member_t *member, mcu_canvas_t *canvas, int idx);
void conf_video_reset_video_bitrate_counters(conf_member_t *member); void conference_video_reset_video_bitrate_counters(conference_member_t *member);
void conf_video_layer_set_banner(conf_member_t *member, mcu_layer_t *layer, const char *text); void conference_video_layer_set_banner(conference_member_t *member, mcu_layer_t *layer, const char *text);
void conf_video_layer_set_logo(conf_member_t *member, mcu_layer_t *layer, const char *path); void conference_video_layer_set_logo(conference_member_t *member, mcu_layer_t *layer, const char *path);
void conf_video_detach_video_layer(conf_member_t *member); void conference_video_detach_video_layer(conference_member_t *member);
void conf_video_check_used_layers(mcu_canvas_t *canvas); void conference_video_check_used_layers(mcu_canvas_t *canvas);
void conf_video_set_canvas_letterbox_bgcolor(mcu_canvas_t *canvas, char *color); void conference_video_set_canvas_letterbox_bgcolor(mcu_canvas_t *canvas, char *color);
void conf_video_set_canvas_bgcolor(mcu_canvas_t *canvas, char *color); void conference_video_set_canvas_bgcolor(mcu_canvas_t *canvas, char *color);
void conf_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg, switch_bool_t freeze); void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg, switch_bool_t freeze);
void conf_video_reset_layer(mcu_layer_t *layer); void conference_video_reset_layer(mcu_layer_t *layer);
void conf_video_clear_layer(mcu_layer_t *layer); void conference_video_clear_layer(mcu_layer_t *layer);
void conf_video_reset_image(switch_image_t *img, switch_rgb_color_t *color); void conference_video_reset_image(switch_image_t *img, switch_rgb_color_t *color);
void conf_video_parse_layouts(conference_obj_t *conference, int WIDTH, int HEIGHT); void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int HEIGHT);
int conf_video_set_fps(conference_obj_t *conference, float fps); int conference_video_set_fps(conference_obj_t *conference, float fps);
video_layout_t *conf_video_get_layout(conference_obj_t *conference, const char *video_layout_name, const char *video_layout_group); video_layout_t *conference_video_get_layout(conference_obj_t *conference, const char *video_layout_name, const char *video_layout_group);
void conf_video_check_avatar(conf_member_t *member, switch_bool_t force); void conference_video_check_avatar(conference_member_t *member, switch_bool_t force);
void conf_video_find_floor(conf_member_t *member, switch_bool_t entering); void conference_video_find_floor(conference_member_t *member, switch_bool_t entering);
void conf_video_destroy_canvas(mcu_canvas_t **canvasP); void conference_video_destroy_canvas(mcu_canvas_t **canvasP);
void conf_video_fnode_check(conference_file_node_t *fnode); void conference_video_fnode_check(conference_file_node_t *fnode);
switch_status_t conf_al_parse_position(al_handle_t *al, const char *data); switch_status_t conference_al_parse_position(al_handle_t *al, const char *data);
switch_status_t conf_video_thread_callback(switch_core_session_t *session, switch_frame_t *frame, void *user_data); switch_status_t conference_video_thread_callback(switch_core_session_t *session, switch_frame_t *frame, void *user_data);
void *SWITCH_THREAD_FUNC conf_video_muxing_write_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_t *thread, void *obj);
void conf_member_check_agc_levels(conf_member_t *member); void conference_member_check_agc_levels(conference_member_t *member);
void conf_member_clear_avg(conf_member_t *member); void conference_member_clear_avg(conference_member_t *member);
int conf_member_noise_gate_check(conf_member_t *member); int conference_member_noise_gate_check(conference_member_t *member);
void conf_member_check_channels(switch_frame_t *frame, conf_member_t *member, switch_bool_t in); void conference_member_check_channels(switch_frame_t *frame, conference_member_t *member, switch_bool_t in);
void conf_fnode_toggle_pause(conference_file_node_t *fnode, switch_stream_handle_t *stream); void conference_fnode_toggle_pause(conference_file_node_t *fnode, switch_stream_handle_t *stream);
// static conference_relationship_t *conf_member_get_relationship(conf_member_t *member, conf_member_t *other_member); // static conference_relationship_t *conference_member_get_relationship(conference_member_t *member, conference_member_t *other_member);
// static void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim); // static void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim);
conference_relationship_t *conf_member_add_relationship(conf_member_t *member, uint32_t id); conference_relationship_t *conference_member_add_relationship(conference_member_t *member, uint32_t id);
conf_member_t *conf_member_get(conference_obj_t *conference, uint32_t id); conference_member_t *conference_member_get(conference_obj_t *conference, uint32_t id);
switch_status_t conf_member_del_relationship(conf_member_t *member, uint32_t id); switch_status_t conference_member_del_relationship(conference_member_t *member, uint32_t id);
switch_status_t conf_member_add(conference_obj_t *conference, conf_member_t *member); switch_status_t conference_member_add(conference_obj_t *conference, conference_member_t *member);
switch_status_t conf_member_del(conference_obj_t *conference, conf_member_t *member); switch_status_t conference_member_del(conference_obj_t *conference, conference_member_t *member);
void *SWITCH_THREAD_FUNC conf_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *obj);
void *SWITCH_THREAD_FUNC conf_video_muxing_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thread, void *obj);
void *SWITCH_THREAD_FUNC conf_video_super_muxing_thread_run(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_t *thread, void *obj);
void conf_loop_output(conf_member_t *member); void conference_loop_output(conference_member_t *member);
uint32_t conference_file_stop(conference_obj_t *conference, file_stop_t stop); uint32_t conference_file_stop(conference_obj_t *conference, file_stop_t stop);
switch_status_t conference_file_play(conference_obj_t *conference, char *file, uint32_t leadin, switch_channel_t *channel, uint8_t async); switch_status_t conference_file_play(conference_obj_t *conference, char *file, uint32_t leadin, switch_channel_t *channel, uint8_t async);
void conf_member_send_all_dtmf(conf_member_t *member, conference_obj_t *conference, const char *dtmf); void conference_member_send_all_dtmf(conference_member_t *member, conference_obj_t *conference, const char *dtmf);
switch_status_t conf_say(conference_obj_t *conference, const char *text, uint32_t leadin); switch_status_t conference_say(conference_obj_t *conference, const char *text, uint32_t leadin);
conference_obj_t *conf_find(char *name, char *domain); conference_obj_t *conference_find(char *name, char *domain);
void conf_member_bind_controls(conf_member_t *member, const char *controls); void conference_member_bind_controls(conference_member_t *member, const char *controls);
void conf_send_presence(conference_obj_t *conference); void conference_send_presence(conference_obj_t *conference);
void conf_video_set_floor_holder(conference_obj_t *conference, conf_member_t *member, switch_bool_t force); void conference_video_set_floor_holder(conference_obj_t *conference, conference_member_t *member, switch_bool_t force);
void conf_video_canvas_del_fnode_layer(conference_obj_t *conference, conference_file_node_t *fnode); void conference_video_canvas_del_fnode_layer(conference_obj_t *conference, conference_file_node_t *fnode);
void conf_video_canvas_set_fnode_layer(mcu_canvas_t *canvas, conference_file_node_t *fnode, int idx); void conference_video_canvas_set_fnode_layer(mcu_canvas_t *canvas, conference_file_node_t *fnode, int idx);
void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim); void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim);
const char *conf_utils_combine_flag_var(switch_core_session_t *session, const char *var_name); const char *conference_utils_combine_flag_var(switch_core_session_t *session, const char *var_name);
int conf_loop_mapping_len(); int conference_loop_mapping_len();
switch_status_t conf_outcall(conference_obj_t *conference, switch_status_t conference_outcall(conference_obj_t *conference,
char *conference_name, char *conference_name,
switch_core_session_t *session, switch_core_session_t *session,
char *bridgeto, uint32_t timeout, char *bridgeto, uint32_t timeout,
@ -954,139 +954,139 @@ switch_status_t conf_outcall(conference_obj_t *conference,
char *profile, char *profile,
switch_call_cause_t *cause, switch_call_cause_t *cause,
switch_call_cause_t *cancel_cause, switch_event_t *var_event); switch_call_cause_t *cancel_cause, switch_event_t *var_event);
switch_status_t conf_outcall_bg(conference_obj_t *conference, switch_status_t conference_outcall_bg(conference_obj_t *conference,
char *conference_name, char *conference_name,
switch_core_session_t *session, char *bridgeto, uint32_t timeout, const char *flags, const char *cid_name, switch_core_session_t *session, char *bridgeto, uint32_t timeout, const char *flags, const char *cid_name,
const char *cid_num, const char *call_uuid, const char *profile, switch_call_cause_t *cancel_cause, const char *cid_num, const char *call_uuid, const char *profile, switch_call_cause_t *cancel_cause,
switch_event_t **var_event); switch_event_t **var_event);
void conf_video_launch_muxing_thread(conference_obj_t *conference, mcu_canvas_t *canvas, int super); void conference_video_launch_muxing_thread(conference_obj_t *conference, mcu_canvas_t *canvas, int super);
void conf_launch_thread(conference_obj_t *conference); void conference_launch_thread(conference_obj_t *conference);
void conf_video_launch_muxing_write_thread(conf_member_t *member); void conference_video_launch_muxing_write_thread(conference_member_t *member);
void *SWITCH_THREAD_FUNC conf_loop_input(switch_thread_t *thread, void *obj); void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *obj);
switch_status_t conference_file_local_play(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin, void *buf, switch_status_t conference_file_local_play(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin, void *buf,
uint32_t buflen); uint32_t buflen);
switch_status_t conf_member_play_file(conf_member_t *member, char *file, uint32_t leadin, switch_bool_t mux); switch_status_t conference_member_play_file(conference_member_t *member, char *file, uint32_t leadin, switch_bool_t mux);
switch_status_t conf_member_say(conf_member_t *member, char *text, uint32_t leadin); switch_status_t conference_member_say(conference_member_t *member, char *text, uint32_t leadin);
uint32_t conf_member_stop_file(conf_member_t *member, file_stop_t stop); uint32_t conference_member_stop_file(conference_member_t *member, file_stop_t stop);
conference_obj_t *conf_new(char *name, conf_xml_cfg_t cfg, switch_core_session_t *session, switch_memory_pool_t *pool); conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_core_session_t *session, switch_memory_pool_t *pool);
switch_status_t chat_send(switch_event_t *message_event); switch_status_t chat_send(switch_event_t *message_event);
void conf_record_launch_thread(conference_obj_t *conference, char *path, switch_bool_t autorec); void conference_record_launch_thread(conference_obj_t *conference, char *path, switch_bool_t autorec);
typedef switch_status_t (*conf_api_args_cmd_t) (conference_obj_t *, switch_stream_handle_t *, int, char **); typedef switch_status_t (*conference_api_args_cmd_t) (conference_obj_t *, switch_stream_handle_t *, int, char **);
typedef switch_status_t (*conf_api_member_cmd_t) (conf_member_t *, switch_stream_handle_t *, void *); typedef switch_status_t (*conference_api_member_cmd_t) (conference_member_t *, switch_stream_handle_t *, void *);
typedef switch_status_t (*conf_api_text_cmd_t) (conference_obj_t *, switch_stream_handle_t *, const char *); typedef switch_status_t (*conference_api_text_cmd_t) (conference_obj_t *, switch_stream_handle_t *, const char *);
switch_status_t conf_event_add_data(conference_obj_t *conference, switch_event_t *event); switch_status_t conference_event_add_data(conference_obj_t *conference, switch_event_t *event);
switch_status_t conf_member_add_event_data(conf_member_t *member, switch_event_t *event); switch_status_t conference_member_add_event_data(conference_member_t *member, switch_event_t *event);
cJSON *conf_cdr_json_render(conference_obj_t *conference, cJSON *req); cJSON *conference_cdr_json_render(conference_obj_t *conference, cJSON *req);
char *conf_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *event, switch_event_t *revent); char *conference_cdr_rfc4579_render(conference_obj_t *conference, switch_event_t *event, switch_event_t *revent);
void conf_cdr_del(conf_member_t *member); void conference_cdr_del(conference_member_t *member);
void conf_cdr_add(conf_member_t *member); void conference_cdr_add(conference_member_t *member);
void conf_cdr_rejected(conference_obj_t *conference, switch_channel_t *channel, cdr_reject_reason_t reason); void conference_cdr_rejected(conference_obj_t *conference, switch_channel_t *channel, cdr_reject_reason_t reason);
void conf_cdr_render(conference_obj_t *conference); void conference_cdr_render(conference_obj_t *conference);
void conf_event_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id); void conference_event_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id);
void conf_event_la_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id); void conference_event_la_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id);
void conf_event_mod_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id); void conference_event_mod_channel_handler(const char *event_channel, cJSON *json, const char *key, switch_event_channel_id_t id);
void conf_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conf_api_member_cmd_t pfncallback, void *data); void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, uint8_t non_mod, conference_api_member_cmd_t pfncallback, void *data);
switch_status_t conf_api_sub_mute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_tmute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_tmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_unmute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_unmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_vmute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_tvmute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_tvmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_unvmute(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_unvmute(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_deaf(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_deaf(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_undeaf(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_undeaf(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_floor(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_floor(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_vid_floor(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vid_floor(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_clear_vid_floor(conference_obj_t *conference, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_clear_vid_floor(conference_obj_t *conference, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_position(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_position(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_conf_video_vmute_snap(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_conference_video_vmute_snap(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_dtmf(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_dtmf(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_pause_play(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_pause_play(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_play(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_play(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_say(conference_obj_t *conference, switch_stream_handle_t *stream, const char *text); switch_status_t conference_api_sub_say(conference_obj_t *conference, switch_stream_handle_t *stream, const char *text);
switch_status_t conf_api_sub_dial(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_dial(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_agc(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_agc(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_bgdial(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_bgdial(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_auto_position(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_auto_position(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_saymember(conference_obj_t *conference, switch_stream_handle_t *stream, const char *text); switch_status_t conference_api_sub_saymember(conference_obj_t *conference, switch_stream_handle_t *stream, const char *text);
switch_status_t conf_api_sub_check_record(conference_obj_t *conference, switch_stream_handle_t *stream, int arc, char **argv); switch_status_t conference_api_sub_check_record(conference_obj_t *conference, switch_stream_handle_t *stream, int arc, char **argv);
switch_status_t conf_api_sub_check_record(conference_obj_t *conference, switch_stream_handle_t *stream, int arc, char **argv); switch_status_t conference_api_sub_check_record(conference_obj_t *conference, switch_stream_handle_t *stream, int arc, char **argv);
switch_status_t conf_api_sub_volume_in(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_volume_in(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_file_seek(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_file_seek(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_stop(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_stop(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_hup(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_hup(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_pauserec(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_pauserec(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_volume_out(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_volume_out(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_lock(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_lock(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_unlock(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_unlock(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_relate(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_relate(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_pin(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_pin(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_exit_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_exit_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_vid_banner(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vid_banner(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_enter_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_enter_sound(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_set(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_set(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_vid_res_id(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_get(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_get(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_vid_mute_img(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vid_mute_img(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_vid_logo_img(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_vid_logo_img(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_vid_fps(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_vid_fps(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_write_png(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_write_png(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_file_vol(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_file_vol(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_recording(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_recording(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_vid_layout(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_vid_layout(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_list(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_list(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_xml_list(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_xml_list(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_energy(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_energy(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_watching_canvas(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_watching_canvas(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_canvas(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_canvas(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_layer(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_layer(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_kick(conf_member_t *member, switch_stream_handle_t *stream, void *data); switch_status_t conference_api_sub_kick(conference_member_t *member, switch_stream_handle_t *stream, void *data);
switch_status_t conf_api_sub_transfer(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_transfer(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_record(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_record(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_norecord(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_norecord(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_sub_vid_bandwidth(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv); switch_status_t conference_api_sub_vid_bandwidth(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv);
switch_status_t conf_api_dispatch(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv, const char *cmdline, int argn); switch_status_t conference_api_dispatch(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv, const char *cmdline, int argn);
switch_status_t conf_api_sub_syntax(char **syntax); switch_status_t conference_api_sub_syntax(char **syntax);
switch_status_t conf_api_main_real(const char *cmd, switch_core_session_t *session, switch_stream_handle_t *stream); switch_status_t conference_api_main_real(const char *cmd, switch_core_session_t *session, switch_stream_handle_t *stream);
void conf_loop_mute_on(conf_member_t *member, caller_control_action_t *action); void conference_loop_mute_on(conference_member_t *member, caller_control_action_t *action);
void conf_loop_mute_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_mute_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_energy_dn(conf_member_t *member, caller_control_action_t *action); void conference_loop_energy_dn(conference_member_t *member, caller_control_action_t *action);
void conf_loop_energy_equ_conf(conf_member_t *member, caller_control_action_t *action); void conference_loop_energy_equ_conf(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_talk_zero(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_talk_zero(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_talk_up(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_talk_up(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_listen_dn(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_listen_dn(conference_member_t *member, caller_control_action_t *action);
void conf_loop_lock_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_lock_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_listen_up(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_listen_up(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_listen_zero(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_listen_zero(conference_member_t *member, caller_control_action_t *action);
void conf_loop_volume_talk_dn(conf_member_t *member, caller_control_action_t *action); void conference_loop_volume_talk_dn(conference_member_t *member, caller_control_action_t *action);
void conf_loop_energy_up(conf_member_t *member, caller_control_action_t *action); void conference_loop_energy_up(conference_member_t *member, caller_control_action_t *action);
void conf_loop_floor_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_floor_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_vid_floor_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_vid_floor_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_energy_up(conf_member_t *member, caller_control_action_t *action); void conference_loop_energy_up(conference_member_t *member, caller_control_action_t *action);
void conf_loop_floor_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_floor_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_vid_floor_force(conf_member_t *member, caller_control_action_t *action); void conference_loop_vid_floor_force(conference_member_t *member, caller_control_action_t *action);
void conf_loop_vmute_off(conf_member_t *member, caller_control_action_t *action); void conference_loop_vmute_off(conference_member_t *member, caller_control_action_t *action);
void conf_loop_conf_video_vmute_snap(conf_member_t *member, caller_control_action_t *action); void conference_loop_conference_video_vmute_snap(conference_member_t *member, caller_control_action_t *action);
void conf_loop_conf_video_vmute_snapoff(conf_member_t *member, caller_control_action_t *action); void conference_loop_conference_video_vmute_snapoff(conference_member_t *member, caller_control_action_t *action);
void conf_loop_vmute_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_vmute_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_vmute_on(conf_member_t *member, caller_control_action_t *action); void conference_loop_vmute_on(conference_member_t *member, caller_control_action_t *action);
void conf_loop_deafmute_toggle(conf_member_t *member, caller_control_action_t *action); void conference_loop_deafmute_toggle(conference_member_t *member, caller_control_action_t *action);
void conf_loop_hangup(conf_member_t *member, caller_control_action_t *action); void conference_loop_hangup(conference_member_t *member, caller_control_action_t *action);
void conf_loop_transfer(conf_member_t *member, caller_control_action_t *action); void conference_loop_transfer(conference_member_t *member, caller_control_action_t *action);
void conf_loop_mute_off(conf_member_t *member, caller_control_action_t *action); void conference_loop_mute_off(conference_member_t *member, caller_control_action_t *action);
void conf_loop_event(conf_member_t *member, caller_control_action_t *action); void conference_loop_event(conference_member_t *member, caller_control_action_t *action);
void conf_loop_transfer(conf_member_t *member, caller_control_action_t *action); void conference_loop_transfer(conference_member_t *member, caller_control_action_t *action);
void conf_loop_exec_app(conf_member_t *member, caller_control_action_t *action); void conference_loop_exec_app(conference_member_t *member, caller_control_action_t *action);
@ -1095,7 +1095,7 @@ void conf_loop_exec_app(conf_member_t *member, caller_control_action_t *action);
/* API Interface Function sub-commands */ /* API Interface Function sub-commands */
/* Entries in this list should be kept in sync with the enum above */ /* Entries in this list should be kept in sync with the enum above */
extern api_command_t conf_api_sub_commands[]; extern api_command_t conference_api_sub_commands[];
extern struct _mapping control_mappings[]; extern struct _mapping control_mappings[];