From: Joshua C. Colp Date: Mon, 8 Jun 2020 11:27:53 +0000 (-0300) Subject: res_rtp_asterisk: Don't assume setting retrans props means to enable. X-Git-Tag: certified/16.8-cert3~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=744bfb049ca69e8cb95eaa6a323366881e381313;p=thirdparty%2Fasterisk.git 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 --- diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 134eebc07c..6004a2f212 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -8136,10 +8136,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); + } + } } }