diff --git a/aether/channels/ethernet_transport_factory.cpp b/aether/channels/ethernet_transport_factory.cpp index 4c376576..b37adc8a 100644 --- a/aether/channels/ethernet_transport_factory.cpp +++ b/aether/channels/ethernet_transport_factory.cpp @@ -36,6 +36,11 @@ // IWYU pragma: end_keeps namespace ae { +namespace ethernet_transport_factory_internal { +static constexpr auto kTcpPacketQueueCapacity = AE_TCP_PACKET_QUEUE_SIZE; +static constexpr auto kUdpPacketQueueCapacity = AE_UDP_PACKET_QUEUE_SIZE; +} // namespace ethernet_transport_factory_internal + std::unique_ptr EthernetTransportFactory::Create( AeContext const& ae_context, Ptr const& poller, Endpoint address_port_protocol) { @@ -70,8 +75,10 @@ std::unique_ptr EthernetTransportFactory::BuildTcp( using SocketType = WinTcpSocket; # endif - return std::make_unique>( - ae_context, poller, std::move(address_port_protocol)); + using Transport = TcpTransport< + SocketType, ethernet_transport_factory_internal::kTcpPacketQueueCapacity>; + return std::make_unique(ae_context, poller, + std::move(address_port_protocol)); # else static_assert(false, "No transport enabled"); # endif @@ -100,8 +107,10 @@ std::unique_ptr EthernetTransportFactory::BuildUdp( # elif WIN_SOCKET_ENABLED using SocketType = WinUdpSocket; # endif - return std::make_unique>( - ae_context, poller, std::move(address_port_protocol)); + using Transport = UdpTransport< + SocketType, ethernet_transport_factory_internal::kUdpPacketQueueCapacity>; + return std::make_unique(ae_context, poller, + std::move(address_port_protocol)); # else static_assert(false, "No transport enabled"); # endif diff --git a/aether/client_messages/p2p_message_stream.h b/aether/client_messages/p2p_message_stream.h index 8fdb5eaa..600bb5a2 100644 --- a/aether/client_messages/p2p_message_stream.h +++ b/aether/client_messages/p2p_message_stream.h @@ -21,6 +21,7 @@ #include #include "aether/common.h" +#include "aether/config.h" #include "aether-objects/ptr/ptr_view.h" #include "aether/ae_context.h" @@ -60,6 +61,9 @@ class P2pStream final : public ByteIStream { Uid const& destination() const; private: + static constexpr auto kBufferCapacity = AE_P2P_MESSAGE_STREAM_BUFFER_CAPACITY; + using Buffer = BufferWrite; + void ConnectReceive(); void ConnectSend(); @@ -76,7 +80,7 @@ class P2pStream final : public ByteIStream { // connection to destination cloud std::unique_ptr dest_cloud_conn_; - BufferWrite buffer_write_; + Buffer buffer_write_; std::unique_ptr message_send_stream_; OutDataEvent out_data_event_; diff --git a/aether/client_messages/p2p_safe_message_stream.h b/aether/client_messages/p2p_safe_message_stream.h index bad726d2..e32a16ce 100644 --- a/aether/client_messages/p2p_safe_message_stream.h +++ b/aether/client_messages/p2p_safe_message_stream.h @@ -17,23 +17,24 @@ #ifndef AETHER_CLIENT_MESSAGES_P2P_SAFE_MESSAGE_STREAM_H_ #define AETHER_CLIENT_MESSAGES_P2P_SAFE_MESSAGE_STREAM_H_ -#include "aether/common.h" #include "aether/ae_context.h" -#include "aether/memory.h" +#include "aether/common.h" #include "aether/config.h" -#include "aether/actions/action_context.h" +#include "aether/memory.h" +#include "aether/safe_stream/safe_stream_config.h" #include "aether/stream_api/istream.h" #include "aether/stream_api/sized_packet_gate.h" -#include "aether/safe_stream/safe_stream_config.h" namespace ae { template class SafeStream; +static constexpr inline std::size_t kP2pSafeStreamCapacity = + AE_SAFE_STREAM_CAPACITY; class P2pSafeStream final : public ByteIStream { public: - using SafeStreamImpl = SafeStream; + using SafeStreamImpl = SafeStream; P2pSafeStream(AeContext const& ae_context, SafeStreamConfig const& config, std::shared_ptr p2p_stream); @@ -49,7 +50,6 @@ class P2pSafeStream final : public ByteIStream { private: SizedPacketGate sized_packet_gate_; - // TODO: add config std::unique_ptr safe_stream_; std::shared_ptr p2p_stream_; OutDataEvent out_data_event_; diff --git a/aether/config.h b/aether/config.h index f9ef0d3c..543cd7da 100644 --- a/aether/config.h +++ b/aether/config.h @@ -17,6 +17,10 @@ #ifndef AETHER_CONFIG_H_ #define AETHER_CONFIG_H_ +// Defines Aether's compile-time configuration defaults. USER_CONFIG, when +// defined, is included before these defaults so it can override them. Add new +// options to aether/tele_compile_options.h for telemetry reporting. + // IWYU pragma: begin_exports #include #include @@ -87,6 +91,51 @@ # define AE_TCP_PACKET_QUEUE_SIZE 100 #endif // AE_TCP_PACKET_QUEUE_SIZE +// Buffered server connection write buffer entry count. +#ifndef AE_SERVER_CONNECTION_BUFFER_CAPACITY +# define AE_SERVER_CONNECTION_BUFFER_CAPACITY 10 +#endif + +// Root registration server selection stream write buffer entry count. +#ifndef AE_ROOT_REG_SERVER_BUFFER_CAPACITY +# define AE_ROOT_REG_SERVER_BUFFER_CAPACITY 2 +#endif + +// Peer-to-peer message stream write buffer entry count. +#ifndef AE_P2P_MESSAGE_STREAM_BUFFER_CAPACITY +# define AE_P2P_MESSAGE_STREAM_BUFFER_CAPACITY 10 +#endif + +// Cloud retrieval action pool entry count. +#ifndef AE_CLOUD_GET_CLOUD_ACTION_POOL_CAPACITY +# define AE_CLOUD_GET_CLOUD_ACTION_POOL_CAPACITY 5 +#endif + +// Cloud server retrieval action pool entry count. +#ifndef AE_CLOUD_GET_SERVERS_ACTION_POOL_CAPACITY +# define AE_CLOUD_GET_SERVERS_ACTION_POOL_CAPACITY 5 +#endif + +// Modem network operation action pool entry count. +#ifndef AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY +# define AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY 10 +#endif + +// Modem write action pool entry count. +#ifndef AE_MODEM_WRITE_ACTION_POOL_CAPACITY +# define AE_MODEM_WRITE_ACTION_POOL_CAPACITY 10 +#endif + +// Modem TCP packet queue entry count. +#ifndef AE_MODEM_TCP_PACKET_QUEUE_SIZE +# define AE_MODEM_TCP_PACKET_QUEUE_SIZE 10 +#endif + +// Modem UDP packet queue entry count. +#ifndef AE_MODEM_UDP_PACKET_QUEUE_SIZE +# define AE_MODEM_UDP_PACKET_QUEUE_SIZE 10 +#endif + #ifndef AE_SUPPORT_WEBSOCKET # define AE_SUPPORT_WEBSOCKET 1 #endif // AE_SUPPORT_WEBSOCKET diff --git a/aether/connection_manager/client_cloud_manager.h b/aether/connection_manager/client_cloud_manager.h index e1755032..2cb41288 100644 --- a/aether/connection_manager/client_cloud_manager.h +++ b/aether/connection_manager/client_cloud_manager.h @@ -20,6 +20,8 @@ #include #include +#include "aether/config.h" + #include "aether-objects/obj/obj.h" #include "aether-objects/ptr/ptr.h" #include "aether/actions/action_pool.h" @@ -72,6 +74,11 @@ class ClientCloudManager : public Obj { ClientCloudManager() = default; public: + static constexpr auto kGetCloudActionPoolCapacity = + AE_CLOUD_GET_CLOUD_ACTION_POOL_CAPACITY; + static constexpr auto kGetServersActionPoolCapacity = + AE_CLOUD_GET_SERVERS_ACTION_POOL_CAPACITY; + using CloudUpdateEvent = Event)>; @@ -79,8 +86,9 @@ class ClientCloudManager : public Obj { ActionPool, - 5>; - using GetServersPool = ActionPool; + kGetCloudActionPoolCapacity>; + using GetServersPool = + ActionPool; explicit ClientCloudManager(ObjProp prop, ObjPtr aether, ObjPtr client); diff --git a/aether/modems/bg95_at_modem.h b/aether/modems/bg95_at_modem.h index 801d1379..731f8702 100644 --- a/aether/modems/bg95_at_modem.h +++ b/aether/modems/bg95_at_modem.h @@ -19,16 +19,16 @@ #include "aether/config.h" #if AE_SUPPORT_MODEMS && AE_ENABLE_BG95 -# include # include +# include -# include "aether/ae_context.h" -# include "aether/poller/poller.h" # include "aether/actions/action_pool.h" # include "aether/actions/actions_queue.h" # include "aether/actions/repeatable_task.h" -# include "aether/serial_ports/iserial_port.h" +# include "aether/ae_context.h" +# include "aether/poller/poller.h" # include "aether/serial_ports/at_support/at_support.h" +# include "aether/serial_ports/iserial_port.h" # include "aether/modems/imodem_driver.h" @@ -95,8 +95,7 @@ class ModemStartedAlreadyOperation final : public ModemOperation { class ModemStartOperation final : public ModemOperation { public: - explicit ModemStartOperation(AeContext const& ae_context, - Bg95AtModem& self); + explicit ModemStartOperation(AeContext const& ae_context, Bg95AtModem& self); private: auto SetBaudRate(kBaudRate const rate); @@ -125,8 +124,7 @@ class ModemStoppedAlreadyOperation final : public ModemOperation { class ModemStopOperation final : public ModemOperation { public: - explicit ModemStopOperation(AeContext const& ae_context, - Bg95AtModem& self); + explicit ModemStopOperation(AeContext const& ae_context, Bg95AtModem& self); private: auto Pipeline(); @@ -141,8 +139,8 @@ class ModemStopOperation final : public ModemOperation { class ModemSetPowerSaveParamOperation final : public ModemOperation { public: explicit ModemSetPowerSaveParamOperation(AeContext const& /*ae_context*/, - Bg95AtModem& /*self*/, - ModemPowerSaveParam /*psp*/) { + Bg95AtModem& /*self*/, + ModemPowerSaveParam /*psp*/) { SetResult(Ok{kIgnore}); } }; @@ -150,7 +148,7 @@ class ModemSetPowerSaveParamOperation final : public ModemOperation { class ModemPowerOffOperation final : public ModemOperation { public: explicit ModemPowerOffOperation(AeContext const& ae_context, - Bg95AtModem& self); + Bg95AtModem& self); private: auto Pipeline(); @@ -174,13 +172,13 @@ class Bg95AtModem final : public IModemDriver { static constexpr std::uint16_t kModemMTU{1520}; public: - explicit Bg95AtModem(AeContext const& ae_context, - IPoller::ptr const& poller, ModemInit modem_init); + explicit Bg95AtModem(AeContext const& ae_context, IPoller::ptr const& poller, + ModemInit modem_init); ModemOperation* Start() override; ModemOperation* Stop() override; OpenNetworkOperation* OpenNetwork(Protocol protocol, std::string const& host, - std::uint16_t port) override; + std::uint16_t port) override; ModemOperation* CloseNetwork(ConnectionIndex connect_index) override; WriteOperation* WritePacket(ConnectionIndex connect_index, std::span data) override; @@ -190,6 +188,21 @@ class Bg95AtModem final : public IModemDriver { ModemOperation* PowerOff() override; private: + static constexpr auto kNetworkOpActionPoolCapacity = + AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY; + static constexpr auto kWriteActionPoolCapacity = + AE_MODEM_WRITE_ACTION_POOL_CAPACITY; + + using OpenNetworkActionPool = + ActionPool; + using CloseNetworkActionPool = + ActionPool; + using WriteActionPool = + ActionPool; + void Init(); void SetupPoll(); void PollEvent(std::int32_t handle); @@ -208,12 +221,9 @@ class Bg95AtModem final : public IModemDriver { std::unique_ptr modem_stop_operation_; std::unique_ptr modem_set_psp_operation_; std::unique_ptr modem_poweroff_operation_; - ActionPool - open_network_pool_; - ActionPool - close_network_pool_; - ActionPool - write_pool_; + OpenNetworkActionPool open_network_pool_; + CloseNetworkActionPool close_network_pool_; + WriteActionPool write_pool_; bool initiated_; bool started_; @@ -222,4 +232,4 @@ class Bg95AtModem final : public IModemDriver { } /* namespace ae */ #endif -#endif // AETHER_MODEMS_BG95_AT_MODEM_H_ \ No newline at end of file +#endif // AETHER_MODEMS_BG95_AT_MODEM_H_ diff --git a/aether/modems/sim7070_at_modem.h b/aether/modems/sim7070_at_modem.h index 58707c01..82ebbfeb 100644 --- a/aether/modems/sim7070_at_modem.h +++ b/aether/modems/sim7070_at_modem.h @@ -20,16 +20,16 @@ #include "aether/config.h" #if AE_SUPPORT_MODEMS && AE_ENABLE_SIM7070 -# include # include +# include -# include "aether/ae_context.h" -# include "aether/poller/poller.h" # include "aether/actions/action_pool.h" # include "aether/actions/actions_queue.h" # include "aether/actions/repeatable_task.h" -# include "aether/serial_ports/iserial_port.h" +# include "aether/ae_context.h" +# include "aether/poller/poller.h" # include "aether/serial_ports/at_support/at_support.h" +# include "aether/serial_ports/iserial_port.h" # include "aether/modems/imodem_driver.h" @@ -196,6 +196,21 @@ class Sim7070AtModem final : public IModemDriver { ModemOperation* PowerOff() override; private: + static constexpr auto kNetworkOpActionPoolCapacity = + AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY; + static constexpr auto kWriteActionPoolCapacity = + AE_MODEM_WRITE_ACTION_POOL_CAPACITY; + + using OpenNetworkActionPool = + ActionPool; + using CloseNetworkActionPool = + ActionPool; + using WriteActionPool = + ActionPool; + void Init(); void SetupPoll(); void PollEvent(std::int32_t handle); @@ -214,12 +229,9 @@ class Sim7070AtModem final : public IModemDriver { std::unique_ptr modem_stop_operation_; std::unique_ptr modem_set_psp_operation_; std::unique_ptr modem_poweroff_operation_; - ActionPool - open_network_pool_; - ActionPool - close_network_pool_; - ActionPool - write_pool_; + OpenNetworkActionPool open_network_pool_; + CloseNetworkActionPool close_network_pool_; + WriteActionPool write_pool_; bool initiated_; bool started_; diff --git a/aether/modems/thingy91x_at_modem.h b/aether/modems/thingy91x_at_modem.h index 433af8c8..46648c68 100644 --- a/aether/modems/thingy91x_at_modem.h +++ b/aether/modems/thingy91x_at_modem.h @@ -19,16 +19,16 @@ #include "aether/config.h" #if AE_SUPPORT_MODEMS && AE_ENABLE_THINGY91X -# include # include +# include -# include "aether/ae_context.h" -# include "aether/poller/poller.h" # include "aether/actions/action_pool.h" # include "aether/actions/actions_queue.h" # include "aether/actions/repeatable_task.h" -# include "aether/serial_ports/iserial_port.h" +# include "aether/ae_context.h" +# include "aether/poller/poller.h" # include "aether/serial_ports/at_support/at_support.h" +# include "aether/serial_ports/iserial_port.h" # include "aether/modems/imodem_driver.h" @@ -123,6 +123,21 @@ class Thingy91xAtModem final : public IModemDriver { ModemOperation* PowerOff() override; private: + static constexpr auto kNetworkOpActionPoolCapacity = + AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY; + static constexpr auto kWriteActionPoolCapacity = + AE_MODEM_WRITE_ACTION_POOL_CAPACITY; + + using OpenNetworkActionPool = + ActionPool; + using CloseNetworkActionPool = + ActionPool; + using WriteActionPool = + ActionPool; + void Init(); void SetupPoll(); void PollEvent(std::int32_t handle, std::string_view flags); @@ -137,12 +152,9 @@ class Thingy91xAtModem final : public IModemDriver { std::unique_ptr modem_stop_operation_; std::unique_ptr modem_set_psp_operation_; std::unique_ptr modem_poweroff_operation_; - ActionPool - open_network_pool_; - ActionPool - close_network_pool_; - ActionPool - write_pool_; + OpenNetworkActionPool open_network_pool_; + CloseNetworkActionPool close_network_pool_; + WriteActionPool write_pool_; std::set connections_; DataEvent data_event_; diff --git a/aether/registration/root_server_select_stream.h b/aether/registration/root_server_select_stream.h index 6069e254..ad7a0bb6 100644 --- a/aether/registration/root_server_select_stream.h +++ b/aether/registration/root_server_select_stream.h @@ -35,9 +35,9 @@ namespace ae { class Aether; struct RootServerSelectStreamTestAccess; + class RootServerSelectStream final : public ByteIStream { public: - static constexpr std::size_t kBufferCapacity = 2; using ServerChangedEvent = Event; using CloudErrorEvent = Event; @@ -54,6 +54,9 @@ class RootServerSelectStream final : public ByteIStream { CloudErrorEvent::Subscriber cloud_error_event(); private: + static constexpr auto kBufferCapacity = AE_ROOT_REG_SERVER_BUFFER_CAPACITY; + using Buffer = BufferWrite; + friend struct RootServerSelectStreamTestAccess; WriteAction* OnWrite(DataBuffer&& data); @@ -65,7 +68,7 @@ class RootServerSelectStream final : public ByteIStream { AeContext ae_context_; PtrView cloud_; - BufferWrite buffer_write_; + Buffer buffer_write_; // The next server priority to select. Registration server priorities must be // contiguous starting at zero; gaps are UB. This invariant and Cloud's // strict server collection capacity bound ensure this value never increments diff --git a/aether/server_connections/client_server_connection.h b/aether/server_connections/client_server_connection.h index 9d12ac87..b8e51bd7 100644 --- a/aether/server_connections/client_server_connection.h +++ b/aether/server_connections/client_server_connection.h @@ -17,6 +17,8 @@ #ifndef AETHER_SERVER_CONNECTIONS_CLIENT_SERVER_CONNECTION_H_ #define AETHER_SERVER_CONNECTIONS_CLIENT_SERVER_CONNECTION_H_ +#include "aether/config.h" + #include "aether/ae_context.h" #include "aether/common.h" #include "aether/crypto/icrypto_provider.h" @@ -35,9 +37,11 @@ class Server; class Channel; namespace client_server_connection_internal { +static constexpr auto kBufferCapacity = AE_SERVER_CONNECTION_BUFFER_CAPACITY; + class BufferedServerConnection : public ByteIStream { public: - static constexpr std::size_t kBufferCapacity = 10; + using Buffer = BufferWrite; BufferedServerConnection(AeContext const& ae_context, Ptr const& server); @@ -48,7 +52,7 @@ class BufferedServerConnection : public ByteIStream { OutDataEvent::Subscriber out_data_event() override; void Restream() override; - BufferWrite buffer_write; + Buffer buffer_write; ServerConnection server_connection; }; } // namespace client_server_connection_internal diff --git a/aether/tele_compile_options.h b/aether/tele_compile_options.h index ffcc29ca..4534daef 100644 --- a/aether/tele_compile_options.h +++ b/aether/tele_compile_options.h @@ -48,6 +48,15 @@ constexpr inline auto _compile_options_list = std::array{ _OPTION(AE_UDP_PACKET_QUEUE_SIZE), _OPTION(AE_SUPPORT_TCP), _OPTION(AE_TCP_PACKET_QUEUE_SIZE), + _OPTION(AE_SERVER_CONNECTION_BUFFER_CAPACITY), + _OPTION(AE_ROOT_REG_SERVER_BUFFER_CAPACITY), + _OPTION(AE_P2P_MESSAGE_STREAM_BUFFER_CAPACITY), + _OPTION(AE_CLOUD_GET_CLOUD_ACTION_POOL_CAPACITY), + _OPTION(AE_CLOUD_GET_SERVERS_ACTION_POOL_CAPACITY), + _OPTION(AE_MODEM_NETWORK_OP_ACTION_POOL_CAPACITY), + _OPTION(AE_MODEM_WRITE_ACTION_POOL_CAPACITY), + _OPTION(AE_MODEM_TCP_PACKET_QUEUE_SIZE), + _OPTION(AE_MODEM_UDP_PACKET_QUEUE_SIZE), _OPTION(AE_SUPPORT_WEBSOCKET), _OPTION(AE_SUPPORT_HTTP), _OPTION(AE_SUPPORT_HTTP_OVER_TCP), diff --git a/aether/transport/modems/modem_transport.cpp b/aether/transport/modems/modem_transport.cpp index 8b1a0b73..e32224a5 100644 --- a/aether/transport/modems/modem_transport.cpp +++ b/aether/transport/modems/modem_transport.cpp @@ -185,8 +185,7 @@ WriteAction& ModemTransport::Write(DataBuffer&& in_data) { WriteAction& ModemTransport::WriteTcp(DataBuffer&& in_data) { auto& send_queue_manager = - std::get>( - packet_queue_manager_); + std::get(packet_queue_manager_); // Make TCP packet with its size at the beginning auto packet_data = std::vector{}; @@ -212,8 +211,7 @@ WriteAction& ModemTransport::WriteTcp(DataBuffer&& in_data) { } WriteAction& ModemTransport::WriteUdp(DataBuffer&& in_data) { auto& send_queue_manager = - std::get>( - packet_queue_manager_); + std::get(packet_queue_manager_); auto* send_action = send_queue_manager.AddPacket(ae_context_, *this, std::move(in_data)); @@ -322,15 +320,11 @@ ModemTransport::PacketQueueManagerVar ModemTransport::MakePacketQueueManager( switch (endpoint.protocol) { case Protocol::kTcp: { return PacketQueueManagerVar{ - std::in_place_type_t< - PacketQueueManager>{}, - ae_context}; + std::in_place_type_t{}, ae_context}; } default: { return PacketQueueManagerVar{ - std::in_place_type_t< - PacketQueueManager>{}, - ae_context}; + std::in_place_type_t{}, ae_context}; } } } diff --git a/aether/transport/modems/modem_transport.h b/aether/transport/modems/modem_transport.h index 22210230..b162a862 100644 --- a/aether/transport/modems/modem_transport.h +++ b/aether/transport/modems/modem_transport.h @@ -21,24 +21,20 @@ #if AE_SUPPORT_MODEMS # define MODEM_TRANSPORT_ENABLED 1 -# include # include +# include # include "aether/ae_context.h" # include "aether/events/multi_subscription.h" -# include "aether/stream_api/istream.h" # include "aether/modems/imodem_driver.h" -# include "aether/transport/packet_send_action.h" -# include "aether/transport/packet_queue_manager.h" +# include "aether/stream_api/istream.h" # include "aether/transport/data_packet_collector.h" +# include "aether/transport/packet_queue_manager.h" +# include "aether/transport/packet_send_action.h" # include "aether/write_action/failed_write_action.h" namespace ae { - -// TODO: add config -static constexpr std::size_t kTcpSendQueueSize = 10; - class ModemTransport final : public ByteIStream { class ModemSend : public PacketSendAction { public: @@ -82,9 +78,17 @@ class ModemTransport final : public ByteIStream { Subscription send_sub_; }; + static constexpr auto kTcpPacketQueueCapacity = + AE_MODEM_TCP_PACKET_QUEUE_SIZE; + static constexpr auto kUdpPacketQueueCapacity = + AE_MODEM_UDP_PACKET_QUEUE_SIZE; + + using ModemTcpPacketQueueManager = + PacketQueueManager; + using ModemUdpPacketQueueManager = + PacketQueueManager; using PacketQueueManagerVar = - std::variant, - PacketQueueManager>; + std::variant; public: ModemTransport(AeContext const& ae_context, IModemDriver& modem_driver, diff --git a/aether/transport/packet_queue_manager.h b/aether/transport/packet_queue_manager.h index 5ccd46a4..0921abf5 100644 --- a/aether/transport/packet_queue_manager.h +++ b/aether/transport/packet_queue_manager.h @@ -23,12 +23,13 @@ #include #include "aether/ae_context.h" +#include "aether/common.h" #include "aether/transport/packet_send_action.h" #include "aether/transport/transport_tele.h" namespace ae { -template +template requires(std::is_base_of_v) class PacketQueueManager { public: diff --git a/aether/transport/system_sockets/udp/udp.h b/aether/transport/system_sockets/udp/udp.h index 7f7e7b5e..f176720c 100644 --- a/aether/transport/system_sockets/udp/udp.h +++ b/aether/transport/system_sockets/udp/udp.h @@ -33,11 +33,11 @@ # include "aether/poller/poller.h" # include "aether/stream_api/istream.h" -# include "aether/transport/transport_tele.h" -# include "aether/transport/packet_send_action.h" # include "aether/transport/packet_queue_manager.h" -# include "aether/write_action/failed_write_action.h" +# include "aether/transport/packet_send_action.h" # include "aether/transport/system_sockets/sockets/isocket.h" +# include "aether/transport/transport_tele.h" +# include "aether/write_action/failed_write_action.h" namespace ae { namespace upd_internal { diff --git a/aether/write_action/buffer_write.h b/aether/write_action/buffer_write.h index 4b3a0baf..9d90fe78 100644 --- a/aether/write_action/buffer_write.h +++ b/aether/write_action/buffer_write.h @@ -71,7 +71,7 @@ class BufferedWriteAction final : public WriteAction { /** * \brief Buffers write requests until gate is not ready to accept them. */ -template +template class BufferWrite { struct BufferEntry { BufferedWriteAction wa;