blob: e9b51d562944eff8532e2840b653025018d5fcd4 [file] [log] [blame]
/*
* Copyright 2025 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.
*/
#ifndef API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_
#define API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_
#include <cstddef>
#include <memory>
#include <optional>
#include <vector>
#include "api/test/simulated_network.h"
#include "api/units/timestamp.h"
namespace webrtc {
// NetworkQueue defines the interface for a queue used in network simulation.
// The purpose is to allow for different AQM implementations.
// A queue should not modify PacketInFlightInfo except for the explicit
// congestion notification field (ecn).
class NetworkQueue {
public:
// Max capacity a queue is expected to handle.
constexpr static size_t kMaxPacketCapacity = 10000;
virtual ~NetworkQueue() = default;
// Sets the max capacity of the queue. If there are already more than
// `max_capacitiy` packets in the queue, the behaviour depends on the
// implementation.
virtual void SetMaxPacketCapacity(size_t max_capactiy) = 0;
// Enqueues a packet.
// Must return true if the packet is enqueued successfully, false otherwise.
virtual bool EnqueuePacket(const PacketInFlightInfo& packet_info) = 0;
// Next packet that can be dequeued.
virtual std::optional<PacketInFlightInfo> PeekNextPacket() const = 0;
// Dequeues a packet.
// or std::nullopt if there are no enqueued packets.
virtual std::optional<PacketInFlightInfo> DequeuePacket(
Timestamp time_now) = 0;
// Dequeues all packets that are dropped by the queue itself after being
// enqueued.
virtual std::vector<PacketInFlightInfo> DequeueDroppedPackets() = 0;
virtual bool empty() const = 0;
};
class NetworkQueueFactory {
public:
virtual ~NetworkQueueFactory() = default;
virtual std::unique_ptr<NetworkQueue> CreateQueue() = 0;
};
} // namespace webrtc
#endif // API_TEST_NETWORK_EMULATION_NETWORK_QUEUE_H_