| /* |
| * 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_ |