From 1e9a53da3fead5b1caaea7145ef90eb411bc2ff7 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 4 Mar 2020 15:54:09 -0500 Subject: [PATCH] delete stream by id for HTTP interface --- libi2pd/Destination.cpp | 10 ++++++++++ libi2pd/Destination.h | 1 + libi2pd/Streaming.cpp | 9 +++++++++ libi2pd/Streaming.h | 1 + 4 files changed, 21 insertions(+) diff --git a/libi2pd/Destination.cpp b/libi2pd/Destination.cpp index 6544d120..d4620ed9 100644 --- a/libi2pd/Destination.cpp +++ b/libi2pd/Destination.cpp @@ -1191,6 +1191,16 @@ namespace client } } + bool ClientDestination::DeleteStream (uint32_t recvStreamID) + { + if (m_StreamingDestination->DeleteStream (recvStreamID)) + return true; + for (auto it: m_StreamingDestinationsByPorts) + if (it.second->DeleteStream (recvStreamID)) + return true; + return false; + } + RunnableClientDestination::RunnableClientDestination (const i2p::data::PrivateKeys& keys, bool isPublic, const std::map * params): RunnableService ("Destination"), ClientDestination (GetIOService (), keys, isPublic, params) diff --git a/libi2pd/Destination.h b/libi2pd/Destination.h index ed3abdfb..23ed5188 100644 --- a/libi2pd/Destination.h +++ b/libi2pd/Destination.h @@ -281,6 +281,7 @@ namespace client // for HTTP only std::vector > GetAllStreams () const; + bool DeleteStream (uint32_t recvStreamID); }; class RunnableClientDestination: private i2p::util::RunnableService, public ClientDestination diff --git a/libi2pd/Streaming.cpp b/libi2pd/Streaming.cpp index b5f935fe..97a653f5 100644 --- a/libi2pd/Streaming.cpp +++ b/libi2pd/Streaming.cpp @@ -1128,6 +1128,15 @@ namespace stream } } + bool StreamingDestination::DeleteStream (uint32_t recvStreamID) + { + auto it = m_Streams.find (recvStreamID); + if (it == m_Streams.end ()) + return false; + DeleteStream (it->second); + return true; + } + void StreamingDestination::SetAcceptor (const Acceptor& acceptor) { m_Acceptor = acceptor; // we must set it immediately for IsAcceptorSet diff --git a/libi2pd/Streaming.h b/libi2pd/Streaming.h index 3424bb2d..9962ad8d 100644 --- a/libi2pd/Streaming.h +++ b/libi2pd/Streaming.h @@ -250,6 +250,7 @@ namespace stream std::shared_ptr CreateNewOutgoingStream (std::shared_ptr remote, int port = 0); void DeleteStream (std::shared_ptr stream); + bool DeleteStream (uint32_t recvStreamID); void SetAcceptor (const Acceptor& acceptor); void ResetAcceptor (); bool IsAcceptorSet () const { return m_Acceptor != nullptr; };