mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2026-08-29 07:38:39 +00:00
use std::list for receive queue
This commit is contained in:
+11
-10
@@ -200,12 +200,10 @@ namespace stream
|
||||
}
|
||||
|
||||
m_SendBuffer.CleanUp ();
|
||||
while (!m_ReceiveQueue.empty ())
|
||||
{
|
||||
auto packet = m_ReceiveQueue.front ();
|
||||
m_ReceiveQueue.pop ();
|
||||
delete packet;
|
||||
}
|
||||
|
||||
for (auto it: m_ReceiveQueue)
|
||||
delete it;
|
||||
m_ReceiveQueue.clear ();
|
||||
|
||||
m_NACKedPackets.clear ();
|
||||
|
||||
@@ -425,7 +423,7 @@ namespace stream
|
||||
size_t packetLength = packet->GetLength ();
|
||||
if (packetLength > 0)
|
||||
{
|
||||
m_ReceiveQueue.push (packet);
|
||||
m_ReceiveQueue.push_back (packet);
|
||||
if (m_SizeToReceive)
|
||||
{
|
||||
if (packetLength < m_SizeToReceive)
|
||||
@@ -1483,20 +1481,23 @@ namespace stream
|
||||
|
||||
size_t Stream::ConcatenatePackets (uint8_t * buf, size_t len)
|
||||
{
|
||||
if (m_ReceiveQueue.empty ()) return 0;
|
||||
size_t pos = 0;
|
||||
while (pos < len && !m_ReceiveQueue.empty ())
|
||||
auto it = m_ReceiveQueue.begin ();
|
||||
while (pos < len && it != m_ReceiveQueue.end ())
|
||||
{
|
||||
Packet * packet = m_ReceiveQueue.front ();
|
||||
Packet * packet = *it;
|
||||
size_t l = std::min (packet->GetLength (), len - pos);
|
||||
memcpy (buf + pos, packet->GetBuffer (), l);
|
||||
pos += l;
|
||||
packet->offset += l;
|
||||
if (!packet->GetLength ())
|
||||
{
|
||||
m_ReceiveQueue.pop ();
|
||||
m_LocalDestination.DeletePacket (packet);
|
||||
it++;
|
||||
}
|
||||
}
|
||||
m_ReceiveQueue.erase (m_ReceiveQueue.begin (), it);
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -13,7 +13,6 @@
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <set>
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
@@ -293,7 +292,7 @@ namespace stream
|
||||
std::shared_ptr<const i2p::data::Lease> m_CurrentRemoteLease;
|
||||
std::shared_ptr<const i2p::data::Lease> m_NextRemoteLease;
|
||||
std::shared_ptr<i2p::tunnel::OutboundTunnel> m_CurrentOutboundTunnel;
|
||||
std::queue<Packet *> m_ReceiveQueue;
|
||||
std::list<Packet *> m_ReceiveQueue;
|
||||
size_t m_SizeToReceive; // before invoke AsyncReceive handler
|
||||
std::set<Packet *, PacketCmp> m_SavedPackets;
|
||||
std::list<Packet *> m_SentPackets;
|
||||
|
||||
Reference in New Issue
Block a user