}
if (!member->conference->canvases[0]) {
- stream->write_function(stream, "-ERR Conference is not in mixing mode\n");
+ if (stream) stream->write_function(stream, "-ERR Conference is not in mixing mode\n");
return SWITCH_STATUS_SUCCESS;
}
char *dtmf = (char *) data;
if (member == NULL) {
- stream->write_function(stream, "-ERR Invalid member!\n");
+ if (stream != NULL) stream->write_function(stream, "-ERR Invalid member!\n");
return SWITCH_STATUS_GENERR;
}
if (zstr(dtmf)) {
- stream->write_function(stream, "-ERR Invalid input!\n");
+ if (stream != NULL) stream->write_function(stream, "-ERR Invalid input!\n");
return SWITCH_STATUS_GENERR;
} else {
char *p;
if (member->max_energy_level && member->max_energy_level < member->energy_level) {
member->max_energy_level = 0;
- stream->write_function(stream, "-ERR %u Max-Energy cannot exceed energy level.\n", member->id);
+ if (stream != NULL) stream->write_function(stream, "-ERR %u Max-Energy cannot exceed energy level.\n", member->id);
} else if (data) {
char *p, *q;
if ((p = strchr(data, ':'))) {
}
if (argv[4]) {
-
- if (argv[4]) {
- id = atoi(argv[4]);
- }
+ id = atoi(argv[4]);
if (id < 1 || id > MAX_CANVASES+1) {
id = -1;
}
for (i = 0; i <= conference->canvas_count; i++) {
- if (i > -1 && i != id - 1) {
+ if (i != id - 1) {
continue;
}
return SWITCH_STATUS_SUCCESS;
}
- if ((canvas = conference->canvases[idx])) {
- switch_mutex_lock(canvas->mutex);
- if (!strcasecmp(file, "clear")) {
- conference_video_reset_image(canvas->img, &canvas->bgcolor);
- } else {
- status = conference_video_set_canvas_bgimg(canvas, file);
- }
- switch_mutex_unlock(canvas->mutex);
+ canvas = conference->canvases[idx];
+ switch_mutex_lock(canvas->mutex);
+ if (!strcasecmp(file, "clear")) {
+ conference_video_reset_image(canvas->img, &canvas->bgcolor);
+ } else {
+ status = conference_video_set_canvas_bgimg(canvas, file);
}
+ switch_mutex_unlock(canvas->mutex);
if (status == SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "+OK Set Bgimg %s\n", file);
}
- if (id == 0 && conference->canvases[0]) id = 1;
+ if (id == 0) id = 1;
if (id > conference->canvas_count + 1) {
id = 1;
}
}
- if (!vlayout && (vlayout = switch_core_hash_find(conference->layout_hash, argv[2]))) {
+ if ((vlayout = switch_core_hash_find(conference->layout_hash, argv[2]))) {
if (argv[3]) {
if ((idx = atoi(argv[3]))) {
idx--;
if (p) {
*p++ = '\0';
- if (!p) p = "";
if (!strcasecmp(argv[x], "zoom") || !strcasecmp(argv[x], "pan")) {
str_arg = p;
{
switch_status_t ret_status = SWITCH_STATUS_SUCCESS;
char *conference_name = NULL, *profile_name;
- switch_event_t *params = NULL;
switch_assert(conference != NULL);
switch_assert(stream != NULL);
int x;
conference_name = strdup(argv[2]);
+ switch_assert(conference_name);
if ((profile_name = strchr(conference_name, '@'))) {
*profile_name++ = '\0';
ret_status = SWITCH_STATUS_GENERR;
}
- if (params) {
- switch_event_destroy(¶ms);
- }
-
switch_safe_free(conference_name);
return ret_status;
char *var, *val;
var = strdup(argv[argn + 1]);
+ switch_assert(var);
if ((val = strchr(var, '='))) {
*val++ = '\0';
if (!(x_tag3 = switch_xml_add_child_d(x_tag2, "status", off3++))) {
abort();
}
- switch_xml_set_txt_d(x_tag3, np->leave_time ? "disconnected" : "connected");
+ switch_xml_set_txt_d(x_tag3, "connected");
if (!(x_tag3 = switch_xml_add_child_d(x_tag2, "joining-info", off3++))) {
}
}
- if (np->cp) {
-
- if (!user_uri) {
- user_uri = switch_mprintf("%s@%s", np->cp->caller_id_number, domain);
- }
-
- json_add_child_string(juser, "entity", user_uri);
- json_add_child_string(juser, "displayText", np->cp->caller_id_name);
+ if (!user_uri) {
+ user_uri = switch_mprintf("%s@%s", np->cp->caller_id_number, domain);
}
+ json_add_child_string(juser, "entity", user_uri);
+ json_add_child_string(juser, "displayText", np->cp->caller_id_name);
+
//if (np->record_path) {
//json_add_child_string(juser, "recordingPATH", np->record_path);
//}
switch_channel_get_variables(member->channel, &member->cdr_node->var_event);
}
- if (member->cdr_node) {
- member->cdr_node->leave_time = switch_epoch_time_now(NULL);
- memcpy(member->cdr_node->mflags, member->flags, sizeof(member->flags));
- member->cdr_node->member = NULL;
- }
+ member->cdr_node->leave_time = switch_epoch_time_now(NULL);
+ memcpy(member->cdr_node->mflags, member->flags, sizeof(member->flags));
+ member->cdr_node->member = NULL;
}
switch_mutex_unlock(member->conference->member_mutex);
}
SWITCH_STANDARD_STREAM(stream);
- if (body != NULL && (lbuf = strdup(body))) {
+ if ((lbuf = strdup(body))) {
/* special case list */
if (conference->broadcast_chat_messages) {
conference_event_chat_message_broadcast(conference, message_event);
} else if (!member->mute_counter && member->score > (int)((double)member->max_energy_level * .75)) {
int dec = 1;
- if (member->score_count > 3) {
- dec = 2;
+ if (member->score_count > 9) {
+ dec = 4;
} else if (member->score_count > 6) {
dec = 3;
- } else if (member->score_count > 9) {
- dec = 4;
+ } else if (member->score_count > 3) {
+ dec = 2;
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG2, "MAX ENERGY THRESHOLD! -%d\n", dec);
while (!member->loop_loop && conference_utils_member_test_flag(member, MFLAG_RUNNING) && conference_utils_member_test_flag(member, MFLAG_ITHREAD)
&& switch_channel_ready(channel)) {
switch_event_t *event;
- int use_timer = 0;
switch_buffer_t *use_buffer = NULL;
uint32_t mux_used = 0;
use_buffer = NULL;
mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer);
- use_timer = 1;
-
if (mux_used) {
if (mux_used < bytes) {
if (++low_count >= 5) {
low_count = 0;
if ((write_frame.datalen = (uint32_t) switch_buffer_read(use_buffer, write_frame.data, bytes))) {
- if (write_frame.datalen) {
- write_frame.samples = write_frame.datalen / 2 / member->conference->channels;
+ write_frame.samples = write_frame.datalen / 2 / member->conference->channels;
- if( !conference_utils_member_test_flag(member, MFLAG_CAN_HEAR)) {
- memset(write_frame.data, 255, write_frame.datalen);
- } else if (member->volume_out_level) { /* Check for output volume adjustments */
- switch_change_sln_volume(write_frame.data, write_frame.samples * member->conference->channels, member->volume_out_level);
- }
+ if( !conference_utils_member_test_flag(member, MFLAG_CAN_HEAR)) {
+ memset(write_frame.data, 255, write_frame.datalen);
+ } else if (member->volume_out_level) { /* Check for output volume adjustments */
+ switch_change_sln_volume(write_frame.data, write_frame.samples * member->conference->channels, member->volume_out_level);
+ }
- //write_frame.timestamp = timer.samplecount;
+ //write_frame.timestamp = timer.samplecount;
- if (member->fnode) {
- conference_member_add_file_data(member, write_frame.data, write_frame.datalen);
- }
+ if (member->fnode) {
+ conference_member_add_file_data(member, write_frame.data, write_frame.datalen);
+ }
- conference_member_check_channels(&write_frame, member, SWITCH_FALSE);
+ conference_member_check_channels(&write_frame, member, SWITCH_FALSE);
- if (switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
- switch_mutex_unlock(member->audio_out_mutex);
- switch_mutex_unlock(member->write_mutex);
- break;
- }
+ if (switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
+ switch_mutex_unlock(member->audio_out_mutex);
+ switch_mutex_unlock(member->write_mutex);
+ break;
}
}
switch_ivr_parse_all_messages(member->session);
}
- if (use_timer) {
- switch_core_timer_next(&timer);
- } else {
- switch_cond_next();
- }
+ switch_core_timer_next(&timer);
} /* Rinse ... Repeat */
char *str, *vstr = "", display[128] = "", *json_display = NULL;
cJSON *json, *audio, *video;
- if (!member->conference->la || !member->json || !member->status_field || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
+ if (!member || !member->conference || !member->conference->la || !member->json || !member->status_field || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
return;
}
vstr = " VIDEO (BLIND)";
} else {
vstr = " VIDEO";
- if (member && member->id == member->conference->video_floor_holder) {
+ if (member->id == member->conference->video_floor_holder) {
vstr = " VIDEO (FLOOR)";
}
}
cJSON_AddItemToObject(video, "avatarPresented", cJSON_CreateBool(!!member->avatar_png_img));
cJSON_AddItemToObject(video, "mediaFlow", cJSON_CreateString(switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY ? "sendOnly" : "sendRecv"));
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));
- if (member && member->id == member->conference->video_floor_holder && conference_utils_test_flag(member->conference, CFLAG_VID_FLOOR_LOCK)) {
+ cJSON_AddItemToObject(video, "floor", cJSON_CreateBool(member->id == member->conference->video_floor_holder));
+ if (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, "reservationID", member->video_reservation_id ?
rlen = frame->datalen / 2 / from;
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) {
switch_mux_channels((int16_t *) frame->data, rlen, 2, 1);
frame->datalen /= 2;
rlen = frame->datalen / 2;
char *dfile = NULL, *expanded = NULL;
conference_file_node_t *fnode, *nptr = NULL;
switch_memory_pool_t *pool;
- int channels = member->conference->channels;
+ int channels = 0;
int bad_params = 0;
if (member == NULL || file == NULL || conference_utils_member_test_flag(member, MFLAG_KICKED))
return status;
+ channels = member->conference->channels;
+
if ((expanded = switch_channel_expand_variables(switch_core_session_get_channel(member->session), file)) != file) {
file = expanded;
} else {
/* Say some thing with TTS in the conference room */
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 = NULL;
conference_file_node_t *fnode, *nptr;
switch_memory_pool_t *pool;
switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
switch_status_t status = SWITCH_STATUS_FALSE;
char *fp = NULL;
- int channels = member->conference->channels;
+ int channels = 0;
switch_event_t *params = NULL;
const char *position = NULL;
if (member == NULL || zstr(text))
return SWITCH_STATUS_FALSE;
+ conference = member->conference;
switch_assert(conference != NULL);
+ channels = conference->channels;
if (!(conference->tts_engine && conference->tts_voice)) {
return SWITCH_STATUS_SUCCESS;
goto end;
}
- while (conference_utils_member_test_flag(member, MFLAG_RUNNING) && conference_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) > 0) {
len = 0;
if (border > 50) border = 50;
}
- if (x < 0 || y < 0 || scale < 0 || !name) {
+ if (x < 0 || y < 0 || scale < 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid image\n");
continue;
}
x_layout = switch_xml_child(x_group, "layout");
- if (!name || !x_group || !x_layout) {
+ if (!name || !x_layout) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid group\n");
continue;
}
conference_video_reset_layer_cam(layer);
- if (layer->geometry.overlap) {
+ if (layer->geometry.overlap && layer->canvas) {
layer->canvas->refresh = 1;
}
if (layer->manual_border) {
border = layer->manual_border;
- } if (layer->geometry.border) {
+ } else if (layer->geometry.border) {
border = layer->geometry.border;
}
return;
}
- if (conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
+ if (conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN) || !member->conference) {
return;
}
if (force && !member->avatar_png_img && member->video_mute_img) {
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT);
- if (member->conference) {
- conference_event_add_data(member->conference, event);
- }
+ conference_event_add_data(member->conference, event);
conference_member_add_event_data(member, event);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "vfi-triggered-member");
switch_event_fire(&event);
void conference_video_patch_fnode(mcu_canvas_t *canvas, conference_file_node_t *fnode)
{
- if (fnode && fnode->layer_id > -1) {
+ if (canvas && fnode && fnode->layer_id > -1) {
mcu_layer_t *layer = &canvas->layers[fnode->layer_id];
switch_frame_t file_frame = { 0 };
switch_status_t status = switch_core_file_read_video(&fnode->fh, &file_frame, SVR_FLUSH);
layer->tagged = 1;
} else if (status == SWITCH_STATUS_IGNORE) {
- if (canvas && fnode->layer_id > -1 ) {
- conference_video_canvas_del_fnode_layer(canvas->conference, fnode);
- fnode->canvas_id = canvas->canvas_id;
- }
+ conference_video_canvas_del_fnode_layer(canvas->conference, fnode);
+ fnode->canvas_id = canvas->canvas_id;
}
}
}
}
}
- if (!layer &&
- (canvas->layers_used < canvas->total_layers ||
+ if ((canvas->layers_used < canvas->total_layers ||
(avatar_layers && !member->avatar_png_img) || conference_utils_member_test_flag(member, MFLAG_MOD)) &&
(member->avatar_png_img || (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY &&
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE))) {
if (imember->channel && switch_channel_ready(imember->channel) && switch_channel_test_flag(imember->channel, CF_VIDEO_READY) &&
!conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN) && !hold &&
- conference_utils_member_test_flag(imember, MFLAG_RUNNING) && (!no_muted || seen) && (!no_av || (no_av && !imember->avatar_png_img))
+ conference_utils_member_test_flag(imember, MFLAG_RUNNING) && (!no_muted || seen) && (!(no_av && imember->avatar_png_img))
&& imember->canvas_id == canvas->canvas_id && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && imember->video_media_flow != SWITCH_MEDIA_FLOW_INACTIVE) {
video_count++;
}
(!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) ||
(conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN) && !conference_utils_member_test_flag(imember, MFLAG_HOLD))) &&
imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY &&
- imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) {
+ switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) {
total--;
}
canvas->refresh++;
}
- if (layer->cur_img) {
- if (layer->member && switch_core_cpu_count() > 2) {
- layer->need_patch = 1;
- conference_video_wake_layer_thread(layer->member);
- } else {
- conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
- }
+ if (layer->member && switch_core_cpu_count() > 2) {
+ layer->need_patch = 1;
+ conference_video_wake_layer_thread(layer->member);
+ } else {
+ conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
}
layer->tagged = 0;
canvas->refresh++;
}
- if (layer->cur_img) {
- if (layer->member && switch_core_cpu_count() > 2) {
- layer->need_patch = 1;
- conference_video_wake_layer_thread(layer->member);
- } else {
- conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
- }
+ if (layer->member && switch_core_cpu_count() > 2) {
+ layer->need_patch = 1;
+ conference_video_wake_layer_thread(layer->member);
+ } else {
+ conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
}
}
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Setting floor not allowed on a member in a dedicated layer\n");
}
- if ((!force && conference_utils_test_flag(conference, CFLAG_VID_FLOOR_LOCK))) {
+ if (!force && conference_utils_test_flag(conference, CFLAG_VID_FLOOR_LOCK)) {
return;
}
switch_channel_clear_flag(imember->channel, CF_VIDEO_REFRESH_REQ);
}
- if (isession && switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
+ if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY)) {
int send_frame = 0;
if (conference->canvases[0] && conference_utils_test_flag(imember->conference, CFLAG_VIDEO_BRIDGE_FIRST_TWO)) {
}
- if (member) {
- if (member->id == member->conference->video_floor_holder) {
- conference_video_write_frame(member->conference, member, frame);
- conference_video_check_recording(member->conference, NULL, frame);
- } else if (!conference_utils_test_flag(member->conference, CFLAG_VID_FLOOR_LOCK) && member->id == member->conference->last_video_floor_holder) {
- conference_member_t *fmember;
+ if (member->id == member->conference->video_floor_holder) {
+ conference_video_write_frame(member->conference, member, frame);
+ conference_video_check_recording(member->conference, NULL, frame);
+ } else if (!conference_utils_test_flag(member->conference, CFLAG_VID_FLOOR_LOCK) && member->id == member->conference->last_video_floor_holder) {
+ conference_member_t *fmember;
- if ((fmember = conference_member_get(member->conference, member->conference->video_floor_holder))) {
- if (!conference_utils_member_test_flag(fmember, MFLAG_RECEIVING_VIDEO))
- switch_core_session_write_video_frame(fmember->session, frame, SWITCH_IO_FLAG_NONE, 0);
- switch_thread_rwlock_unlock(fmember->rwlock);
- }
+ if ((fmember = conference_member_get(member->conference, member->conference->video_floor_holder))) {
+ if (!conference_utils_member_test_flag(fmember, MFLAG_RECEIVING_VIDEO))
+ switch_core_session_write_video_frame(fmember->session, frame, SWITCH_IO_FLAG_NONE, 0);
+ switch_thread_rwlock_unlock(fmember->rwlock);
}
}
if (inuse + 1 > member->text_framesize) {
void *tmp = malloc(inuse + 1024);
+ switch_assert(tmp);
memcpy(tmp, member->text_framedata, member->text_framesize);
switch_assert(tmp);
/* if this is a bridging call, and it's not a duplicate, build a */
/* conference object, and skip pin handling, and locked checking */
- if (!locked) {
- switch_mutex_lock(conference_globals.setup_mutex);
- locked = 1;
- }
+ switch_mutex_lock(conference_globals.setup_mutex);
+ locked = 1;
if (isbr) {
char *uuid = switch_core_session_get_uuid(session);
conference->flags[CFLAG_JSON_STATUS] = 1;
conference_utils_set_cflags(cflags_str, conference->flags);
- if (locked) {
- switch_mutex_unlock(conference_globals.setup_mutex);
- locked = 0;
- }
+ switch_mutex_unlock(conference_globals.setup_mutex);
+ locked = 0;
switch_channel_set_variable(channel, "conference_name", conference->name);
}
if ((conference = conference_find(conference_name, NULL))) {
- if (locked) {
- switch_mutex_unlock(conference_globals.setup_mutex);
- locked = 0;
- }
+ switch_mutex_unlock(conference_globals.setup_mutex);
+ locked = 0;
}
/* if the conference exists, get the pointer to it */
}
while (!pin_valid && pin_retries && status == SWITCH_STATUS_SUCCESS) {
- size_t dpin_length = dpin ? strlen(dpin) : 0;
+ size_t dpin_length = strlen(dpin);
size_t mdpin_length = mdpin ? strlen(mdpin) : 0;
int maxpin = dpin_length > mdpin_length ? (int)dpin_length : (int)mdpin_length;
switch_status_t pstatus = SWITCH_STATUS_FALSE;
}
/* Release the config registry handle */
- if (cxml) {
- switch_xml_free(cxml);
- cxml = NULL;
- }
+ switch_xml_free(cxml);
+ cxml = NULL;
/* if we're using "bridge:" make an outbound call and bridge it in */
if (!zstr(bridgeto) && strcasecmp(bridgeto, "none")) {
video_layout_name = CONFERENCE_MUX_DEFAULT_LAYOUT;
}
- if (!strncasecmp(video_layout_name, "group:", 6)) {
- video_layout_group = video_layout_name + 6;
- }
if (video_layout_name) {
+ if (!strncasecmp(video_layout_name, "group:", 6)) {
+ video_layout_group = video_layout_name + 6;
+ }
conference->video_layout_name = switch_core_strdup(conference->pool, video_layout_name);
}
if (conference->max_energy_hit_trigger < 0) {
conference->max_energy_hit_trigger = 0;
}
- }
- if (!zstr(max_energy_level)) {
conference->max_energy_level = atoi(max_energy_level);
if (conference->max_energy_level < 0) {
conference->max_energy_level = 0;