mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 11:47:48 +02:00
[webconsole] remove version from title, move tunnel chain print from Tunnel class
Signed-off-by: R4SAS <r4sas@i2pmail.org>
This commit is contained in:
parent
9b4e8bf64b
commit
c9e4e78f41
3 changed files with 79 additions and 67 deletions
|
@ -182,7 +182,7 @@ namespace http {
|
||||||
" <meta charset=\"UTF-8\">\r\n"
|
" <meta charset=\"UTF-8\">\r\n"
|
||||||
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n"
|
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n"
|
||||||
" <link rel=\"shortcut icon\" href=\"" << itoopieFavicon << "\">\r\n"
|
" <link rel=\"shortcut icon\" href=\"" << itoopieFavicon << "\">\r\n"
|
||||||
" <title>Purple I2P " VERSION " Webconsole</title>\r\n";
|
" <title>Purple I2P Webconsole</title>\r\n";
|
||||||
GetStyles(s);
|
GetStyles(s);
|
||||||
s <<
|
s <<
|
||||||
"</head>\r\n"
|
"</head>\r\n"
|
||||||
|
@ -196,8 +196,10 @@ namespace http {
|
||||||
if (i2p::context.IsFloodfill ())
|
if (i2p::context.IsFloodfill ())
|
||||||
s << " <a href=\"" << webroot << "?page=" << HTTP_PAGE_LEASESETS << "\">" << tr("LeaseSets") << "</a><br>\r\n";
|
s << " <a href=\"" << webroot << "?page=" << HTTP_PAGE_LEASESETS << "\">" << tr("LeaseSets") << "</a><br>\r\n";
|
||||||
s <<
|
s <<
|
||||||
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_TUNNELS << "\">" << tr("Tunnels") << "</a><br>\r\n"
|
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_TUNNELS << "\">" << tr("Tunnels") << "</a><br>\r\n";
|
||||||
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_TRANSIT_TUNNELS << "\">" << tr("Transit Tunnels") << "</a><br>\r\n"
|
if (i2p::context.AcceptsTunnels () || i2p::tunnel::tunnels.CountTransitTunnels())
|
||||||
|
s << " <a href=\"" << webroot << "?page=" << HTTP_PAGE_TRANSIT_TUNNELS << "\">" << tr("Transit Tunnels") << "</a><br>\r\n";
|
||||||
|
s <<
|
||||||
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_TRANSPORTS << "\">" << tr ("Transports") << "</a><br>\r\n"
|
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_TRANSPORTS << "\">" << tr ("Transports") << "</a><br>\r\n"
|
||||||
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_I2P_TUNNELS << "\">" << tr("I2P tunnels") << "</a><br>\r\n";
|
" <a href=\"" << webroot << "?page=" << HTTP_PAGE_I2P_TUNNELS << "\">" << tr("I2P tunnels") << "</a><br>\r\n";
|
||||||
if (i2p::client::context.GetSAMBridge ())
|
if (i2p::client::context.GetSAMBridge ())
|
||||||
|
@ -447,7 +449,17 @@ namespace http {
|
||||||
s << "<b>" << tr("Inbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
s << "<b>" << tr("Inbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
||||||
for (auto & it : pool->GetInboundTunnels ()) {
|
for (auto & it : pool->GetInboundTunnels ()) {
|
||||||
s << "<div class=\"listitem\">";
|
s << "<div class=\"listitem\">";
|
||||||
it->Print(s);
|
// for each tunnel hop if not zero-hop
|
||||||
|
if (it->GetNumHops ())
|
||||||
|
{
|
||||||
|
it->VisitTunnelHops(
|
||||||
|
[&s](std::shared_ptr<const i2p::data::IdentityEx> hopIdent)
|
||||||
|
{
|
||||||
|
s << "⇒ " << i2p::data::GetIdentHashAbbreviation (hopIdent->GetIdentHash ()) << " ";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
s << "⇒ " << it->GetTunnelID () << ":me";
|
||||||
if (it->LatencyIsKnown())
|
if (it->LatencyIsKnown())
|
||||||
s << " ( " << it->GetMeanLatency() << tr(/* tr: Milliseconds */ "ms") << " )";
|
s << " ( " << it->GetMeanLatency() << tr(/* tr: Milliseconds */ "ms") << " )";
|
||||||
ShowTunnelDetails(s, it->GetState (), false, it->GetNumReceivedBytes ());
|
ShowTunnelDetails(s, it->GetState (), false, it->GetNumReceivedBytes ());
|
||||||
|
@ -457,7 +469,17 @@ namespace http {
|
||||||
s << "<b>" << tr("Outbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
s << "<b>" << tr("Outbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
||||||
for (auto & it : pool->GetOutboundTunnels ()) {
|
for (auto & it : pool->GetOutboundTunnels ()) {
|
||||||
s << "<div class=\"listitem\">";
|
s << "<div class=\"listitem\">";
|
||||||
it->Print(s);
|
s << it->GetTunnelID () << ":me ⇒";
|
||||||
|
// for each tunnel hop if not zero-hop
|
||||||
|
if (it->GetNumHops ())
|
||||||
|
{
|
||||||
|
it->VisitTunnelHops(
|
||||||
|
[&s](std::shared_ptr<const i2p::data::IdentityEx> hopIdent)
|
||||||
|
{
|
||||||
|
s << " " << i2p::data::GetIdentHashAbbreviation (hopIdent->GetIdentHash ()) << " ⇒";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
if (it->LatencyIsKnown())
|
if (it->LatencyIsKnown())
|
||||||
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
||||||
ShowTunnelDetails(s, it->GetState (), false, it->GetNumSentBytes ());
|
ShowTunnelDetails(s, it->GetState (), false, it->GetNumSentBytes ());
|
||||||
|
@ -631,7 +653,16 @@ namespace http {
|
||||||
s << "<b>" << tr("Inbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
s << "<b>" << tr("Inbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
||||||
for (auto & it : i2p::tunnel::tunnels.GetInboundTunnels ()) {
|
for (auto & it : i2p::tunnel::tunnels.GetInboundTunnels ()) {
|
||||||
s << "<div class=\"listitem\">";
|
s << "<div class=\"listitem\">";
|
||||||
it->Print(s);
|
if (it->GetNumHops ())
|
||||||
|
{
|
||||||
|
it->VisitTunnelHops(
|
||||||
|
[&s](std::shared_ptr<const i2p::data::IdentityEx> hopIdent)
|
||||||
|
{
|
||||||
|
s << "⇒ " << i2p::data::GetIdentHashAbbreviation (hopIdent->GetIdentHash ()) << " ";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
s << "⇒ " << it->GetTunnelID () << ":me";
|
||||||
if (it->LatencyIsKnown())
|
if (it->LatencyIsKnown())
|
||||||
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
||||||
ShowTunnelDetails(s, it->GetState (), (it->GetTunnelPool () == ExplPool), it->GetNumReceivedBytes ());
|
ShowTunnelDetails(s, it->GetState (), (it->GetTunnelPool () == ExplPool), it->GetNumReceivedBytes ());
|
||||||
|
@ -641,7 +672,17 @@ namespace http {
|
||||||
s << "<b>" << tr("Outbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
s << "<b>" << tr("Outbound tunnels") << ":</b><br>\r\n<div class=\"list\">\r\n";
|
||||||
for (auto & it : i2p::tunnel::tunnels.GetOutboundTunnels ()) {
|
for (auto & it : i2p::tunnel::tunnels.GetOutboundTunnels ()) {
|
||||||
s << "<div class=\"listitem\">";
|
s << "<div class=\"listitem\">";
|
||||||
it->Print(s);
|
s << it->GetTunnelID () << ":me ⇒";
|
||||||
|
// for each tunnel hop if not zero-hop
|
||||||
|
if (it->GetNumHops ())
|
||||||
|
{
|
||||||
|
it->VisitTunnelHops(
|
||||||
|
[&s](std::shared_ptr<const i2p::data::IdentityEx> hopIdent)
|
||||||
|
{
|
||||||
|
s << " " << i2p::data::GetIdentHashAbbreviation (hopIdent->GetIdentHash ()) << " ⇒";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
if (it->LatencyIsKnown())
|
if (it->LatencyIsKnown())
|
||||||
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
s << " ( " << it->GetMeanLatency() << tr("ms") << " )";
|
||||||
ShowTunnelDetails(s, it->GetState (), (it->GetTunnelPool () == ExplPool), it->GetNumSentBytes ());
|
ShowTunnelDetails(s, it->GetState (), (it->GetTunnelPool () == ExplPool), it->GetNumSentBytes ());
|
||||||
|
@ -1065,6 +1106,7 @@ namespace http {
|
||||||
SendReply(res, content);
|
SendReply(res, content);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool strictheaders;
|
bool strictheaders;
|
||||||
i2p::config::GetOption("http.strictheaders", strictheaders);
|
i2p::config::GetOption("http.strictheaders", strictheaders);
|
||||||
if (strictheaders)
|
if (strictheaders)
|
||||||
|
@ -1087,6 +1129,7 @@ namespace http {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTML head start
|
// HTML head start
|
||||||
ShowPageHead (s);
|
ShowPageHead (s);
|
||||||
if (req.uri.find("page=") != std::string::npos) {
|
if (req.uri.find("page=") != std::string::npos) {
|
||||||
|
|
|
@ -235,15 +235,11 @@ namespace tunnel
|
||||||
m_State = state;
|
m_State = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tunnel::VisitTunnelHops(TunnelHopVisitor v)
|
||||||
void Tunnel::PrintHops (std::stringstream& s) const
|
|
||||||
{
|
{
|
||||||
// hops are in inverted order, we must print in direct order
|
// hops are in inverted order, we must return in direct order
|
||||||
for (auto it = m_Hops.rbegin (); it != m_Hops.rend (); it++)
|
for (auto it = m_Hops.rbegin (); it != m_Hops.rend (); it++)
|
||||||
{
|
v((*it).ident);
|
||||||
s << " ⇒ ";
|
|
||||||
s << i2p::data::GetIdentHashAbbreviation ((*it).ident->GetIdentHash ());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InboundTunnel::HandleTunnelDataMsg (std::shared_ptr<I2NPMessage>&& msg)
|
void InboundTunnel::HandleTunnelDataMsg (std::shared_ptr<I2NPMessage>&& msg)
|
||||||
|
@ -254,12 +250,6 @@ namespace tunnel
|
||||||
m_Endpoint.HandleDecryptedTunnelDataMsg (msg);
|
m_Endpoint.HandleDecryptedTunnelDataMsg (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InboundTunnel::Print (std::stringstream& s) const
|
|
||||||
{
|
|
||||||
PrintHops (s);
|
|
||||||
s << " ⇒ " << GetTunnelID () << ":me";
|
|
||||||
}
|
|
||||||
|
|
||||||
ZeroHopsInboundTunnel::ZeroHopsInboundTunnel ():
|
ZeroHopsInboundTunnel::ZeroHopsInboundTunnel ():
|
||||||
InboundTunnel (std::make_shared<ZeroHopsTunnelConfig> ()),
|
InboundTunnel (std::make_shared<ZeroHopsTunnelConfig> ()),
|
||||||
m_NumReceivedBytes (0)
|
m_NumReceivedBytes (0)
|
||||||
|
@ -276,11 +266,6 @@ namespace tunnel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeroHopsInboundTunnel::Print (std::stringstream& s) const
|
|
||||||
{
|
|
||||||
s << " ⇒ " << GetTunnelID () << ":me";
|
|
||||||
}
|
|
||||||
|
|
||||||
void OutboundTunnel::SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg)
|
void OutboundTunnel::SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg)
|
||||||
{
|
{
|
||||||
TunnelMessageBlock block;
|
TunnelMessageBlock block;
|
||||||
|
@ -315,13 +300,6 @@ namespace tunnel
|
||||||
LogPrint (eLogError, "Tunnel: Incoming message for outbound tunnel ", GetTunnelID ());
|
LogPrint (eLogError, "Tunnel: Incoming message for outbound tunnel ", GetTunnelID ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutboundTunnel::Print (std::stringstream& s) const
|
|
||||||
{
|
|
||||||
s << GetTunnelID () << ":me";
|
|
||||||
PrintHops (s);
|
|
||||||
s << " ⇒ ";
|
|
||||||
}
|
|
||||||
|
|
||||||
ZeroHopsOutboundTunnel::ZeroHopsOutboundTunnel ():
|
ZeroHopsOutboundTunnel::ZeroHopsOutboundTunnel ():
|
||||||
OutboundTunnel (std::make_shared<ZeroHopsTunnelConfig> ()),
|
OutboundTunnel (std::make_shared<ZeroHopsTunnelConfig> ()),
|
||||||
m_NumSentBytes (0)
|
m_NumSentBytes (0)
|
||||||
|
@ -351,11 +329,6 @@ namespace tunnel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZeroHopsOutboundTunnel::Print (std::stringstream& s) const
|
|
||||||
{
|
|
||||||
s << GetTunnelID () << ":me ⇒ ";
|
|
||||||
}
|
|
||||||
|
|
||||||
Tunnels tunnels;
|
Tunnels tunnels;
|
||||||
|
|
||||||
Tunnels::Tunnels (): m_IsRunning (false), m_Thread (nullptr),
|
Tunnels::Tunnels (): m_IsRunning (false), m_Thread (nullptr),
|
||||||
|
|
|
@ -44,6 +44,9 @@ namespace tunnel
|
||||||
const size_t I2NP_TUNNEL_MESSAGE_SIZE = TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE + 34; // reserved for alignment and NTCP 16 + 6 + 12
|
const size_t I2NP_TUNNEL_MESSAGE_SIZE = TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE + 34; // reserved for alignment and NTCP 16 + 6 + 12
|
||||||
const size_t I2NP_TUNNEL_ENPOINT_MESSAGE_SIZE = 2*TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE + TUNNEL_GATEWAY_HEADER_SIZE + 28; // reserved for alignment and NTCP 16 + 6 + 6
|
const size_t I2NP_TUNNEL_ENPOINT_MESSAGE_SIZE = 2*TUNNEL_DATA_MSG_SIZE + I2NP_HEADER_SIZE + TUNNEL_GATEWAY_HEADER_SIZE + 28; // reserved for alignment and NTCP 16 + 6 + 6
|
||||||
|
|
||||||
|
/** function for visiting a hops stored in a tunnel */
|
||||||
|
typedef std::function<void(std::shared_ptr<const i2p::data::IdentityEx>)> TunnelHopVisitor;
|
||||||
|
|
||||||
enum TunnelState
|
enum TunnelState
|
||||||
{
|
{
|
||||||
eTunnelStatePending,
|
eTunnelStatePending,
|
||||||
|
@ -91,8 +94,6 @@ namespace tunnel
|
||||||
|
|
||||||
bool HandleTunnelBuildResponse (uint8_t * msg, size_t len);
|
bool HandleTunnelBuildResponse (uint8_t * msg, size_t len);
|
||||||
|
|
||||||
virtual void Print (std::stringstream&) const {};
|
|
||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
||||||
void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out);
|
void EncryptTunnelMsg (std::shared_ptr<const I2NPMessage> in, std::shared_ptr<I2NPMessage> out);
|
||||||
|
@ -107,9 +108,8 @@ namespace tunnel
|
||||||
bool LatencyIsKnown() const { return m_Latency > 0; }
|
bool LatencyIsKnown() const { return m_Latency > 0; }
|
||||||
bool IsSlow () const { return LatencyIsKnown() && (int)m_Latency > HIGH_LATENCY_PER_HOP*GetNumHops (); }
|
bool IsSlow () const { return LatencyIsKnown() && (int)m_Latency > HIGH_LATENCY_PER_HOP*GetNumHops (); }
|
||||||
|
|
||||||
protected:
|
/** visit all hops we currently store */
|
||||||
|
void VisitTunnelHops(TunnelHopVisitor v);
|
||||||
void PrintHops (std::stringstream& s) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -134,7 +134,6 @@ namespace tunnel
|
||||||
virtual void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs); // multiple messages
|
virtual void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs); // multiple messages
|
||||||
const i2p::data::IdentHash& GetEndpointIdentHash () const { return m_EndpointIdentHash; };
|
const i2p::data::IdentHash& GetEndpointIdentHash () const { return m_EndpointIdentHash; };
|
||||||
virtual size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
virtual size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
||||||
void Print (std::stringstream& s) const;
|
|
||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage>&& tunnelMsg);
|
void HandleTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage>&& tunnelMsg);
|
||||||
|
@ -155,7 +154,6 @@ namespace tunnel
|
||||||
InboundTunnel (std::shared_ptr<const TunnelConfig> config): Tunnel (config), m_Endpoint (true) {};
|
InboundTunnel (std::shared_ptr<const TunnelConfig> config): Tunnel (config), m_Endpoint (true) {};
|
||||||
void HandleTunnelDataMsg (std::shared_ptr<I2NPMessage>&& msg);
|
void HandleTunnelDataMsg (std::shared_ptr<I2NPMessage>&& msg);
|
||||||
virtual size_t GetNumReceivedBytes () const { return m_Endpoint.GetNumReceivedBytes (); };
|
virtual size_t GetNumReceivedBytes () const { return m_Endpoint.GetNumReceivedBytes (); };
|
||||||
void Print (std::stringstream& s) const;
|
|
||||||
bool IsInbound() const { return true; }
|
bool IsInbound() const { return true; }
|
||||||
|
|
||||||
// override TunnelBase
|
// override TunnelBase
|
||||||
|
@ -172,7 +170,6 @@ namespace tunnel
|
||||||
|
|
||||||
ZeroHopsInboundTunnel ();
|
ZeroHopsInboundTunnel ();
|
||||||
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
void SendTunnelDataMsg (std::shared_ptr<i2p::I2NPMessage> msg);
|
||||||
void Print (std::stringstream& s) const;
|
|
||||||
size_t GetNumReceivedBytes () const { return m_NumReceivedBytes; };
|
size_t GetNumReceivedBytes () const { return m_NumReceivedBytes; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -186,7 +183,6 @@ namespace tunnel
|
||||||
|
|
||||||
ZeroHopsOutboundTunnel ();
|
ZeroHopsOutboundTunnel ();
|
||||||
void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs);
|
void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs);
|
||||||
void Print (std::stringstream& s) const;
|
|
||||||
size_t GetNumSentBytes () const { return m_NumSentBytes; };
|
size_t GetNumSentBytes () const { return m_NumSentBytes; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue