|
|
@ -144,12 +144,14 @@ namespace http { |
|
|
|
" <a href=\"/\">Main page</a><br>\r\n<br>\r\n" |
|
|
|
" <a href=\"/\">Main page</a><br>\r\n<br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_COMMANDS << "\">Router commands</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_COMMANDS << "\">Router commands</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATIONS << "\">Local destinations</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATIONS << "\">Local destinations</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_LEASESETS << "\">Lease Sets</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_LEASESETS << "\">LeaseSets</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TUNNELS << "\">Tunnels</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TUNNELS << "\">Tunnels</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TRANSIT_TUNNELS << "\">Transit tunnels</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TRANSIT_TUNNELS << "\">Transit tunnels</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TRANSPORTS << "\">Transports</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_TRANSPORTS << "\">Transports</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_I2P_TUNNELS << "\">I2P tunnels</a><br>\r\n" |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_I2P_TUNNELS << "\">I2P tunnels</a><br>\r\n"; |
|
|
|
" <a href=\"/?page=" << HTTP_PAGE_SAM_SESSIONS << "\">SAM sessions</a><br>\r\n" |
|
|
|
if (i2p::client::context.GetSAMBridge ()) |
|
|
|
|
|
|
|
s << " <a href=\"/?page=" << HTTP_PAGE_SAM_SESSIONS << "\">SAM sessions</a><br>\r\n"; |
|
|
|
|
|
|
|
s << |
|
|
|
"</div>\r\n" |
|
|
|
"</div>\r\n" |
|
|
|
"<div class=right>"; |
|
|
|
"<div class=right>"; |
|
|
|
} |
|
|
|
} |
|
|
@ -334,7 +336,7 @@ namespace http { |
|
|
|
|
|
|
|
|
|
|
|
void ShowLeasesSets(std::stringstream& s) |
|
|
|
void ShowLeasesSets(std::stringstream& s) |
|
|
|
{ |
|
|
|
{ |
|
|
|
s << "<div id='leasesets'>LeaseSets</div><br>"; |
|
|
|
s << "<div id='leasesets'><b>LeaseSets:</b></div><br>"; |
|
|
|
// for each lease set
|
|
|
|
// for each lease set
|
|
|
|
i2p::data::netdb.VisitLeaseSets( |
|
|
|
i2p::data::netdb.VisitLeaseSets( |
|
|
|
[&s](const i2p::data::IdentHash dest, std::shared_ptr<i2p::data::LeaseSet> leaseSet) |
|
|
|
[&s](const i2p::data::IdentHash dest, std::shared_ptr<i2p::data::LeaseSet> leaseSet) |
|
|
@ -435,11 +437,11 @@ namespace http { |
|
|
|
for (const auto& it: i2p::tunnel::tunnels.GetTransitTunnels ()) |
|
|
|
for (const auto& it: i2p::tunnel::tunnels.GetTransitTunnels ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (std::dynamic_pointer_cast<i2p::tunnel::TransitTunnelGateway>(it)) |
|
|
|
if (std::dynamic_pointer_cast<i2p::tunnel::TransitTunnelGateway>(it)) |
|
|
|
s << it->GetTunnelID () << " ⇒ "; |
|
|
|
s << it->GetTunnelID () << " ⇒ "; |
|
|
|
else if (std::dynamic_pointer_cast<i2p::tunnel::TransitTunnelEndpoint>(it)) |
|
|
|
else if (std::dynamic_pointer_cast<i2p::tunnel::TransitTunnelEndpoint>(it)) |
|
|
|
s << " ⇒ " << it->GetTunnelID (); |
|
|
|
s << " ⇒ " << it->GetTunnelID (); |
|
|
|
else |
|
|
|
else |
|
|
|
s << " ⇒ " << it->GetTunnelID () << " ⇒ "; |
|
|
|
s << " ⇒ " << it->GetTunnelID () << " ⇒ "; |
|
|
|
s << " " << it->GetNumTransmittedBytes () << "<br>\r\n"; |
|
|
|
s << " " << it->GetNumTransmittedBytes () << "<br>\r\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -456,10 +458,10 @@ namespace http { |
|
|
|
if (it.second && it.second->IsEstablished ()) |
|
|
|
if (it.second && it.second->IsEstablished ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// incoming connection doesn't have remote RI
|
|
|
|
// incoming connection doesn't have remote RI
|
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << i2p::data::GetIdentHashAbbreviation (it.second->GetRemoteIdentity ()->GetIdentHash ()) << ": " |
|
|
|
s << i2p::data::GetIdentHashAbbreviation (it.second->GetRemoteIdentity ()->GetIdentHash ()) << ": " |
|
|
|
<< it.second->GetSocket ().remote_endpoint().address ().to_string (); |
|
|
|
<< it.second->GetSocket ().remote_endpoint().address ().to_string (); |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
s << "<br>\r\n" << std::endl; |
|
|
|
s << "<br>\r\n" << std::endl; |
|
|
|
} |
|
|
|
} |
|
|
@ -472,9 +474,9 @@ namespace http { |
|
|
|
for (const auto& it: ssuServer->GetSessions ()) |
|
|
|
for (const auto& it: ssuServer->GetSessions ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto endpoint = it.second->GetRemoteEndpoint (); |
|
|
|
auto endpoint = it.second->GetRemoteEndpoint (); |
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << endpoint.address ().to_string () << ":" << endpoint.port (); |
|
|
|
s << endpoint.address ().to_string () << ":" << endpoint.port (); |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
if (it.second->GetRelayTag ()) |
|
|
|
if (it.second->GetRelayTag ()) |
|
|
|
s << " [itag:" << it.second->GetRelayTag () << "]"; |
|
|
|
s << " [itag:" << it.second->GetRelayTag () << "]"; |
|
|
@ -484,9 +486,9 @@ namespace http { |
|
|
|
for (const auto& it: ssuServer->GetSessionsV6 ()) |
|
|
|
for (const auto& it: ssuServer->GetSessionsV6 ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto endpoint = it.second->GetRemoteEndpoint (); |
|
|
|
auto endpoint = it.second->GetRemoteEndpoint (); |
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << endpoint.address ().to_string () << ":" << endpoint.port (); |
|
|
|
s << endpoint.address ().to_string () << ":" << endpoint.port (); |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
if (!it.second->IsOutgoing ()) s << " ⇒ "; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
s << " [" << it.second->GetNumSentBytes () << ":" << it.second->GetNumReceivedBytes () << "]"; |
|
|
|
s << "<br>\r\n" << std::endl; |
|
|
|
s << "<br>\r\n" << std::endl; |
|
|
|
} |
|
|
|
} |
|
|
@ -547,7 +549,7 @@ namespace http { |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto& ident = it.second->GetLocalDestination ()->GetIdentHash(); |
|
|
|
auto& ident = it.second->GetLocalDestination ()->GetIdentHash(); |
|
|
|
s << "<a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATION << "&b32=" << ident.ToBase32 () << "\">"; |
|
|
|
s << "<a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATION << "&b32=" << ident.ToBase32 () << "\">"; |
|
|
|
s << it.second->GetName () << "</a> ⇐ "; |
|
|
|
s << it.second->GetName () << "</a> ⇐ "; |
|
|
|
s << i2p::client::context.GetAddressBook ().ToAddress(ident); |
|
|
|
s << i2p::client::context.GetAddressBook ().ToAddress(ident); |
|
|
|
s << "<br>\r\n"<< std::endl; |
|
|
|
s << "<br>\r\n"<< std::endl; |
|
|
|
} |
|
|
|
} |
|
|
@ -556,7 +558,7 @@ namespace http { |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto& ident = it.second->GetLocalDestination ()->GetIdentHash(); |
|
|
|
auto& ident = it.second->GetLocalDestination ()->GetIdentHash(); |
|
|
|
s << "<a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATION << "&b32=" << ident.ToBase32 () << "\">"; |
|
|
|
s << "<a href=\"/?page=" << HTTP_PAGE_LOCAL_DESTINATION << "&b32=" << ident.ToBase32 () << "\">"; |
|
|
|
s << it.second->GetName () << "</a> ⇒ "; |
|
|
|
s << it.second->GetName () << "</a> ⇒ "; |
|
|
|
s << i2p::client::context.GetAddressBook ().ToAddress(ident); |
|
|
|
s << i2p::client::context.GetAddressBook ().ToAddress(ident); |
|
|
|
s << ":" << it.second->GetLocalPort (); |
|
|
|
s << ":" << it.second->GetLocalPort (); |
|
|
|
s << "</a><br>\r\n"<< std::endl; |
|
|
|
s << "</a><br>\r\n"<< std::endl; |
|
|
|