/* * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "webrtc/logging/rtc_event_log/rtc_event_log.h" #include "webrtc/modules/congestion_controller/include/congestion_controller.h" #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" #include "webrtc/modules/rtp_rtcp/source/byte_io.h" namespace webrtc { class NullBitrateObserver : public CongestionController::Observer, public RemoteBitrateObserver { public: ~NullBitrateObserver() override {} void OnNetworkChanged(uint32_t bitrate_bps, uint8_t fraction_loss, int64_t rtt_ms) override {} void OnReceiveBitrateChanged(const std::vector& ssrcs, uint32_t bitrate) override {} }; void FuzzOneInput(const uint8_t* data, size_t size) { size_t i = 0; if (size < sizeof(int64_t) + sizeof(uint8_t) + sizeof(uint32_t)) return; SimulatedClock clock(data[i++]); NullBitrateObserver observer; RtcEventLogNullImpl event_log; CongestionController cc(&clock, &observer, &observer, &event_log); RemoteBitrateEstimator* rbe = cc.GetRemoteBitrateEstimator(true); RTPHeader header; header.ssrc = ByteReader::ReadBigEndian(&data[i]); i += sizeof(uint32_t); header.extension.hasTransportSequenceNumber = true; int64_t arrival_time_ms = std::max(ByteReader::ReadBigEndian(&data[i]), 0); i += sizeof(int64_t); const size_t kMinPacketSize = sizeof(size_t) + sizeof(uint16_t) + sizeof(uint8_t); while (i + kMinPacketSize < size) { size_t payload_size = ByteReader::ReadBigEndian(&data[i]) % 1500; i += sizeof(size_t); header.extension.transportSequenceNumber = ByteReader::ReadBigEndian(&data[i]); i += sizeof(uint16_t); rbe->IncomingPacket(arrival_time_ms, payload_size, header); clock.AdvanceTimeMilliseconds(5); arrival_time_ms += ByteReader::ReadBigEndian(&data[i]); arrival_time_ms += sizeof(uint8_t); } rbe->Process(); } } // namespace webrtc