From 12ac7d6a00e82362216bce7d5ddc424e20a57360 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 3 Dec 2018 18:47:20 -0500 Subject: [PATCH] enable sending I2NP messages --- libi2pd/NTCP2.cpp | 43 ++++--------------------------------------- libi2pd/NTCP2.h | 6 ------ 2 files changed, 4 insertions(+), 45 deletions(-) diff --git a/libi2pd/NTCP2.cpp b/libi2pd/NTCP2.cpp index 83e97bc6..4e1a5fc4 100644 --- a/libi2pd/NTCP2.cpp +++ b/libi2pd/NTCP2.cpp @@ -943,7 +943,7 @@ namespace transport m_LastActivityTimestamp = i2p::util::GetSecondsSinceEpoch (); m_NumSentBytes += bytes_transferred; i2p::transport::transports.UpdateSentBytes (bytes_transferred); - LogPrint (eLogDebug, "NTCP2: Next frame sent"); + LogPrint (eLogDebug, "NTCP2: Next frame sent ", bytes_transferred); SendQueue (); } } @@ -969,13 +969,13 @@ namespace transport len += 3; totalLen += len; encryptBufs.push_back (std::make_pair (buf, len)); - if (it == *msgs.begin ()) // first message + if (&it == &msgs.front ()) // first message { // allocate two bytes for length buf -= 2; len += 2; first = it; } - if (it == *msgs.rbegin () && it->len + 16 < it->maxLen) // last message + if (&it == &msgs.back () && it->len + 16 < it->maxLen) // last message { // if it's long enough we add padding and MAC to it // create padding block @@ -1023,41 +1023,6 @@ namespace transport void NTCP2Session::SendQueue () { if (!m_SendQueue.empty ()) - { - auto buf = m_Server.NewNTCP2FrameBuffer (); - uint8_t * payload = buf->data (); - size_t s = 0; - // add I2NP blocks - while (!m_SendQueue.empty ()) - { - auto msg = m_SendQueue.front (); - size_t len = msg->GetNTCP2Length (); - if (s + len + 3 <= NTCP2_UNENCRYPTED_FRAME_MAX_SIZE) // 3 bytes block header - { - payload[s] = eNTCP2BlkI2NPMessage; // blk - htobe16buf (payload + s + 1, len); // size - s += 3; - msg->ToNTCP2 (); - memcpy (payload + s, msg->GetNTCP2Header (), len); - s += len; - m_SendQueue.pop_front (); - } - else if (len + 3 > NTCP2_UNENCRYPTED_FRAME_MAX_SIZE) - { - LogPrint (eLogError, "NTCP2: I2NP message of size ", len, " can't be sent. Dropped"); - m_SendQueue.pop_front (); - } - else - break; - } - // add padding block - s += CreatePaddingBlock (s, payload + s, NTCP2_UNENCRYPTED_FRAME_MAX_SIZE - s); - // send - SendNextFrame (payload, s); - m_Server.DeleteNTCP2FrameBuffer (buf); - } - -/* if (!m_SendQueue.empty ()) { std::vector > msgs; size_t s = 0; @@ -1080,7 +1045,7 @@ namespace transport break; } SendI2NPMsgs (msgs); - } */ + } } size_t NTCP2Session::CreatePaddingBlock (size_t msgLen, uint8_t * buf, size_t len) diff --git a/libi2pd/NTCP2.h b/libi2pd/NTCP2.h index c0aed286..ee7ce892 100644 --- a/libi2pd/NTCP2.h +++ b/libi2pd/NTCP2.h @@ -217,7 +217,6 @@ namespace transport std::list > m_SendQueue; }; - typedef std::array NTCP2FrameBuffer; // TODO: remove class NTCP2Server { public: @@ -236,9 +235,6 @@ namespace transport void Connect(const boost::asio::ip::address & address, uint16_t port, std::shared_ptr conn); - NTCP2FrameBuffer * NewNTCP2FrameBuffer () { return m_NTCP2FrameBuffersPool.Acquire(); } - void DeleteNTCP2FrameBuffer (NTCP2FrameBuffer * buf) { return m_NTCP2FrameBuffersPool.Release(buf); } - private: void Run (); @@ -262,8 +258,6 @@ namespace transport std::map > m_NTCP2Sessions; std::list > m_PendingIncomingSessions; - i2p::util::MemoryPool m_NTCP2FrameBuffersPool; // TODO: remove - public: // for HTTP/I2PControl