From 20da55256421ff175f3c35c2c6e939f2f158d213 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Mon, 3 Mar 2014 18:26:44 +0000 Subject: [PATCH] Preserve value of send_silence_when_idle if possible In commit 55d01d3defed4bfdc74704dbea0da9548a97a979 we set send_silence_when_idle to -1 rather than 400 when SRTP is engaged. But this left no way to enable white noise silence when desired. When SRTP is engaged we can't simply not send RTP because it breaks too many devices. So we need to prevent send_silence_when_idle from being unset or being set to zero. This change allows it to be set to other values so as to feed white noise rather than all zeros into the codec. --- src/switch_rtp.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/switch_rtp.c b/src/switch_rtp.c index b8c67d7d84..b84795b91b 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -3011,6 +3011,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess switch_channel_t *channel = switch_core_session_get_channel(rtp_session->session); switch_event_t *fsevent = NULL; int idx = 0; + const char *var; if (direction >= SWITCH_RTP_CRYPTO_MAX || keylen > SWITCH_RTP_MAX_CRYPTO_LEN) { return SWITCH_STATUS_FALSE; @@ -3040,7 +3041,11 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess memset(policy, 0, sizeof(*policy)); - switch_channel_set_variable(channel, "send_silence_when_idle", "-1"); + /* many devices can't handle gaps in SRTP streams */ + if (!(var = switch_channel_get_variable(channel, "send_silence_when_idle")) + || !(atoi(var))) { + switch_channel_set_variable(channel, "send_silence_when_idle", "-1"); + } switch (crypto_key->type) { case AES_CM_128_HMAC_SHA1_80: