diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index 85dbec42..e218117a 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -447,6 +447,13 @@ namespace util
s << "
\r\nRouters: " << i2p::data::netdb.GetNumRouters () << " ";
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << " ";
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "
\r\n";
+
+ size_t clientTunnelCount = i2p::tunnel::tunnels.CountOutboundTunnels();
+ clientTunnelCount += i2p::tunnel::tunnels.CountInboundTunnels();
+ size_t transitTunnelCount = i2p::tunnel::tunnels.CountTransitTunnels();
+
+ s << "Client Tunnels " << std::to_string(clientTunnelCount) << " ";
+ s << "Transit Tunnels: " << std::to_string(transitTunnelCount) << "
\r\n";
}
void HTTPConnection::HandleCommand (const std::string& command, std::stringstream& s)
diff --git a/Tunnel.cpp b/Tunnel.cpp
index f7102327..ee3b7119 100644
--- a/Tunnel.cpp
+++ b/Tunnel.cpp
@@ -793,7 +793,22 @@ namespace tunnel
if (t > timeout) timeout = t;
}
return timeout;
- }
+ }
+
+ size_t Tunnels::CountTransitTunnels() {
+ // TODO: locking
+ return m_TransitTunnels.size();
+ }
+
+ size_t Tunnels::CountInboundTunnels() {
+ // TODO: locking
+ return m_InboundTunnels.size();
+ }
+
+ size_t Tunnels::CountOutboundTunnels() {
+ // TODO: locking
+ return m_OutboundTunnels.size();
+ }
}
}
diff --git a/Tunnel.h b/Tunnel.h
index 138a48fc..f3bcc127 100644
--- a/Tunnel.h
+++ b/Tunnel.h
@@ -201,6 +201,11 @@ namespace tunnel
const decltype(m_OutboundTunnels)& GetOutboundTunnels () const { return m_OutboundTunnels; };
const decltype(m_InboundTunnels)& GetInboundTunnels () const { return m_InboundTunnels; };
const decltype(m_TransitTunnels)& GetTransitTunnels () const { return m_TransitTunnels; };
+
+ size_t CountTransitTunnels();
+ size_t CountInboundTunnels();
+ size_t CountOutboundTunnels();
+
int GetQueueSize () { return m_Queue.GetSize (); };
int GetTunnelCreationSuccessRate () const // in percents
{