diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index 44841a91..142c392b 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -248,6 +248,23 @@ namespace http {
s << seconds << " seconds";
}
+ void ShowTunnelDetails (std::stringstream& s, enum i2p::tunnel::TunnelState eState, int bytes)
+ {
+ std::string state;
+ switch (eState) {
+ case i2p::tunnel::eTunnelStateBuildReplyReceived :
+ case i2p::tunnel::eTunnelStatePending : state = "building"; break;
+ case i2p::tunnel::eTunnelStateBuildFailed :
+ case i2p::tunnel::eTunnelStateTestFailed :
+ case i2p::tunnel::eTunnelStateFailed : state = "failed"; break;
+ case i2p::tunnel::eTunnelStateExpiring : state = "expiring"; break;
+ case i2p::tunnel::eTunnelStateEstablished : state = "established"; break;
+ default: state = "unknown"; break;
+ }
+ s << " " << state << ", ";
+ s << " " << (int) (bytes / 1024) << " KiB
\r\n";
+ }
+
void ShowStatus (std::stringstream& s)
{
s << "Uptime: ";
@@ -356,28 +373,19 @@ namespace http {
auto pool = dest->GetTunnelPool ();
if (pool)
{
- s << "Tunnels:
\r\n";
- for (auto it: pool->GetOutboundTunnels ())
- {
- it->Print (s);
- auto state = it->GetState ();
- if (state == i2p::tunnel::eTunnelStateFailed)
- s << " " << "Failed";
- else if (state == i2p::tunnel::eTunnelStateExpiring)
- s << " " << "Exp";
- s << "
\r\n" << std::endl;
+ s << "Inbound tunnels:
\r\n";
+ for (auto & it : pool->GetInboundTunnels ()) {
+ it->Print(s);
+ ShowTunnelDetails(s, it->GetState (), it->GetNumReceivedBytes ());
}
- for (auto it: pool->GetInboundTunnels ())
- {
- it->Print (s);
- auto state = it->GetState ();
- if (state == i2p::tunnel::eTunnelStateFailed)
- s << " " << "Failed";
- else if (state == i2p::tunnel::eTunnelStateExpiring)
- s << " " << "Exp";
- s << "
\r\n" << std::endl;
+ s << "
\r\n";
+ s << "Outbound tunnels:
\r\n";
+ for (auto & it : pool->GetOutboundTunnels ()) {
+ it->Print(s);
+ ShowTunnelDetails(s, it->GetState (), it->GetNumSentBytes ());
}
}
+ s << "
\r\n";
s << "Tags
Incoming: " << dest->GetNumIncomingTags () << "
Outgoing:
" << std::endl;
for (auto it: dest->GetSessions ())
{
@@ -430,30 +438,20 @@ namespace http {
void ShowTunnels (std::stringstream& s)
{
- s << "Tunnels:
\r\n
\r\n";
s << "Queue size: " << i2p::tunnel::tunnels.GetQueueSize () << "
\r\n";
- for (auto it: i2p::tunnel::tunnels.GetOutboundTunnels ())
- {
- it->Print (s);
- auto state = it->GetState ();
- if (state == i2p::tunnel::eTunnelStateFailed)
- s << " " << "Failed";
- else if (state == i2p::tunnel::eTunnelStateExpiring)
- s << " " << "Expiring";
- s << " " << (int)it->GetNumSentBytes () << "
\r\n";
- s << std::endl;
- }
- for (auto it: i2p::tunnel::tunnels.GetInboundTunnels ())
- {
- it->Print (s);
- auto state = it->GetState ();
- if (state == i2p::tunnel::eTunnelStateFailed)
- s << " " << "Failed";
- else if (state == i2p::tunnel::eTunnelStateExpiring)
- s << " " << "Expiring";
- s << " " << (int)it->GetNumReceivedBytes () << "
\r\n";
+ s << "Inbound tunnels:
\r\n";
+ for (auto & it : i2p::tunnel::tunnels.GetInboundTunnels ()) {
+ it->Print(s);
+ ShowTunnelDetails(s, it->GetState (), it->GetNumReceivedBytes ());
}
+ s << "
\r\n";
+ s << "Outbound tunnels:
\r\n";
+ for (auto & it : i2p::tunnel::tunnels.GetOutboundTunnels ()) {
+ it->Print(s);
+ ShowTunnelDetails(s, it->GetState (), it->GetNumSentBytes ());
+ }
+ s << "
\r\n";
}
void ShowCommands (std::stringstream& s)