mediasoup 3.16.6 → 3.16.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/node/lib/PipeTransportTypes.d.ts +1 -1
  2. package/node/lib/PipeTransportTypes.d.ts.map +1 -1
  3. package/node/lib/Router.d.ts +2 -1
  4. package/node/lib/Router.d.ts.map +1 -1
  5. package/node/lib/Router.js +10 -2
  6. package/node/lib/RouterTypes.d.ts +5 -0
  7. package/node/lib/RouterTypes.d.ts.map +1 -1
  8. package/node/lib/test/test-Router.js +33 -0
  9. package/npm-scripts.mjs +67 -38
  10. package/package.json +10 -10
  11. package/worker/fuzzer/src/FuzzerUtils.cpp +21 -23
  12. package/worker/fuzzer/src/RTC/FuzzerRateCalculator.cpp +1 -1
  13. package/worker/fuzzer/src/RTC/FuzzerRtpPacket.cpp +3 -3
  14. package/worker/fuzzer/src/RTC/RTCP/FuzzerPacket.cpp +3 -3
  15. package/worker/fuzzer/src/fuzzer.cpp +1 -1
  16. package/worker/include/RTC/RateCalculator.hpp +5 -1
  17. package/worker/include/RTC/RtcLogger.hpp +1 -0
  18. package/worker/include/RTC/SeqManager.hpp +1 -5
  19. package/worker/include/Utils.hpp +87 -63
  20. package/worker/meson.build +1 -0
  21. package/worker/scripts/package-lock.json +316 -277
  22. package/worker/scripts/package.json +1 -1
  23. package/worker/src/RTC/PipeConsumer.cpp +11 -11
  24. package/worker/src/RTC/Producer.cpp +1 -1
  25. package/worker/src/RTC/RateCalculator.cpp +11 -6
  26. package/worker/src/RTC/RtcLogger.cpp +1 -0
  27. package/worker/src/RTC/RtpRetransmissionBuffer.cpp +8 -8
  28. package/worker/src/RTC/RtpStream.cpp +19 -2
  29. package/worker/src/RTC/RtpStreamRecv.cpp +15 -16
  30. package/worker/src/RTC/RtpStreamSend.cpp +2 -1
  31. package/worker/src/RTC/RtxStream.cpp +19 -2
  32. package/worker/src/RTC/SeqManager.cpp +14 -23
  33. package/worker/src/RTC/Transport.cpp +6 -2
  34. package/worker/src/Utils/BitStream.cpp +22 -5
  35. package/worker/test/src/Utils/TestNumber.cpp +130 -0
  36. package/worker/test/src/Utils/TestTime.cpp +0 -51
@@ -58,7 +58,7 @@ type PipeTransportListenIp = {
58
58
  */
59
59
  port?: number;
60
60
  };
