From 1644cd874ded77f4b9145a39e0224e7046ff39c5 Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Mon, 30 Jun 2014 03:23:20 +0000 Subject: [PATCH] chan_sip: be more tolerant of whitespace between attributes in SDP fmtp line This patch is essentially a backport of a small portion of r397526 from ASTERISK-21981. In that patch, pass through support and format attribute negotiation was added for Opus. Part of that included being more tolerant to whitespace in the fmtp line of an SDP; that part of the patch is being applied here. As the author of the backport pointed out, in SDP, the fmtp line is allowed to include whitespace between attributes. RFC 3267 chapter 8.3 (from 2001) includes an example for this. This was not removed in the updated RFC 4867 in 2007. Review: https://reviewboard.asterisk.org/r/3658 ASTERISK-23916 #close Reported by: Alexander Traud patches: sdpFMTPspace_Asterisk11.patch uploaded by Alexander Traud (License 6520) ........ Merged revisions 417587 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@417588 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 55d724a829..0734fbea6d 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -11122,7 +11122,7 @@ static int process_sdp_a_audio(const char *a, struct sip_pvt *p, struct ast_rtp_ if (debug) ast_verbose("Discarded description format %s for ID %u\n", mimeSubtype, codec); } - } else if (sscanf(a, "fmtp: %30u %255s", &codec, fmtp_string) == 2) { + } else if (sscanf(a, "fmtp: %30u %255[^\t\n]", &codec, fmtp_string) == 2) { struct ast_format *format; if ((format = ast_rtp_codecs_get_payload_format(newaudiortp, codec))) { @@ -11202,7 +11202,7 @@ static int process_sdp_a_video(const char *a, struct sip_pvt *p, struct ast_rtp_ if (debug) ast_verbose("Discarded description format %s for ID %u\n", mimeSubtype, codec); } - } else if (sscanf(a, "fmtp: %30u %255s", &codec, fmtp_string) == 2) { + } else if (sscanf(a, "fmtp: %30u %255[^\t\n]", &codec, fmtp_string) == 2) { struct ast_format *format; if ((format = ast_rtp_codecs_get_payload_format(newvideortp, codec))) {