1#ifndef FLOW_CONTROL_HPP_PG7RKD8V
2#define FLOW_CONTROL_HPP_PG7RKD8V
4#include <vanetza/common/clock.hpp>
5#include <vanetza/common/hook.hpp>
6#include <vanetza/dcc/data_request.hpp>
7#include <vanetza/dcc/interface.hpp>
8#include <vanetza/dcc/profile.hpp>
9#include <vanetza/dcc/transmission.hpp>
10#include <vanetza/net/chunk_packet.hpp>
11#include <boost/optional/optional.hpp>
21namespace access {
class Interface; }
28class TransmitRateControl;
89 expiry(expiry), request(request), packet(std::move(packet)) {}
91 Clock::time_point expiry;
93 std::unique_ptr<ChunkPacket> packet;
95 Profile profile()
const override {
return request.dcc_profile; }
97 std::size_t body_length()
const override {
return packet ? packet->size() : 0; }
100 using Queue = std::list<PendingTransmission>;
102 void enqueue(
const DataRequest&, std::unique_ptr<ChunkPacket>);
103 boost::optional<PendingTransmission> dequeue();
104 void transmit(
const DataRequest&, std::unique_ptr<ChunkPacket>);
116 std::map<access::AccessCategory, Queue, std::greater<access::AccessCategory>> m_queues;
117 std::size_t m_queue_length;
void set_packet_drop_hook(PacketDropHook::callback_type &&)
void queue_length(std::size_t length)
void request(const DataRequest &, std::unique_ptr< ChunkPacket >) override
void set_packet_transmit_hook(PacketTransmitHook::callback_type &&)