61
- export type PipeConsumerOptions<ConsumerAppData> = {
61
+ export type PipeConsumerOptions<ConsumerAppData extends AppData = AppData> = {
62
62
  /**
63
63
  * The id of the Producer to consume.
64
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PipeTransportTypes.d.ts","sourceRoot":"","sources":["../src/PipeTransportTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PipeTransportTypes.d.ts","sourceRoot":"","sources":["../src/PipeTransportTypes.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import type { PipeTransport, PipeTransportOptions } from './PipeTransportTypes';
8
8
  import type { DirectTransport, DirectTransportOptions } from './DirectTransportTypes';
9
9
  import type { ActiveSpeakerObserver, ActiveSpeakerObserverOptions } from './ActiveSpeakerObserverTypes';
10
10
  import type { AudioLevelObserver, AudioLevelObserverOptions } from './AudioLevelObserverTypes';
11
- import type { RtpCapabilities } from './rtpParametersTypes';
11
+ import type { RtpCapabilities, RtpCodecCapability } from './rtpParametersTypes';
12
12
  import type { AppData } from './types';
13
13
  import * as FbsRouter from './fbs/router';
14
14
  export type RouterInternal = {
@@ -52,6 +52,7 @@ export declare class RouterImpl<RouterAppData extends AppData = AppData> extends
52
52
  producerId: string;
53
53
  rtpCapabilities: RtpCapabilities;
54
54
  }): boolean;
55
+ updateMediaCodecs(mediaCodecs: RtpCodecCapability[]): void;
55
56
  private handleListenerError;
56
57
  }
57
58
  export declare function parseRouterDumpResponse(binary: FbsRouter.DumpResponse): RouterDump;
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"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"}
@@ -373,13 +373,13 @@ class RouterImpl extends enhancedEvents_1.EnhancedEventEmitter {
373
373
  /* Decode Response. */
374
374
  const data = new FbsPipeTransport.DumpResponse();
375
375
  response.body(data);
376
- const plainTransportData = (0, PipeTransport_1.parsePipeTransportDumpResponse)(data);
376
+ const pipeTransportData = (0, PipeTransport_1.parsePipeTransportDumpResponse)(data);
377
377
  const transport = new PipeTransport_1.PipeTransportImpl({
378
378
  internal: {
379
379
  ...this.#internal,
380
380
  transportId,
381
381
  },
382
- data: plainTransportData,
382
+ data: pipeTransportData,
383
383
  channel: this.#channel,
384
384
  appData,
385
385
  getRouterRtpCapabilities: () => this.#data.rtpCapabilities,
@@ -748,6 +748,14 @@ class RouterImpl extends enhancedEvents_1.EnhancedEventEmitter {
748
748
  return false;
749
749
  }
750
750
  }
751
+ updateMediaCodecs(mediaCodecs) {
752
+ logger.debug('updateMediaCodecs()');
753
+ // Clone given media codecs to not modify input data.
754
+ const clonedMediaCodecs = utils.clone(mediaCodecs);
755
+ // This may throw.
756
+ const rtpCapabilities = ortc.generateRouterRtpCapabilities(clonedMediaCodecs);
757
+ this.#data.rtpCapabilities = rtpCapabilities;
758
+ }
751
759
  handleListenerError() {
752
760
  this.on('listenererror', (eventName, error) => {
753
761
  logger.error(`event listener threw an error [eventName:${eventName}]:`, error);
@@ -222,6 +222,11 @@ export interface Router<RouterAppData extends AppData = AppData> extends Enhance
222
222
  producerId: string;
223
223
  rtpCapabilities: RtpCapabilities;
224
224
  }): boolean;
225
+ /**
226
+ * Update the Router media codecs. Once called, the return value of the
227
+ * router.rtpCapabilities getter changes.
228
+ */
229
+ updateMediaCodecs(mediaCodecs: RtpCodecCapability[]): void;
225
230
  }
226
231
  export {};
227
232
  //# sourceMappingURL=RouterTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouterTypes.d.ts","sourceRoot":"","sources":["../src/RouterTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouterTypes.d.ts","sourceRoot":"","sources":["../src/RouterTypes.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,19 @@ const ctx = {
33
33
  rtcpFeedback: [], // Will be ignored.
34
34
  },
35
35
  ]),
36
+ unsupportedMediaCodecs: utils.deepFreeze([
37
+ {
38
+ kind: 'audio',
39
+ mimeType: 'audio/x-aiff',
40
+ clockRate: 8000,
41
+ channels: 1,
42
+ },
43
+ {
44
+ kind: 'video',
45
+ mimeType: 'video/3gpp',
46
+ clockRate: 90000,
47
+ },
48
+ ]),
36
49
  };
