#include "RTC/FuzzerRateCalculator.hpp"
#include "DepLibUV.hpp"
#include "RTC/Consts.hpp"
#include "RTC/RateCalculator.hpp"
#include "Utils.hpp"
namespace
{
RTC::RateCalculator rateCalculator;
uint64_t nowMs;
int init()
{
nowMs = DepLibUV::GetTimeMs();
return 0;
}
}
void FuzzerRtcRateCalculator::Fuzz(const uint8_t* data, size_t len)
{
static thread_local const int unused = init();
(void)unused;
if (len < 2)
{
return;
}
auto size = Utils::Crypto::GetRandomUInt<size_t>(0u, static_cast<uint32_t>(RTC::Consts::MtuSize));
nowMs += Utils::Crypto::GetRandomUInt<uint64_t>(0u, 1000u);
rateCalculator.Update(size, nowMs);
if (Utils::Byte::Get2Bytes(data, 0) % 100 == 0)
{
rateCalculator.GetRate(nowMs);
}
}