diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp
index 363b365a..50eebe2e 100644
--- a/daemon/HTTPServer.cpp
+++ b/daemon/HTTPServer.cpp
@@ -496,18 +496,42 @@ namespace http {
if (ntcpServer)
{
auto sessions = ntcpServer->GetNTCPSessions ();
- s << "NTCP ( " << (int) sessions.size() << " )
\r\n";
- for (const auto& it: sessions )
+ if (!sessions.empty ())
{
- if (it.second && it.second->IsEstablished ())
+ std::stringstream tmp_s, tmp_s6; uint16_t cnt = 0, cnt6 = 0;
+ for (const auto& it: sessions )
{
- // incoming connection doesn't have remote RI
- if (it.second->IsOutgoing ()) s << " ⇒ ";
- s << i2p::data::GetIdentHashAbbreviation (it.second->GetRemoteIdentity ()->GetIdentHash ()) << ": "
- << it.second->GetSocket ().remote_endpoint().address ().to_string ();
- if (!it.second->IsOutgoing ()) s << " ⇒ ";
- s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
- s << "
\r\n" << std::endl;
+ if (it.second && it.second->IsEstablished () && !it.second->GetSocket ().remote_endpoint ().address ().is_v6 ())
+ {
+ // incoming connection doesn't have remote RI
+ if (it.second->IsOutgoing ()) tmp_s << " ⇒ ";
+ tmp_s << i2p::data::GetIdentHashAbbreviation (it.second->GetRemoteIdentity ()->GetIdentHash ()) << ": "
+ << it.second->GetSocket ().remote_endpoint().address ().to_string ();
+ if (!it.second->IsOutgoing ()) tmp_s << " ⇒ ";
+ tmp_s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
+ tmp_s << "
\r\n" << std::endl;
+ cnt++;
+ }
+ if (it.second && it.second->IsEstablished () && it.second->GetSocket ().remote_endpoint ().address ().is_v6 ())
+ {
+ if (it.second->IsOutgoing ()) tmp_s6 << " ⇒ ";
+ tmp_s6 << i2p::data::GetIdentHashAbbreviation (it.second->GetRemoteIdentity ()->GetIdentHash ()) << ": "
+ << "[" << it.second->GetSocket ().remote_endpoint().address ().to_string () << "]";
+ if (!it.second->IsOutgoing ()) tmp_s6 << " ⇒ ";
+ tmp_s6 << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
+ tmp_s6 << "
\r\n" << std::endl;
+ cnt6++;
+ }
+ }
+ if (!tmp_s.str ().empty ())
+ {
+ s << "NTCP ( " << cnt << " )
\r\n";
+ s << tmp_s.str () << "
\r\n";
+ }
+ if (!tmp_s6.str ().empty ())
+ {
+ s << "NTCP6 ( " << cnt6 << " )
\r\n";
+ s << tmp_s6.str () << "
\r\n";
}
}
}
@@ -515,27 +539,36 @@ namespace http {
if (ssuServer)
{
auto sessions = ssuServer->GetSessions ();
- s << "
\r\nSSU ( " << (int) sessions.size() << " )
\r\n";
- for (const auto& it: sessions)
+ if (!sessions.empty ())
{
- auto endpoint = it.second->GetRemoteEndpoint ();
- if (it.second->IsOutgoing ()) s << " ⇒ ";
- s << endpoint.address ().to_string () << ":" << endpoint.port ();
- if (!it.second->IsOutgoing ()) s << " ⇒ ";
- s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
- if (it.second->GetRelayTag ())
- s << " [itag:" << it.second->GetRelayTag () << "]";
- s << "
\r\n" << std::endl;
+ s << "SSU ( " << (int) sessions.size() << " )
\r\n";
+ for (const auto& it: sessions)
+ {
+ auto endpoint = it.second->GetRemoteEndpoint ();
+ if (it.second->IsOutgoing ()) s << " ⇒ ";
+ s << endpoint.address ().to_string () << ":" << endpoint.port ();
+ if (!it.second->IsOutgoing ()) s << " ⇒ ";
+ s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
+ if (it.second->GetRelayTag ())
+ s << " [itag:" << it.second->GetRelayTag () << "]";
+ s << "
\r\n" << std::endl;
+ }
}
- s << "
\r\nSSU6
\r\n";
- for (const auto& it: ssuServer->GetSessionsV6 ())
+ auto sessions6 = ssuServer->GetSessionsV6 ();
+ if (!sessions6.empty ())
{
- auto endpoint = it.second->GetRemoteEndpoint ();
- if (it.second->IsOutgoing ()) s << " ⇒ ";
- s << endpoint.address ().to_string () << ":" << endpoint.port ();
- if (!it.second->IsOutgoing ()) s << " ⇒ ";
- s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
- s << "
\r\n" << std::endl;
+ s << "SSU6 ( " << (int) sessions6.size() << " )
\r\n";
+ for (const auto& it: sessions6)
+ {
+ auto endpoint = it.second->GetRemoteEndpoint ();
+ if (it.second->IsOutgoing ()) s << " ⇒ ";
+ s << "[" << endpoint.address ().to_string () << "]:" << endpoint.port ();
+ if (!it.second->IsOutgoing ()) s << " ⇒ ";
+ s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]";
+ if (it.second->GetRelayTag ())
+ s << " [itag:" << it.second->GetRelayTag () << "]";
+ s << "
\r\n" << std::endl;
+ }
}
}
}