/* * Copyright (c) 2013-2021, The PurpleI2P Project * * This file is part of Purple i2pd project and licensed under BSD3 * * See full license text in LICENSE file at top of project tree */ #ifndef TUNNEL_GATEWAY_H__ #define TUNNEL_GATEWAY_H__ #include #include #include #include "I2NPProtocol.h" #include "TunnelBase.h" namespace i2p { namespace tunnel { class TunnelGatewayBuffer { public: TunnelGatewayBuffer(); ~TunnelGatewayBuffer(); void PutI2NPMsg(const TunnelMessageBlock &block); const std::vector > & GetTunnelDataMsgs() const { return m_TunnelDataMsgs; }; void ClearTunnelDataMsgs(); void CompleteCurrentTunnelDataMessage(); private: void CreateCurrentTunnelDataMessage(); private: std::vector > m_TunnelDataMsgs; std::shared_ptr m_CurrentTunnelDataMsg; size_t m_RemainingSize; uint8_t *m_NonZeroRandomBuffer; }; class TunnelGateway { public: TunnelGateway(TunnelBase *tunnel) : m_Tunnel(tunnel), m_NumSentBytes(0) {}; void SendTunnelDataMsg(const TunnelMessageBlock &block); void PutTunnelDataMsg(const TunnelMessageBlock &block); void SendBuffer(); size_t GetNumSentBytes() const { return m_NumSentBytes; }; private: TunnelBase *m_Tunnel; TunnelGatewayBuffer m_Buffer; size_t m_NumSentBytes; }; } } #endif