From f165eaa53b4e33e8d8189a88f790bd87639c65f8 Mon Sep 17 00:00:00 2001 From: kwasniow Date: Wed, 19 Mar 2025 15:49:13 +0100 Subject: [PATCH 1/2] fix: handle correctly semicolon on the end of the fmtp line --- src/lines/fmtp-line.spec.ts | 6 ++++++ src/lines/fmtp-line.ts | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/lines/fmtp-line.spec.ts b/src/lines/fmtp-line.spec.ts index cd7189c..4e47fe4 100644 --- a/src/lines/fmtp-line.spec.ts +++ b/src/lines/fmtp-line.spec.ts @@ -27,6 +27,12 @@ describe('parseFmtpParams', () => { expect(Object.fromEntries(fmtpParams)).toStrictEqual({ '0-5': undefined }); // firefox RED fmtpParams = parseFmtpParams('a=fmtp:100 0-15,66,70'); expect(Object.fromEntries(fmtpParams)).toStrictEqual({ '0-15,66,70': undefined }); // telephone event + fmtpParams = parseFmtpParams('a=fmtp:45 profile=0;level-idx=19;tier=0;'); + expect(Object.fromEntries(fmtpParams)).toStrictEqual({ + 'level-idx': '19', + profile: '0', + tier: '0', + }); // semicolon at the end case }); it('exceptional case', async () => { expect.hasAssertions(); diff --git a/src/lines/fmtp-line.ts b/src/lines/fmtp-line.ts index 0c65521..62fdb60 100644 --- a/src/lines/fmtp-line.ts +++ b/src/lines/fmtp-line.ts @@ -37,8 +37,13 @@ export function parseFmtpParams(fmtpParams: string) { return fmtpObj; } + // Trim any trailing semicolons + // eslint-disable-next-line no-param-reassign + fmtpParams = fmtpParams.replace(/;$/, ''); + fmtpParams.split(';').forEach((param) => { const paramArr = param && param.split('='); + if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) { throw new Error(`Fmtp params is invalid with ${fmtpParams}`); } From f71e4149fe25ec7e8e1c82fe5806364796354b70 Mon Sep 17 00:00:00 2001 From: kwasniow Date: Wed, 19 Mar 2025 17:12:24 +0100 Subject: [PATCH 2/2] fix: make comment a little bit more descriptive --- src/lines/fmtp-line.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lines/fmtp-line.ts b/src/lines/fmtp-line.ts index 62fdb60..c483ca9 100644 --- a/src/lines/fmtp-line.ts +++ b/src/lines/fmtp-line.ts @@ -37,7 +37,7 @@ export function parseFmtpParams(fmtpParams: string) { return fmtpObj; } - // Trim any trailing semicolons + // Trailing semicolons are not technically allowed, but we've seen some occurrences and don't want to choke on them, so strip them here // eslint-disable-next-line no-param-reassign fmtpParams = fmtpParams.replace(/;$/, '');