From 1b744ab684bad662914e14d7abad0bebac8961df Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Thu, 16 Jul 2015 11:46:14 -0300 Subject: [PATCH] chan_pjsip: Don't change formats when frame of unsupported format is received. Receipt of an RTP packet currently causes the formats on an PJSIP channel to change to the format of the RTP packet. In some off-nominal cases it's possible for this to be a format that has not been configured or negotiated. This change makes it so only formats explicitly configured on the endpoint are allowed. ASTERISK-25258 #close Change-Id: If93d641fb6418a285928839300d7854cab8c1020 --- channels/chan_pjsip.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index 2907d46b2d..a297ca609d 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -627,7 +627,15 @@ static struct ast_frame *chan_pjsip_read(struct ast_channel *ast) return f; } - if (ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), f->subclass.format) == AST_FORMAT_CMP_NOT_EQUAL) { + + if (ast_format_cap_iscompatible_format(channel->session->endpoint->media.codecs, f->subclass.format) == AST_FORMAT_CMP_NOT_EQUAL) { + ast_debug(1, "Oooh, got a frame with format of %s on channel '%s' when endpoint '%s' is not configured for it\n", + ast_format_get_name(f->subclass.format), ast_channel_name(ast), + ast_sorcery_object_get_id(channel->session->endpoint)); + + ast_frfree(f); + return &ast_null_frame; + } else if (ast_format_cap_iscompatible_format(ast_channel_nativeformats(ast), f->subclass.format) == AST_FORMAT_CMP_NOT_EQUAL) { struct ast_format_cap *caps; ast_debug(1, "Oooh, format changed to %s\n", ast_format_get_name(f->subclass.format)); -- 2.47.2