diff --git a/Datagram.cpp b/Datagram.cpp index 38dfc3e1..705e10ef 100644 --- a/Datagram.cpp +++ b/Datagram.cpp @@ -182,7 +182,8 @@ namespace datagram // we used this session m_LastUse = i2p::util::GetMillisecondsSinceEpoch(); // schedule send - m_LocalDestination->GetService().post(std::bind(&DatagramSession::HandleSend, this, msg)); + auto self = shared_from_this(); + m_LocalDestination->GetService().post(std::bind(&DatagramSession::HandleSend, self, msg)); } DatagramSession::Info DatagramSession::GetSessionInfo() const @@ -334,7 +335,8 @@ namespace datagram { boost::posix_time::milliseconds dlt(100); m_SendQueueTimer.expires_from_now(dlt); - m_SendQueueTimer.async_wait([this](const boost::system::error_code & ec) { if(ec) return; FlushSendQueue(); }); + auto self = shared_from_this(); + m_SendQueueTimer.async_wait([self](const boost::system::error_code & ec) { if(ec) return; self->FlushSendQueue(); }); } } } diff --git a/Datagram.h b/Datagram.h index 2eb180d6..a10f2646 100644 --- a/Datagram.h +++ b/Datagram.h @@ -34,7 +34,7 @@ namespace datagram // max 64 messages buffered in send queue for each datagram session const size_t DATAGRAM_SEND_QUEUE_MAX_SIZE = 64; - class DatagramSession + class DatagramSession : public std::enable_shared_from_this { public: DatagramSession(i2p::client::ClientDestination * localDestination, @@ -90,7 +90,9 @@ namespace datagram uint64_t m_LastUse; bool m_RequestingLS; }; - + + typedef std::shared_ptr DatagramSession_ptr; + const size_t MAX_DATAGRAM_SIZE = 32768; class DatagramDestination { @@ -132,7 +134,7 @@ namespace datagram i2p::data::IdentityEx m_Identity; Receiver m_Receiver; // default std::mutex m_SessionsMutex; - std::map > m_Sessions; + std::map m_Sessions; std::mutex m_ReceiversMutex; std::map m_ReceiversByPorts;