mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
allocated datagram I2NP from memory pool
This commit is contained in:
parent
a33cad4b70
commit
44bb8f6f16
|
@ -152,7 +152,7 @@ namespace datagram
|
||||||
const std::vector<std::pair<const uint8_t *, size_t> >& payloads,
|
const std::vector<std::pair<const uint8_t *, size_t> >& payloads,
|
||||||
uint16_t fromPort, uint16_t toPort, bool isRaw, bool checksum)
|
uint16_t fromPort, uint16_t toPort, bool isRaw, bool checksum)
|
||||||
{
|
{
|
||||||
auto msg = NewI2NPMessage ();
|
auto msg = m_I2NPMsgsPool.AcquireShared ();
|
||||||
uint8_t * buf = msg->GetPayload ();
|
uint8_t * buf = msg->GetPayload ();
|
||||||
buf += 4; // reserve for length
|
buf += 4; // reserve for length
|
||||||
size_t size = m_Gzip ? m_Deflator.Deflate (payloads, buf, msg->maxLen - msg->len) :
|
size_t size = m_Gzip ? m_Deflator.Deflate (payloads, buf, msg->maxLen - msg->len) :
|
||||||
|
@ -239,9 +239,11 @@ namespace datagram
|
||||||
{
|
{
|
||||||
// we used this session
|
// we used this session
|
||||||
m_LastUse = i2p::util::GetMillisecondsSinceEpoch();
|
m_LastUse = i2p::util::GetMillisecondsSinceEpoch();
|
||||||
// schedule send
|
if (msg || m_SendQueue.empty ())
|
||||||
auto self = shared_from_this();
|
m_SendQueue.push_back(msg);
|
||||||
m_LocalDestination->GetService().post(std::bind(&DatagramSession::HandleSend, self, msg));
|
// flush queue right away if full
|
||||||
|
if (!msg || m_SendQueue.size() >= DATAGRAM_SEND_QUEUE_MAX_SIZE)
|
||||||
|
FlushSendQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
DatagramSession::Info DatagramSession::GetSessionInfo() const
|
DatagramSession::Info DatagramSession::GetSessionInfo() const
|
||||||
|
@ -379,14 +381,6 @@ namespace datagram
|
||||||
if(ls && ls->GetExpirationTime() > oldExpire) m_RemoteLeaseSet = ls;
|
if(ls && ls->GetExpirationTime() > oldExpire) m_RemoteLeaseSet = ls;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatagramSession::HandleSend(std::shared_ptr<I2NPMessage> msg)
|
|
||||||
{
|
|
||||||
if (msg || m_SendQueue.empty ())
|
|
||||||
m_SendQueue.push_back(msg);
|
|
||||||
// flush queue right away if full
|
|
||||||
if(!msg || m_SendQueue.size() >= DATAGRAM_SEND_QUEUE_MAX_SIZE) FlushSendQueue();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DatagramSession::FlushSendQueue ()
|
void DatagramSession::FlushSendQueue ()
|
||||||
{
|
{
|
||||||
if (m_SendQueue.empty ()) return;
|
if (m_SendQueue.empty ()) return;
|
||||||
|
|
|
@ -85,8 +85,6 @@ namespace datagram
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void HandleSend(std::shared_ptr<I2NPMessage> msg);
|
|
||||||
|
|
||||||
std::shared_ptr<i2p::garlic::GarlicRoutingPath> GetSharedRoutingPath();
|
std::shared_ptr<i2p::garlic::GarlicRoutingPath> GetSharedRoutingPath();
|
||||||
|
|
||||||
void HandleLeaseSetUpdated(std::shared_ptr<i2p::data::LeaseSet> ls);
|
void HandleLeaseSetUpdated(std::shared_ptr<i2p::data::LeaseSet> ls);
|
||||||
|
@ -119,6 +117,7 @@ namespace datagram
|
||||||
|
|
||||||
void SendDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash & ident, uint16_t fromPort = 0, uint16_t toPort = 0);
|
void SendDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash & ident, uint16_t fromPort = 0, uint16_t toPort = 0);
|
||||||
void SendRawDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash & ident, uint16_t fromPort = 0, uint16_t toPort = 0);
|
void SendRawDatagramTo (const uint8_t * payload, size_t len, const i2p::data::IdentHash & ident, uint16_t fromPort = 0, uint16_t toPort = 0);
|
||||||
|
// TODO: implement calls from other thread from SAM
|
||||||
|
|
||||||
std::shared_ptr<DatagramSession> GetSession(const i2p::data::IdentHash & ident);
|
std::shared_ptr<DatagramSession> GetSession(const i2p::data::IdentHash & ident);
|
||||||
void SendDatagram (std::shared_ptr<DatagramSession> session, const uint8_t * payload, size_t len, uint16_t fromPort, uint16_t toPort);
|
void SendDatagram (std::shared_ptr<DatagramSession> session, const uint8_t * payload, size_t len, uint16_t fromPort, uint16_t toPort);
|
||||||
|
@ -168,6 +167,7 @@ namespace datagram
|
||||||
i2p::data::GzipInflator m_Inflator;
|
i2p::data::GzipInflator m_Inflator;
|
||||||
i2p::data::GzipDeflator m_Deflator;
|
i2p::data::GzipDeflator m_Deflator;
|
||||||
std::vector<uint8_t> m_From, m_Signature;
|
std::vector<uint8_t> m_From, m_Signature;
|
||||||
|
i2p::util::MemoryPool<I2NPMessageBuffer<I2NP_MAX_MESSAGE_SIZE> > m_I2NPMsgsPool;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue