mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	enable sending I2NP messages
This commit is contained in:
		
							parent
							
								
									10251a6447
								
							
						
					
					
						commit
						12ac7d6a00
					
				
					 2 changed files with 4 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -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<std::shared_ptr<I2NPMessage> > 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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -217,7 +217,6 @@ namespace transport
 | 
			
		|||
			std::list<std::shared_ptr<I2NPMessage> > m_SendQueue;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	typedef std::array<uint8_t, NTCP2_UNENCRYPTED_FRAME_MAX_SIZE> 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<NTCP2Session> 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<i2p::data::IdentHash, std::shared_ptr<NTCP2Session> > m_NTCP2Sessions; 
 | 
			
		||||
			std::list<std::shared_ptr<NTCP2Session> > m_PendingIncomingSessions;
 | 
			
		||||
 | 
			
		||||
			i2p::util::MemoryPool<NTCP2FrameBuffer> m_NTCP2FrameBuffersPool; // TODO: remove
 | 
			
		||||
 | 
			
		||||
		public:
 | 
			
		||||
 | 
			
		||||
			// for HTTP/I2PControl
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue