From c84d962eae394946b777c769522dc9541f1e4540 Mon Sep 17 00:00:00 2001 From: "Joshua C. Colp" <jcolp@sangoma.com> Date: Mon, 8 Jun 2020 08:27:53 -0300 Subject: [PATCH] res_rtp_asterisk: Don't assume setting retrans props means to enable. The "value" passed in when setting an RTP property determines whether it should be enabled or disabled. The RTP send and receive retrans props did not examine this to know if the buffers should be enabled. They assumed they always should be. This change makes it so that the "value" passed in is respected. ASTERISK-28939 Change-Id: I9244cdbdc5fd065c7f6b02cbfa572bc55c7123dc --- res/res_rtp_asterisk.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 28fa12a19d..1820ab100e 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -8236,10 +8236,29 @@ static void ast_rtp_prop_set(struct ast_rtp_instance *instance, enum ast_rtp_pro } else if (property == AST_RTP_PROPERTY_ASYMMETRIC_CODEC) { rtp->asymmetric_codec = value; } else if (property == AST_RTP_PROPERTY_RETRANS_SEND) { - rtp->send_buffer = ast_data_buffer_alloc(ast_free_ptr, DEFAULT_RTP_SEND_BUFFER_SIZE); + if (value) { + if (!rtp->send_buffer) { + rtp->send_buffer = ast_data_buffer_alloc(ast_free_ptr, DEFAULT_RTP_SEND_BUFFER_SIZE); + } + } else { + if (rtp->send_buffer) { + ast_data_buffer_free(rtp->send_buffer); + rtp->send_buffer = NULL; + } + } } else if (property == AST_RTP_PROPERTY_RETRANS_RECV) { - rtp->recv_buffer = ast_data_buffer_alloc(ast_free_ptr, DEFAULT_RTP_RECV_BUFFER_SIZE); - AST_VECTOR_INIT(&rtp->missing_seqno, 0); + if (value) { + if (!rtp->recv_buffer) { + rtp->recv_buffer = ast_data_buffer_alloc(ast_free_ptr, DEFAULT_RTP_RECV_BUFFER_SIZE); + AST_VECTOR_INIT(&rtp->missing_seqno, 0); + } + } else { + if (rtp->recv_buffer) { + ast_data_buffer_free(rtp->recv_buffer); + rtp->recv_buffer = NULL; + AST_VECTOR_FREE(&rtp->missing_seqno); + } + } } } -- GitLab