From: Ben Ford Date: Tue, 9 Sep 2025 18:34:39 +0000 (-0500) Subject: rtp_engine.c: Add exception for comfort noise payload. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8add74c46277eabdd04f74a3fc7056ca56ba968b;p=thirdparty%2Fasterisk.git rtp_engine.c: Add exception for comfort noise payload. 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 --- diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 9110988fc6..90198e089d 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -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);