]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
rtp_engine.c: Add exception for comfort noise payload.
authorBen Ford <bford@sangoma.com>
Tue, 9 Sep 2025 18:34:39 +0000 (13:34 -0500)
committergithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Thu, 11 Sep 2025 14:08:08 +0000 (14:08 +0000)
In a previous commit, a change was made to
ast_rtp_codecs_payload_code_tx_sample_rate to check for differing sample
rates. This ended up returning an invalid payload int for comfort noise.
A check has been added that returns early if the payload is in fact
supposed to be comfort noise.

Fixes: #1340
main/rtp_engine.c

index 9110988fc63771a4a884d60f190472bd644f4950..90198e089d84eef79cc847428a5ffd29253c877f 100644 (file)
@@ -2135,6 +2135,16 @@ int ast_rtp_codecs_payload_code_tx_sample_rate(struct ast_rtp_codecs *codecs, in
                payload = find_static_payload_type(asterisk_format, format, code);
                ast_rwlock_unlock(&static_RTP_PT_lock);
 
+               /*
+                * Comfort noise is NOT used as an SDP negotiated format within Asterisk;
+                * instead, it is used when it is not negotiated. This special case allows
+                * its payload to be returned when not negotiated, allowing keep alive to
+                * function as expected.
+                */
+               if (payload == 13 && code == AST_RTP_CN) {
+                       return payload;
+               }
+
                ast_rwlock_rdlock(&codecs->codecs_lock);
                if (payload >= 0 && payload < AST_VECTOR_SIZE(&codecs->payload_mapping_tx)){
                        type = AST_VECTOR_GET(&codecs->payload_mapping_tx, payload);