diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp index e9db1c95..d98ae12e 100644 --- a/daemon/HTTPServer.cpp +++ b/daemon/HTTPServer.cpp @@ -1016,7 +1016,8 @@ namespace http { auto ssu2Server = i2p::transport::transports.GetSSU2Server (); if (ssu2Server) { - auto sessions = ssu2Server->GetSSU2Sessions (); + i2p::transport::SSU2Server::SSU2Sessions sessions; + ssu2Server->GetSSU2Sessions (sessions).get (); if (!sessions.empty ()) ShowTransportSessions (s, sessions, "SSU2"); } diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index 5729051e..522a23b7 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -16,6 +16,7 @@ #include #include #include +#include #include "util.h" #include "SSU2Session.h" #include "SSU2OutOfSession.h" @@ -97,6 +98,8 @@ namespace transport bool IsSyncClockFromPeers () const { return m_IsSyncClockFromPeers; }; void AdjustTimeOffset (int64_t offset, std::shared_ptr from); + using SSU2Sessions = std::unordered_map >; + bool AddSession (std::shared_ptr session); void RemoveSession (uint64_t connID); void RequestRemoveSession (uint64_t connID); @@ -188,7 +191,7 @@ namespace transport ReceiveService m_ReceiveService; boost::asio::ip::udp::socket m_SocketV4, m_SocketV6; boost::asio::ip::address m_AddressV4, m_AddressV6; - std::unordered_map > m_Sessions; + SSU2Sessions m_Sessions; std::unordered_map > m_SessionsByRouterHash; mutable std::mutex m_SessionsByRouterHashMutex; std::map > m_PendingOutgoingSessions; @@ -231,7 +234,11 @@ namespace transport public: // for HTTP/I2PControl - const decltype(m_Sessions)& GetSSU2Sessions () const { return m_Sessions; }; + std::future GetSSU2Sessions (SSU2Sessions& sessions) + { + return boost::asio::post (GetService (), + boost::asio::use_future ([this, &sessions]() { sessions = m_Sessions; })); + }; }; } } diff --git a/libi2pd/Transports.h b/libi2pd/Transports.h index bb66db7c..5559edcb 100644 --- a/libi2pd/Transports.h +++ b/libi2pd/Transports.h @@ -281,7 +281,7 @@ namespace transport // for HTTP only const NTCP2Server * GetNTCP2Server () const { return m_NTCP2Server; }; - const SSU2Server * GetSSU2Server () const { return m_SSU2Server; }; + SSU2Server * GetSSU2Server () const { return m_SSU2Server; }; const decltype(m_Peers)& GetPeers () const { return m_Peers; }; };