]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
MODAPP-268
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 30 Apr 2009 04:18:46 +0000 (04:18 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 30 Apr 2009 04:18:46 +0000 (04:18 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13206 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_conference/mod_conference.c

index 0dddda5d55870f992acd5244ac59fb0b913338dd..6a00d47dec1683037a0b012a5ee1110163f8a7b2 100644 (file)
@@ -360,7 +360,7 @@ static void *SWITCH_THREAD_FUNC conference_video_thread_run(switch_thread_t *thr
 static void conference_loop_output(conference_member_t *member);
 static uint32_t conference_stop_file(conference_obj_t *conference, file_stop_t stop);
 static switch_status_t conference_play_file(conference_obj_t *conference, char *file, uint32_t leadin, switch_channel_t *channel, uint8_t async);
-static void conference_send_all_dtmf(conference_obj_t *conference, const char *dtmf);
+static void conference_send_all_dtmf(conference_member_t *member, conference_obj_t *conference, const char *dtmf);
 static switch_status_t conference_say(conference_obj_t *conference, const char *text, uint32_t leadin);
 static void conference_list(conference_obj_t *conference, switch_stream_handle_t *stream, char *delim);
 static conference_obj_t *conference_find(char *name);
@@ -2052,7 +2052,7 @@ static void conference_loop_output(conference_member_t *member)
                        switch_channel_dequeue_dtmf_string(channel, dtmf, sizeof(dtmf));
 
                        if (switch_test_flag(member, MFLAG_DIST_DTMF)) {
-                               conference_send_all_dtmf(member->conference, dtmf);
+                               conference_send_all_dtmf(member, member->conference, dtmf);
                        } else {
                                if (member->conference->dtmf_parser != NULL) {
                                        for (digit = dtmf; *digit && caller_action == NULL; digit++) {
@@ -2469,7 +2469,7 @@ static uint32_t conference_member_stop_file(conference_member_t *member, file_st
        return count;
 }
 
-static void conference_send_all_dtmf(conference_obj_t *conference, const char *dtmf)
+static void conference_send_all_dtmf(conference_member_t *member, conference_obj_t *conference, const char *dtmf)
 {
        conference_member_t *imember;
 
@@ -2477,11 +2477,18 @@ static void conference_send_all_dtmf(conference_obj_t *conference, const char *d
        switch_mutex_lock(conference->member_mutex);
 
        for (imember = conference->members; imember; imember = imember->next) {
+               /* don't send to self */
+               if (imember->id == member->id) {
+                       continue;                       
+               }
                if (imember->session) {
                        const char *p;
                        for (p = dtmf; p && *p; p++) {
                                switch_dtmf_t dtmf = { *p, SWITCH_DEFAULT_DTMF_DURATION};
-                               switch_channel_queue_dtmf(switch_core_session_get_channel(imember->session), &dtmf);
+                               switch_mutex_lock(imember->control_mutex);
+                               switch_core_session_kill_channel(imember->session, SWITCH_SIG_BREAK);
+                               switch_core_session_send_dtmf(imember->session, &dtmf);
+                               switch_mutex_unlock(imember->control_mutex);
                        }
                }
        }