#pragma once #include #include #include #include #include #include #include #include namespace llarp::iwp { struct Session; struct LinkLayer final : public ILinkLayer { LinkLayer( std::shared_ptr keyManager, std::shared_ptr ev, GetRCFunc getrc, LinkMessageHandler h, SignBufferFunc sign, BeforeConnectFunc_t before, SessionEstablishedHandler est, SessionRenegotiateHandler reneg, TimeoutHandler timeout, SessionClosedHandler closed, PumpDoneHandler pumpDone, WorkerFunc_t dowork, bool permitInbound); std::shared_ptr NewOutboundSession(const RouterContact& rc, const AddressInfo& ai) override; std::string_view Name() const override; uint16_t Rank() const override; void RecvFrom(const SockAddr& from, ILinkSession::Packet_t pkt) override; void WakeupPlaintext(); std::string PrintableName() const; private: void HandleWakeupPlaintext(); const std::shared_ptr m_Wakeup; std::vector m_WakingUp; const bool m_Inbound; }; using LinkLayer_ptr = std::shared_ptr; } // namespace llarp::iwp