diff --git a/libs/openzap/src/include/zap_types.h b/libs/openzap/src/include/zap_types.h index 713e67e3e8..b403f04387 100644 --- a/libs/openzap/src/include/zap_types.h +++ b/libs/openzap/src/include/zap_types.h @@ -371,7 +371,8 @@ typedef enum { ZAP_CHANNEL_3WAY = (1 << 20), ZAP_CHANNEL_PROGRESS = (1 << 21), ZAP_CHANNEL_MEDIA = (1 << 22), - ZAP_CHANNEL_ANSWERED = (1 << 23) + ZAP_CHANNEL_ANSWERED = (1 << 23), + ZAP_CHANNEL_MUTE = (1 << 24) } zap_channel_flag_t; typedef enum { diff --git a/libs/openzap/src/zap_io.c b/libs/openzap/src/zap_io.c index a20ea0ccf9..7d2ea3b094 100644 --- a/libs/openzap/src/zap_io.c +++ b/libs/openzap/src/zap_io.c @@ -2011,7 +2011,8 @@ OZ_DECLARE(zap_status_t) zap_channel_read(zap_channel_t *zchan, void *data, zap_ } } } - + + if (zap_test_flag(zchan, ZAP_CHANNEL_DTMF_DETECT) && !zap_channel_test_feature(zchan, ZAP_CHANNEL_FEATURE_DTMF_DETECT)) { teletone_dtmf_detect(&zchan->dtmf_detect, sln, (int)slen); teletone_dtmf_get(&zchan->dtmf_detect, digit_str, sizeof(digit_str)); @@ -2041,15 +2042,18 @@ OZ_DECLARE(zap_status_t) zap_channel_read(zap_channel_t *zchan, void *data, zap_ if (zap_test_flag(zchan, ZAP_CHANNEL_SUPRESS_DTMF)) { zchan->skip_read_frames = 20; } - if (zchan->skip_read_frames > 0) { - memset(data, 0, *datalen); - zchan->skip_read_frames--; - } } } } } + if (zchan->skip_read_frames > 0 || zap_test_flag(zchan, ZAP_CHANNEL_MUTE)) { + memset(data, 0, *datalen); + if (zchan->skip_read_frames > 0) { + zchan->skip_read_frames--; + } + } + return status; }