// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdint.h>

#include "cast/streaming/impl/compound_rtcp_parser.h"
#include "cast/streaming/impl/rtcp_session.h"
#include "cast/streaming/public/frame_id.h"
#include "platform/base/span.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  using openscreen::cast::CompoundRtcpParser;
  using openscreen::cast::FrameId;
  using openscreen::cast::RtcpSession;
  using openscreen::cast::Ssrc;

  constexpr Ssrc kSenderSsrcInSeedCorpus = 1;
  constexpr Ssrc kReceiverSsrcInSeedCorpus = 2;

  class ClientThatIgnoresEverything : public CompoundRtcpParser::Client {
   public:
    ClientThatIgnoresEverything() = default;
    ~ClientThatIgnoresEverything() override = default;
  };
  // Allocate the RtcpSession and CompoundRtcpParser statically (i.e., one-time
  // init) to improve the fuzzer's execution rate. This is because RtcpSession
  // also contains a NtpTimeConverter, which samples the system clock at
  // construction time. There is no reason to re-construct these objects for
  // each fuzzer test input.
  static auto* session =
      new RtcpSession(kSenderSsrcInSeedCorpus, kReceiverSsrcInSeedCorpus,
                      openscreen::Clock::time_point{});
  static auto* client_that_ignores_everything =
      new ClientThatIgnoresEverything();
  static auto* parser =
      new CompoundRtcpParser(*session, *client_that_ignores_everything);

  static constexpr auto kMaxFeedbackFrameId = FrameId::first() + 100;
  parser->Parse(openscreen::ByteView(data, size), kMaxFeedbackFrameId);

  return 0;
}

#if defined(NEEDS_MAIN_TO_CALL_FUZZER_DRIVER)

// Forward declarations of Clang's built-in libFuzzer driver.
namespace fuzzer {
using TestOneInputCallback = int (*)(const uint8_t* data, size_t size);
int FuzzerDriver(int* argc, char*** argv, TestOneInputCallback callback);
}  // namespace fuzzer

int main(int argc, char* argv[]) {
  return fuzzer::FuzzerDriver(&argc, &argv, LLVMFuzzerTestOneInput);
}

#endif  // defined(NEEDS_MAIN_TO_CALL_FUZZER_DRIVER)
