From 7712c6637c5d0fbcb1082148c467fd29af5a788e Mon Sep 17 00:00:00 2001 From: Anthony Minessale <anthony.minessale@gmail.com> Date: Mon, 17 Jul 2006 14:12:07 +0000 Subject: [PATCH] messaging stuff git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1902 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/libteletone/src/libteletone_generate.c | 4 + .../mod_conference/mod_conference.c | 229 +++++++++--------- .../endpoints/mod_dingaling/mod_dingaling.c | 3 + src/switch_core.c | 13 +- 4 files changed, 132 insertions(+), 117 deletions(-) diff --git a/libs/libteletone/src/libteletone_generate.c b/libs/libteletone/src/libteletone_generate.c index 8b40a6e3f7..518e017438 100644 --- a/libs/libteletone/src/libteletone_generate.c +++ b/libs/libteletone/src/libteletone_generate.c @@ -30,6 +30,9 @@ * */ #include <libteletone.h> +#define SMAX 32767 +#define SMIN -32768 +#define normalize_to_16bit(n) if (n > SMAX) n = SMAX; else if (n < SMIN) n = SMIN; @@ -163,6 +166,7 @@ int teletone_mux_tones(teletone_generation_session_t *ts, teletone_tone_map_t *m for (i = 0; i < freqlen; i++) { sample += ((teletone_process_t) 2 * (ts->volume > 0 ? ts->volume : 1) * cos(tones[i] * ts->samples * period)); } + normalize_to_16bit(sample); ts->buffer[ts->samples] = (teletone_audio_t)sample; for (c = 1; c < ts->channels; c++) { diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index 4eed40f88b..2b35eee661 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -704,129 +704,134 @@ static void conference_loop(conference_member_t *member) switch_size_t file_sample_len = samples; char *digit; char msg[512]; + switch_event_t *event; + + if (switch_core_session_dequeue_event(member->session, &event) == SWITCH_STATUS_SUCCESS) { + switch_event_destroy(&event); + } if (switch_channel_has_dtmf(channel)) { switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); - } - for (digit = dtmf; *digit; digit++) { - switch(*digit) { - case '0': - if (switch_test_flag(member, MFLAG_CAN_SPEAK)) { - switch_clear_flag_locked(member, MFLAG_CAN_SPEAK | MFLAG_CAN_HEAR); - if (member->conference->muted_sound) { - conference_member_play_file(member, member->conference->muted_sound, 0); + for (digit = dtmf; *digit; digit++) { + switch(*digit) { + case '0': + if (switch_test_flag(member, MFLAG_CAN_SPEAK)) { + switch_clear_flag_locked(member, MFLAG_CAN_SPEAK | MFLAG_CAN_HEAR); + if (member->conference->muted_sound) { + conference_member_play_file(member, member->conference->muted_sound, 0); + } else { + snprintf(msg, sizeof(msg), "Muted"); + conference_member_say(member->conference, member, msg, 0); + } } else { - snprintf(msg, sizeof(msg), "Muted"); - conference_member_say(member->conference, member, msg, 0); + switch_set_flag_locked(member, MFLAG_CAN_SPEAK); + if (member->conference->unmuted_sound) { + conference_member_play_file(member, member->conference->unmuted_sound, 0); + } else { + snprintf(msg, sizeof(msg), "Un-Muted"); + conference_member_say(member->conference, member, msg, 0); + } } - } else { - switch_set_flag_locked(member, MFLAG_CAN_SPEAK); - if (member->conference->unmuted_sound) { - conference_member_play_file(member, member->conference->unmuted_sound, 0); + break; + case '*': + if (switch_test_flag(member, MFLAG_CAN_SPEAK)) { + switch_clear_flag_locked(member, MFLAG_CAN_SPEAK|MFLAG_CAN_HEAR); + if (member->conference->muted_sound) { + conference_member_play_file(member, member->conference->muted_sound, 0); + } else { + snprintf(msg, sizeof(msg), "Muted"); + conference_member_say(member->conference, member, msg, 0); + } } else { - snprintf(msg, sizeof(msg), "Un-Muted"); - conference_member_say(member->conference, member, msg, 0); + switch_set_flag_locked(member, MFLAG_CAN_SPEAK|MFLAG_CAN_HEAR); + if (member->conference->unmuted_sound) { + conference_member_play_file(member, member->conference->unmuted_sound, 0); + } else { + snprintf(msg, sizeof(msg), "UN-Muted"); + conference_member_say(member->conference, member, msg, 0); + } } - } - break; - case '*': - if (switch_test_flag(member, MFLAG_CAN_SPEAK)) { - switch_clear_flag_locked(member, MFLAG_CAN_SPEAK|MFLAG_CAN_HEAR); - if (member->conference->muted_sound) { - conference_member_play_file(member, member->conference->muted_sound, 0); - } else { - snprintf(msg, sizeof(msg), "Muted"); - conference_member_say(member->conference, member, msg, 0); + break; + case '9': + switch_mutex_lock(member->flag_mutex); + member->energy_level += 100; + if (member->energy_level > 1200) { + member->energy_level = 1200; } - } else { - switch_set_flag_locked(member, MFLAG_CAN_SPEAK|MFLAG_CAN_HEAR); - if (member->conference->unmuted_sound) { - conference_member_play_file(member, member->conference->unmuted_sound, 0); - } else { - snprintf(msg, sizeof(msg), "UN-Muted"); - conference_member_say(member->conference, member, msg, 0); + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '8': + switch_mutex_lock(member->flag_mutex); + member->energy_level = member->conference->energy_level; + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '7': + switch_mutex_lock(member->flag_mutex); + member->energy_level -= 100; + if (member->energy_level < 0) { + member->energy_level = 0; } + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '3': + switch_mutex_lock(member->flag_mutex); + member->volume_out_level++; + normalize_volume(member->volume_out_level); + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '2': + switch_mutex_lock(member->flag_mutex); + member->volume_out_level = 0; + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '1': + switch_mutex_lock(member->flag_mutex); + member->volume_out_level--; + normalize_volume(member->volume_out_level); + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '6': + switch_mutex_lock(member->flag_mutex); + member->volume_in_level++; + normalize_volume(member->volume_in_level); + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '5': + switch_mutex_lock(member->flag_mutex); + member->volume_in_level = 0; + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '4': + switch_mutex_lock(member->flag_mutex); + member->volume_in_level--; + normalize_volume(member->volume_in_level); + switch_mutex_unlock(member->flag_mutex); + snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); + conference_member_say(member->conference, member, msg, 0); + break; + case '#': + switch_clear_flag_locked(member, MFLAG_RUNNING); + break; + default: + break; } - break; - case '9': - switch_mutex_lock(member->flag_mutex); - member->energy_level += 100; - if (member->energy_level > 1200) { - member->energy_level = 1200; - } - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '8': - switch_mutex_lock(member->flag_mutex); - member->energy_level = member->conference->energy_level; - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '7': - switch_mutex_lock(member->flag_mutex); - member->energy_level -= 100; - if (member->energy_level < 0) { - member->energy_level = 0; - } - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Energy level %d", member->energy_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '3': - switch_mutex_lock(member->flag_mutex); - member->volume_out_level++; - normalize_volume(member->volume_out_level); - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '2': - switch_mutex_lock(member->flag_mutex); - member->volume_out_level = 0; - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '1': - switch_mutex_lock(member->flag_mutex); - member->volume_out_level--; - normalize_volume(member->volume_out_level); - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Volume level %d", member->volume_out_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '6': - switch_mutex_lock(member->flag_mutex); - member->volume_in_level++; - normalize_volume(member->volume_in_level); - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '5': - switch_mutex_lock(member->flag_mutex); - member->volume_in_level = 0; - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '4': - switch_mutex_lock(member->flag_mutex); - member->volume_in_level--; - normalize_volume(member->volume_in_level); - switch_mutex_unlock(member->flag_mutex); - snprintf(msg, sizeof(msg), "Gain level %d", member->volume_in_level); - conference_member_say(member->conference, member, msg, 0); - break; - case '#': - switch_clear_flag_locked(member, MFLAG_RUNNING); - break; - default: - break; } } diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index 2b4cf01906..49f0ace23b 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -1509,9 +1509,12 @@ static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsessi switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", from); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "subject", subject); switch_event_add_body(event, msg); + if (switch_core_session_queue_event(tech_pvt->session, &event) != SWITCH_STATUS_SUCCESS) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true"); switch_event_fire(&event); } + } break; diff --git a/src/switch_core.c b/src/switch_core.c index 6443b746d9..25b687b422 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1130,7 +1130,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_receive_event(switch_core_se SWITCH_DECLARE(switch_status_t) switch_core_session_queue_event(switch_core_session_t *session, switch_event_t **event) { - switch_status_t status = SWITCH_STATUS_SUCCESS; + switch_status_t status = SWITCH_STATUS_FALSE; assert(session != NULL); @@ -1138,10 +1138,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_queue_event(switch_core_sess switch_queue_create(&session->event_queue, SWITCH_EVENT_QUEUE_LEN, session->pool); } - if ((status = (switch_status_t) switch_queue_push(session->event_queue, *event) == SWITCH_STATUS_SUCCESS)) { - *event = NULL; - } - + if (session->event_queue) { + if (switch_queue_trypush(session->event_queue, *event) == SWITCH_STATUS_SUCCESS) { + *event = NULL; + status = SWITCH_STATUS_SUCCESS; + } + } + return status; }