]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: Fix for HW DTMF events not passed to signalling module in transfer mode
authorDavid Yat Sin <dyatsin@sangoma.com>
Thu, 13 Sep 2012 16:34:49 +0000 (12:34 -0400)
committerDavid Yat Sin <dyatsin@sangoma.com>
Thu, 13 Sep 2012 16:34:49 +0000 (12:34 -0400)
libs/freetdm/src/ftdm_io.c

index 5d03ba40765f365459b7fe0c245d2d9a03efc507..57d13a69afbaff59d0f54f6bbe12150e40acea78 100644 (file)
@@ -3782,6 +3782,11 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_queue_dtmf(ftdm_channel_t *ftdmchan, cons
 
        ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Queuing DTMF %s (debug = %d)\n", dtmf, ftdmchan->dtmfdbg.enabled);
 
+       if (ftdmchan->span->sig_dtmf && (ftdmchan->span->sig_dtmf(ftdmchan, dtmf) == FTDM_BREAK)) {
+               /* Signalling module wants to absorb this DTMF event */
+               return FTDM_SUCCESS;
+       }
+
        if (!ftdmchan->dtmfdbg.enabled) {
                goto skipdebug;
        }
@@ -4230,10 +4235,8 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_process_media(ftdm_channel_t *ftdmchan, v
                                        char digit_str[2] = { 0 };
 
                                        digit_str[0] = digit_char;
-                                       
-                                       if (!ftdmchan->span->sig_dtmf || (ftdmchan->span->sig_dtmf(ftdmchan, (const char*)digit_str) != FTDM_BREAK)) {
-                                               ftdm_channel_queue_dtmf(ftdmchan, digit_str);
-                                       }
+
+                                       ftdm_channel_queue_dtmf(ftdmchan, digit_str);
 
                                        if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_SUPRESS_DTMF)) {
                                                ftdmchan->skip_read_frames = 20;