diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index 9eed80d9..cfcf4261 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -59,6 +59,8 @@ namespace http {
" caption { font-size: 1.5em; text-align: center; color: #894C84; }\r\n"
" table { width: 100%; border-collapse: collapse; text-align: center; }\r\n"
" .private { background: black; color: black; } .private:hover { background: black; color: white } \r\n"
+ " .slide p, .slide [type='checkbox']{ display:none; } \r\n"
+ " .slide [type='checkbox']:checked ~ p { display:block; } \r\n"
"\r\n";
const char HTTP_PAGE_TUNNELS[] = "tunnels";
@@ -206,7 +208,10 @@ namespace http {
s << numKBytesSent / 1024 / 1024 << " GiB";
s << " (" << (double) i2p::transport::transports.GetOutBandwidth () / 1024 << " KiB/s)
\r\n";
s << "Data path: " << i2p::fs::GetDataDir() << "
\r\n
\r\n";
- s << "Router Ident: " << i2p::context.GetRouterInfo().GetIdentHashBase64()<< "
\r\n";
+ s << "
\r\n
\r\n
\r\n";
+ s << "Router Ident: " << i2p::context.GetRouterInfo().GetIdentHashBase64() << "
\r\n";
+ s << "Router Family: " << i2p::context.GetRouterInfo().GetProperty("family") << "
\r\n";
+ s << "Router Caps: " << i2p::context.GetRouterInfo().GetProperty("caps") << "
\r\n";
s << "Our external address:" << "
\r\n" ;
for (auto address : i2p::context.GetRouterInfo().GetAddresses())
{
@@ -229,6 +234,7 @@ namespace http {
}
s << address->host.to_string() << ":" << address->port << "
\r\n";
}
+ s << "
\r\n
\r\n";
s << "
\r\nRouters: " << i2p::data::netdb.GetNumRouters () << " ";
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << " ";
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "
\r\n";
diff --git a/NetDb.cpp b/NetDb.cpp
index 80bff91f..f89617be 100644
--- a/NetDb.cpp
+++ b/NetDb.cpp
@@ -457,6 +457,12 @@ namespace data
}
offset += 32;
}
+ // we must send reply back before this check
+ if (ident == i2p::context.GetIdentHash ())
+ {
+ LogPrint (eLogError, "NetDb: database store with own RouterInfo received, dropped");
+ return;
+ }
size_t payloadOffset = offset;
bool updated = false;
@@ -496,6 +502,7 @@ namespace data
floodMsg->FillI2NPMessageHeader (eI2NPDatabaseStore);
std::set excluded;
excluded.insert (i2p::context.GetIdentHash ()); // don't flood to itself
+ excluded.insert (ident); // don't flood back
for (int i = 0; i < 3; i++)
{
auto floodfill = GetClosestFloodfill (ident, excluded);
diff --git a/Tunnel.cpp b/Tunnel.cpp
index 120d933d..fd971628 100644
--- a/Tunnel.cpp
+++ b/Tunnel.cpp
@@ -772,18 +772,18 @@ namespace tunnel
std::shared_ptr Tunnels::CreateInboundTunnel (std::shared_ptr config, std::shared_ptr outboundTunnel)
{
- if (config->IsEmpty ())
- return CreateZeroHopsInboundTunnel ();
- else
+ if (config)
return CreateTunnel(config, outboundTunnel);
+ else
+ return CreateZeroHopsInboundTunnel ();
}
std::shared_ptr Tunnels::CreateOutboundTunnel (std::shared_ptr config)
{
- if (config->IsEmpty ())
- return CreateZeroHopsOutboundTunnel ();
- else
+ if (config)
return CreateTunnel(config);
+ else
+ return CreateZeroHopsOutboundTunnel ();
}
void Tunnels::AddPendingTunnel (uint32_t replyMsgID, std::shared_ptr tunnel)
diff --git a/TunnelPool.cpp b/TunnelPool.cpp
index 1aa1e6d1..515e0f5d 100644
--- a/TunnelPool.cpp
+++ b/TunnelPool.cpp
@@ -393,8 +393,6 @@ namespace tunnel
std::reverse (peers.begin (), peers.end ());
config = std::make_shared (peers);
}
- else
- config = std::make_shared ();
auto tunnel = tunnels.CreateInboundTunnel (config, outboundTunnel);
tunnel->SetTunnelPool (shared_from_this ());
if (tunnel->IsEstablished ()) // zero hops
@@ -410,8 +408,8 @@ namespace tunnel
if (!outboundTunnel)
outboundTunnel = tunnels.GetNextOutboundTunnel ();
LogPrint (eLogDebug, "Tunnels: Re-creating destination inbound tunnel...");
- std::shared_ptr config = m_NumInboundHops > 0 ?
- std::make_shared(tunnel->GetPeers ()) : std::make_shared ();
+ std::shared_ptr config;
+ if (m_NumInboundHops > 0) config = std::make_shared(tunnel->GetPeers ());
auto newTunnel = tunnels.CreateInboundTunnel (config, outboundTunnel);
newTunnel->SetTunnelPool (shared_from_this());
if (newTunnel->IsEstablished ()) // zero hops
@@ -429,10 +427,9 @@ namespace tunnel
std::vector > peers;
if (SelectPeers (peers, false))
{
- std::shared_ptr config = m_NumOutboundHops > 0 ?
- std::make_shared(peers, inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()) :
- std::make_shared ();
-
+ std::shared_ptr config;
+ if (m_NumOutboundHops > 0)
+ config = std::make_shared(peers, inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ());
auto tunnel = tunnels.CreateOutboundTunnel (config);
tunnel->SetTunnelPool (shared_from_this ());
if (tunnel->IsEstablished ()) // zero hops
@@ -453,9 +450,9 @@ namespace tunnel
if (inboundTunnel)
{
LogPrint (eLogDebug, "Tunnels: Re-creating destination outbound tunnel...");
- std::shared_ptr config = m_NumOutboundHops > 0 ?
- std::make_shared(tunnel->GetPeers (), inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()) :
- std::make_shared ();
+ std::shared_ptr config;
+ if (m_NumOutboundHops > 0)
+ config = std::make_shared(tunnel->GetPeers (), inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ());
auto newTunnel = tunnels.CreateOutboundTunnel (config);
newTunnel->SetTunnelPool (shared_from_this ());
if (newTunnel->IsEstablished ()) // zero hops