37
50
  beforeEach(async () => {
38
51
  ctx.worker = await mediasoup.createWorker();
@@ -56,6 +69,8 @@ test('worker.createRouter() succeeds', async () => {
56
69
  expect(router.closed).toBe(false);
57
70
  expect(typeof router.rtpCapabilities).toBe('object');
58
71
  expect(Array.isArray(router.rtpCapabilities.codecs)).toBe(true);
72
+ // 3 codecs + 2 RTX codecs.
73
+ expect(router.rtpCapabilities.codecs?.length).toBe(5);
59
74
  expect(Array.isArray(router.rtpCapabilities.headerExtensions)).toBe(true);
60
75
  expect(router.appData).toEqual({ foo: 123 });
61
76
  expect(() => (router.appData = { foo: 222, bar: 'BBB' })).not.toThrow();
@@ -85,6 +100,9 @@ test('worker.createRouter() succeeds', async () => {
85
100
  // API not exposed in the interface.
86
101
  expect(ctx.worker.routersForTesting.size).toBe(0);
87
102
  }, 2000);
103
+ test('worker.createRouter() with invalid codecs rejects with UnsupportedError', async () => {
104
+ await expect(ctx.worker.createRouter({ mediaCodecs: ctx.unsupportedMediaCodecs })).rejects.toThrow(errors_1.UnsupportedError);
105
+ }, 2000);
88
106
  test('worker.createRouter() with wrong arguments rejects with TypeError', async () => {
89
107
  // @ts-expect-error --- Testing purposes.
90
108
  await expect(ctx.worker.createRouter({ mediaCodecs: {} })).rejects.toThrow(TypeError);
@@ -96,6 +114,21 @@ test('worker.createRouter() rejects with InvalidStateError if Worker is closed',
96
114
  ctx.worker.close();
97
115
  await expect(ctx.worker.createRouter({ mediaCodecs: ctx.mediaCodecs })).rejects.toThrow(errors_1.InvalidStateError);
98
116
  }, 2000);
117
+ test('router.updateMediaCodecs() succeeds', async () => {
118
+ const router = await ctx.worker.createRouter({
119
+ mediaCodecs: ctx.mediaCodecs,
120
+ });
121
+ expect(typeof router.rtpCapabilities).toBe('object');
122
+ expect(Array.isArray(router.rtpCapabilities.codecs)).toBe(true);
123
+ // 3 codecs + 2 RTX codecs.
124
+ expect(router.rtpCapabilities.codecs?.length).toBe(5);
125
+ expect(Array.isArray(router.rtpCapabilities.headerExtensions)).toBe(true);
126
+ router.updateMediaCodecs([]);
127
+ expect(typeof router.rtpCapabilities).toBe('object');
128
+ expect(Array.isArray(router.rtpCapabilities.codecs)).toBe(true);
129
+ expect(router.rtpCapabilities.codecs?.length).toBe(0);
130
+ expect(Array.isArray(router.rtpCapabilities.headerExtensions)).toBe(true);
131
+ }, 2000);
99
132
  test('router.close() succeeds', async () => {
100
133
  const router = await ctx.worker.createRouter({
101
134
  mediaCodecs: ctx.mediaCodecs,
package/npm-scripts.mjs CHANGED
@@ -55,7 +55,7 @@ const PRETTIER_PATHS = [
55
55
  ].join(' ');
56
56
 
57
57
  const task = process.argv[2];
58
- const args = process.argv.slice(3).join(' ');
58
+ const taskArgs = process.argv.slice(3).join(' ');
59
59
 
60
60
  // PYTHONPATH env must be updated now so all invoke calls below will find the
61
61
  // pip invoke module.
@@ -72,17 +72,19 @@ if (process.env.PYTHONPATH) {
72
72
  void run();
73
73
 
74
74
  async function run() {
75
- logInfo(args ? `[args:"${args}"]` : '');
75
+ logInfo(taskArgs ? `[args:"${taskArgs}"]` : '');
76
76
 
77
77
  switch (task) {
78
78
  // As per NPM documentation (https://docs.npmjs.com/cli/v9/using-npm/scripts)
79
79
  // `prepare` script:
80
80
  //
81
- // - Runs BEFORE the package is packed, i.e. during `npm publish` and `npm pack`.
81
+ // - Runs BEFORE the package is packed, i.e. during `npm publish` and
82
+ // `npm pack`.
82
83
  // - Runs on local `npm install` without any arguments.
83
- // - NOTE: If a package being installed through git contains a `prepare` script,
84
- // its dependencies and devDependencies will be installed, and the `prepare`
85
- // script will be run, before the package is packaged and installed.
84
+ // - NOTE: If a package being installed through git contains a `prepare`
85
+ // script, its dependencies and devDependencies will be installed, and
86
+ // the `prepare` script will be run, before the package is packaged and
87
+ // installed.
86
88
  //
87
89
  // So here we generate flatbuffers definitions for TypeScript and compile
88
90
  // TypeScript to JavaScript.
@@ -103,8 +105,8 @@ async function run() {
103
105
  }
104
106
  // If MEDIASOUP_LOCAL_DEV is given, or if MEDIASOUP_SKIP_WORKER_PREBUILT_DOWNLOAD
105
107
  // env is given, or if mediasoup package is being installed via git+ssh
106
- // (instead of via npm), and if MEDIASOUP_FORCE_PREBUILT_WORKER_DOWNLOAD env is
107
- // not set, then skip mediasoup-worker prebuilt download.
108
+ // (instead of via npm), and if MEDIASOUP_FORCE_PREBUILT_WORKER_DOWNLOAD
109
+ // env is not set, then skip mediasoup-worker prebuilt download.
108
110
  else if (
109
111
  (process.env.MEDIASOUP_LOCAL_DEV ||
110
112
  process.env.MEDIASOUP_SKIP_WORKER_PREBUILT_DOWNLOAD ||
@@ -218,7 +220,7 @@ async function run() {
218
220
  }
219
221
 
220
222
  case 'coverage:node': {
221
- executeCmd(`jest --coverage ${args}`);
223
+ executeCmd(`jest --coverage ${taskArgs}`);
222
224
  executeCmd('open-cli coverage/lcov-report/index.html');
223
225
 
224
226
  break;
@@ -260,7 +262,7 @@ async function run() {
260
262
  draft: false,
261
263
  });
262
264
 
263
- executeCmd('npm publish');
265
+ executeInteractiveCmd('npm publish');
264
266
 
265
267
  break;
266
268
  }
@@ -341,7 +343,7 @@ function buildTypescript({ force }) {
341
343
 
342
344
  deleteNodeLib();
343
345
 
344
- executeCmd(`tsc ${args}`);
346
+ executeCmd(`tsc ${taskArgs}`);
345
347
  }
346
348
 
347
349
  function watchTypescript() {
@@ -349,7 +351,7 @@ function watchTypescript() {
349
351
 
350
352
  deleteNodeLib();
351
353
 
352
- executeCmd(`tsc --watch ${args}`);
354
+ executeCmd(`tsc --watch ${taskArgs}`);
353
355
  }
354
356
 
355
357
  function buildWorker() {
@@ -465,7 +467,7 @@ function flatcWorker() {
465
467
  function testNode() {
466
468
  logInfo('testNode()');
467
469
 
468
- executeCmd(`jest --silent false --detectOpenHandles ${args}`);
470
+ executeCmd(`jest --silent false --detectOpenHandles ${taskArgs}`);
469
471
  }
470
472
 
471
473
  function testWorker() {
@@ -518,21 +520,34 @@ async function prebuildWorker() {
518
520
  const workerPrebuildTar = getWorkerPrebuildTarName();
519
521
  const workerPrebuildTarPath = `${WORKER_PREBUILD_DIR}/${workerPrebuildTar}`;
520
522
 
521
- return new Promise((resolve, reject) => {
522
- // Generate a gzip file which just contains mediasoup-worker binary without
523
- // any folder.
524
- tar
525
- .create(
526
- {
527
- cwd: WORKER_RELEASE_DIR,
528
- gzip: true,
529
- },
530
- [WORKER_RELEASE_BIN]
531
- )
532
- .pipe(fs.createWriteStream(workerPrebuildTarPath))
533
- .on('finish', resolve)
534
- .on('error', reject);
535
- });
523
+ try {
524
+ await new Promise((resolve, reject) => {
525
+ // Generate a gzip file which just contains mediasoup-worker binary
526
+ // without any folder.
527
+ tar
528
+ .create(
529
+ {
530
+ cwd: WORKER_RELEASE_DIR,
531
+ gzip: true,
532
+ strict: true,
533
+ },
534
+ [WORKER_RELEASE_BIN]
535
+ )
536
+ // This is needed for the case in which tar.create() fails before
537
+ // invoking pipe() on its result.
538
+ .on('error', reject)
539
+ .pipe(fs.createWriteStream(workerPrebuildTarPath))
540
+ .on('finish', resolve)
541
+ .on('error', reject);
542
+ });
543
+ } catch (error) {
544
+ logError(
545
+ 'prebuildWorker() | failed to create mediasoup-worker prebuilt tar file:',
546
+ error
547
+ );
548
+
549
+ exitWithError();
550
+ }
536
551
  }
537
552
 
538
553
  // Returns a Promise resolving to true if a mediasoup-worker prebuilt binary
@@ -586,8 +601,9 @@ async function downloadPrebuiltWorker() {
586
601
  res.body
587
602
  .pipe(
588
603
  tar.extract({
589
- newer: false,
590
604
  cwd: WORKER_RELEASE_DIR,
605
+ newer: false,
606
+ strict: true,
591
607
  })
592
608
  )
593
609
  .on('finish', () => {
@@ -607,8 +623,8 @@ async function downloadPrebuiltWorker() {
607
623
  // Let's confirm that the fetched mediasoup-worker prebuit binary does
608
624
  // run in current host. This is to prevent weird issues related to
609
625
  // different versions of libc in the system and so on.
610
- // So run mediasoup-worker without the required MEDIASOUP_VERSION env and
611
- // expect exit code 41 (see main.cpp).
626
+ // So run mediasoup-worker without the required MEDIASOUP_VERSION env
627
+ // and expect exit code 41 (see main.cpp).
612
628
 
613
629
  logInfo(
614
630
  'downloadPrebuiltWorker() | checking fetched mediasoup-worker prebuilt binary in current host'
@@ -646,7 +662,8 @@ async function downloadPrebuiltWorker() {
646
662
  })
647
663
  .on('error', error => {
648
664
  logError(
649
- `downloadPrebuiltWorker() | failed to uncompress downloaded mediasoup-worker prebuilt binary: ${error}`
665
+ `downloadPrebuiltWorker() | failed to extract downloaded mediasoup-worker prebuilt binary:`,
666
+ error
650
667
  );
651
668
 
652
669
  resolve(false);
@@ -706,19 +723,31 @@ function executeCmd(command) {
706
723
  }
707
724
  }
708
725
 
709
- function logInfo(message) {
726
+ function executeInteractiveCmd(command) {
727
+ logInfo(`executeInteractiveCmd(): ${command}`);
728
+
729
+ try {
730
+ execSync(command, { stdio: 'inherit', env: process.env });
731
+ } catch (error) {
732
+ logError(`executeInteractiveCmd() failed, exiting: ${error}`);
733
+
734
+ exitWithError();
735
+ }
736
+ }
737
+
738
+ function logInfo(...args) {
710
739
  // eslint-disable-next-line no-console
711
- console.log(`npm-scripts.mjs \x1b[36m[INFO] [${task}]\x1b[0m`, message);
740
+ console.log(`npm-scripts.mjs \x1b[36m[INFO] [${task}]\x1b[0m`, ...args);
712
741
  }
713
742
 
714
- function logWarn(message) {
743
+ function logWarn(...args) {
715
744
  // eslint-disable-next-line no-console
716
- console.warn(`npm-scripts.mjs \x1b[33m[WARN] [${task}]\x1b\0m`, message);
745
+ console.warn(`npm-scripts.mjs \x1b[33m[WARN] [${task}]\x1b\0m`, ...args);
717
746
  }
718
747
 
719
- function logError(message) {
748
+ function logError(...args) {
720
749
  // eslint-disable-next-line no-console
721
- console.error(`npm-scripts.mjs \x1b[31m[ERROR] [${task}]\x1b[0m`, message);
750
+ console.error(`npm-scripts.mjs \x1b[31m[ERROR] [${task}]\x1b[0m`, ...args);
722
751
  }
723
752
 
724
753
  function exitWithError() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup",
3
- "version": "3.16.6",
3
+ "version": "3.16.8",
4
4
  "description": "Cutting Edge WebRTC Video Conferencing",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -100,24 +100,24 @@
100
100
  "tar": "^7.4.3"
101
101
  },
102
102
  "devDependencies": {
103
- "@eslint/js": "^9.30.1",
103
+ "@eslint/js": "^9.32.0",
104
104
  "@octokit/rest": "^22.0.0",
105
105
  "@types/debug": "^4.1.12",
106
106
  "@types/jest": "^30.0.0",
107
- "@types/node": "^24.0.12",
108
- "eslint": "^9.30.1",
109
- "eslint-config-prettier": "^10.1.5",
107
+ "@types/node": "^24.1.0",
108
+ "eslint": "^9.32.0",
109
+ "eslint-config-prettier": "^10.1.8",
110
110
  "eslint-plugin-jest": "^29.0.1",
111
- "eslint-plugin-prettier": "^5.5.1",
111
+ "eslint-plugin-prettier": "^5.5.3",
112
112
  "globals": "^16.3.0",
113
- "jest": "^30.0.4",
114
- "marked": "^16.0.0",
113
+ "jest": "^30.0.5",
114
+ "marked": "^16.1.1",
115
115
  "open-cli": "^8.0.0",
116
- "pick-port": "^2.1.0",
116
+ "pick-port": "^2.1.1",
117
117
  "prettier": "^3.6.2",
118
118
  "sctp": "^1.0.0",
119
119
  "ts-jest": "^29.4.0",
120
120
  "typescript": "^5.8.3",
121
- "typescript-eslint": "^8.36.0"
121
+ "typescript-eslint": "^8.38.0"
122
122
  }
123
123
  }
@@ -6,26 +6,28 @@
6
6
 
7
7
  void Fuzzer::Utils::Fuzz(const uint8_t* data, size_t len)
8
8
  {
9
- uint8_t data2[len + INET6_ADDRSTRLEN * 3]; // For some fuzzers below.
10
- std::memcpy(data2, data, len);
9
+ // For some fuzzers below.
10
+ std::unique_ptr<uint8_t[]> data2(new uint8_t[len + (INET6_ADDRSTRLEN * 3)]);
11
+
12
+ std::memcpy(data2.get(), data, len);
11
13
 
12
14
  /* IP class. */
13
15
 
14
16
  std::string ip;
15
17
 
16
- ip = std::string(reinterpret_cast<const char*>(data2), INET6_ADDRSTRLEN / 2);
18
+ ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN / 2);
17
19
  ::Utils::IP::GetFamily(ip);
18
20
 
19
- ip = std::string(reinterpret_cast<const char*>(data2), INET6_ADDRSTRLEN);
21
+ ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN);
20
22
  ::Utils::IP::GetFamily(ip);
21
23
 
22
- ip = std::string(reinterpret_cast<const char*>(data2), INET6_ADDRSTRLEN * 2);
24
+ ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN * 2);
23
25
  ::Utils::IP::GetFamily(ip);
24
26
 
25
27
  // Protect with try/catch since throws are legit.
26
28
  try
27
29
  {
28
- auto ip = std::string(reinterpret_cast<const char*>(data2), len);
30
+ auto ip = std::string(reinterpret_cast<const char*>(data2.get()), len);
29
31
 
30
32
  ::Utils::IP::NormalizeIp(ip);
31
33
  }
@@ -35,16 +37,16 @@ void Fuzzer::Utils::Fuzz(const uint8_t* data, size_t len)
35
37
 
36
38
  /* Byte class. */
37
39
 
38
- ::Utils::Byte::Get1Byte(data2, len);
39
- ::Utils::Byte::Get2Bytes(data2, len);
40
- ::Utils::Byte::Get3Bytes(data2, len);
41
- ::Utils::Byte::Get4Bytes(data2, len);
42
- ::Utils::Byte::Get8Bytes(data2, len);
43
- ::Utils::Byte::Set1Byte(data2, len, uint8_t{ 6u });
44
- ::Utils::Byte::Set2Bytes(data2, len, uint16_t{ 66u });
45
- ::Utils::Byte::Set3Bytes(data2, len, uint32_t{ 666u });
46
- ::Utils::Byte::Set4Bytes(data2, len, uint32_t{ 666u });
47
- ::Utils::Byte::Set8Bytes(data2, len, uint64_t{ 6666u });
40
+ ::Utils::Byte::Get1Byte(data2.get(), len);
41
+ ::Utils::Byte::Get2Bytes(data2.get(), len);
42
+ ::Utils::Byte::Get3Bytes(data2.get(), len);
43
+ ::Utils::Byte::Get4Bytes(data2.get(), len);
44
+ ::Utils::Byte::Get8Bytes(data2.get(), len);
45
+ ::Utils::Byte::Set1Byte(data2.get(), len, uint8_t{ 6u });
46
+ ::Utils::Byte::Set2Bytes(data2.get(), len, uint16_t{ 66u });
47
+ ::Utils::Byte::Set3Bytes(data2.get(), len, uint32_t{ 666u });
48
+ ::Utils::Byte::Set4Bytes(data2.get(), len, uint32_t{ 666u });
49
+ ::Utils::Byte::Set8Bytes(data2.get(), len, uint64_t{ 6666u });
48
50
  ::Utils::Byte::PadTo4Bytes(static_cast<uint8_t>(len));
49
51
  ::Utils::Byte::PadTo4Bytes(static_cast<uint16_t>(len));
50
52
  ::Utils::Byte::PadTo4Bytes(static_cast<uint32_t>(len));
@@ -59,7 +61,7 @@ void Fuzzer::Utils::Fuzz(const uint8_t* data, size_t len)
59
61
 
60
62
  ::Utils::Crypto::GetRandomUInt(static_cast<uint32_t>(len), static_cast<uint32_t>(len + 1000000));
61
63
  ::Utils::Crypto::GetRandomString(len);
62
- ::Utils::Crypto::GetCRC32(data2, len);
64
+ ::Utils::Crypto::GetCRC32(data2.get(), len);
63
65
 
64
66
  /* String class. */
65
67
 
@@ -68,8 +70,8 @@ void Fuzzer::Utils::Fuzz(const uint8_t* data, size_t len)
68
70
  {
69
71
  size_t outLen;
70
72
 
71
- ::Utils::String::Base64Encode(data2, len);
72
- ::Utils::String::Base64Decode(data2, len, outLen);
73
+ ::Utils::String::Base64Encode(data2.get(), len);
74
+ ::Utils::String::Base64Decode(data2.get(), len, outLen);
73
75
  }
74
76
  catch (const MediaSoupError& error)
75
77
  {
@@ -80,9 +82,5 @@ void Fuzzer::Utils::Fuzz(const uint8_t* data, size_t len)
80
82
  auto ntp = ::Utils::Time::TimeMs2Ntp(static_cast<uint64_t>(len));
81
83
 
82
84
  ::Utils::Time::Ntp2TimeMs(ntp);
83
- ::Utils::Time::IsNewerTimestamp(static_cast<uint32_t>(len), static_cast<uint32_t>(len * len));
84
- ::Utils::Time::IsNewerTimestamp(static_cast<uint32_t>(len * len), static_cast<uint32_t>(len));
85
- ::Utils::Time::LatestTimestamp(static_cast<uint32_t>(len), static_cast<uint32_t>(len * len));
86
- ::Utils::Time::LatestTimestamp(static_cast<uint32_t>(len * len), static_cast<uint32_t>(len));
87
85
  ::Utils::Time::TimeMsToAbsSendTime(static_cast<uint64_t>(len));
88
86
  }
@@ -17,7 +17,7 @@ void Fuzzer::RTC::RateCalculator::Fuzz(const uint8_t* data, size_t len)
17
17
  static int unused = Init();
18
18
 
19
19
  // Avoid [-Wunused-variable].
20
- unused++;
20
+ (void)unused;
21
21
 
22
22
  // We need at least 2 bytes of |data|.
23
23
  if (len < 2)
@@ -15,7 +15,7 @@ void Fuzzer::RTC::RtpPacket::Fuzz(const uint8_t* data, size_t len)
15
15
  // below will try to write into packet memory.
16
16
  //
17
17
  // NOTE: Let's make the buffer bigger to test API that increases packet size.
18
- uint8_t data2[len + 64];
18
+ std::unique_ptr<uint8_t[]> data2(new uint8_t[len + 64]);
19
19
  uint8_t extenLen;
20
20
  bool voice;
21
21
  uint8_t volume;
@@ -30,9 +30,9 @@ void Fuzzer::RTC::RtpPacket::Fuzz(const uint8_t* data, size_t len)
30
30
  std::string rid;
31
31
  std::vector<::RTC::RtpPacket::GenericExtension> extensions;
32
32
 
33
- std::memcpy(data2, data, len);
33
+ std::memcpy(data2.get(), data, len);
34
34
 
35
- ::RTC::RtpPacket* packet = ::RTC::RtpPacket::Parse(data2, len);
35
+ ::RTC::RtpPacket* packet = ::RTC::RtpPacket::Parse(data2.get(), len);
36
36
 
37
37
  if (!packet)
38
38
  {
@@ -17,11 +17,11 @@ void Fuzzer::RTC::RTCP::Packet::Fuzz(const uint8_t* data, size_t len)
17
17
 
18
18
  // We need to clone the given data into a separate buffer because setters
19
19
  // below will try to write into packet memory.
20
- uint8_t data2[len];
20
+ std::unique_ptr<uint8_t[]> data2(new uint8_t[len]);
21
21
 
22
- std::memcpy(data2, data, len);
22
+ std::memcpy(data2.get(), data, len);
23
23
 
24
- ::RTC::RTCP::Packet* packet = ::RTC::RTCP::Packet::Parse(data2, len);
24
+ ::RTC::RTCP::Packet* packet = ::RTC::RTCP::Packet::Parse(data2.get(), len);
25
25
 
26
26
  if (!packet)
27
27
  {
@@ -52,7 +52,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t len)
52
52
  static int unused = Init();
53
53
 
54
54
  // Avoid [-Wunused-variable].
55
- unused++;
55
+ (void)unused;
56
56
 
57
57
  if (fuzzStun)
58
58
  {
@@ -77,7 +77,8 @@ namespace RTC
77
77
  class RtpDataCounter
78
78
  {
79
79
  public:
80
- explicit RtpDataCounter(size_t windowSizeMs = 2500) : rate(windowSizeMs)
80
+ explicit RtpDataCounter(bool ignorePaddingOnlyPackets, size_t windowSizeMs = 2500)
81
+ : ignorePaddingOnlyPackets(ignorePaddingOnlyPackets), rate(windowSizeMs)
81
82
  {
82
83
  }
83
84
 
@@ -100,6 +101,9 @@ namespace RTC
100
101
  }
101
102
 
102
103
  private:
104
+ // Whether the size of padding only RTP packets should not be taken into
105
+ // account
106
+ bool ignorePaddingOnlyPackets{ false };
103
107
  RateCalculator rate;
104
108
  size_t packets{ 0u };
105
109
  };
@@ -17,6 +17,7 @@ namespace RTC
17
17
  PRODUCER_NOT_FOUND,
18
18
  RECV_RTP_STREAM_NOT_FOUND,
19
19
  RECV_RTP_STREAM_DISCARDED,
20
+ RECV_RTP_RTX_STREAM_DISCARDED,
20
21
  CONSUMER_INACTIVE,
21
22
  INVALID_TARGET_LAYER,
22
23
  UNSUPPORTED_PAYLOAD_TYPE,
@@ -27,12 +27,8 @@ namespace RTC
27
27
  };
28
28
 
29
29
  public:
30
- static bool IsSeqLowerThan(T lhs, T rhs);
31
30
  static bool IsSeqHigherThan(T lhs, T rhs);
32
-
33
- private:
34
- static const SeqLowerThan isSeqLowerThan; // NOLINT(readability-identifier-naming)
35
- static const SeqHigherThan isSeqHigherThan; // NOLINT(readability-identifier-naming)
31
+ static bool IsSeqLowerThan(T lhs, T rhs);
36
32
 
37
33
  public:
38
34
  SeqManager() = default;