From f95495d4f00eacdd0cb62e2083a55ef9c5081c49 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 21 Nov 2022 15:47:33 -0500 Subject: [PATCH] TT#136957 move rand_code from _send to _recv The `dtmf_send` event might not have a matching entry while handling a received DTMF event. Move bookkeeping of the random output event into `dtmf_recv`. Change-Id: I5507b0b7f5eca6e29cbcaccc905ab25249b22aa3 --- daemon/codec.c | 3 ++- daemon/dtmf.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index 06e622879..374233b32 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -2649,6 +2649,7 @@ static void delay_frame_manipulate(struct delay_frame *dframe) { switch (mode) { case BLOCK_DTMF_OFF: // DTMF delay mode: play original DTMF + // `dtmf_send` is valid ONLY HERE if (dframe->ch->handler->real_dtmf_payload_type != -1) { // add event to handler queue so the packet can be translated // to DTMF event packet. @@ -2700,7 +2701,7 @@ static void delay_frame_manipulate(struct delay_frame *dframe) { break; case BLOCK_DTMF_RANDOM: frame_fill_dtmf_samples(frame->format, frame->extended_data[0], dframe->ts, - frame->nb_samples, dtmf_send->rand_code - '0', + frame->nb_samples, dtmf_recv->rand_code - '0', 10, frame->sample_rate, GET_CHANNELS(frame)); break; diff --git a/daemon/dtmf.c b/daemon/dtmf.c index a8f09420a..f8f0d7c59 100644 --- a/daemon/dtmf.c +++ b/daemon/dtmf.c @@ -281,14 +281,14 @@ static void dtmf_code_event(struct call_media *media, char event, uint64_t ts, i dtmf_check_trigger(media, event, ts, clockrate); ev = g_slice_alloc0(sizeof(*ev)); - *ev = (struct dtmf_event) { .code = event, .ts = ts, .volume = volume }; + *ev = (struct dtmf_event) { .code = event, .ts = ts, .volume = volume, + .rand_code = '0' + (ssl_random() % 10) }; g_queue_push_tail(&media->dtmf_recv, ev); ev = g_slice_alloc0(sizeof(*ev)); *ev = (struct dtmf_event) { .code = event, .ts = ts + media->monologue->dtmf_delay * clockrate / 1000, .volume = volume, - .block_dtmf = media->monologue->block_dtmf, - .rand_code = '0' + (ssl_random() % 10) }; + .block_dtmf = media->monologue->block_dtmf }; g_queue_push_tail(&media->dtmf_send, ev); }