8)
+ s << "id=\"transit\" ";
+ s << "class=\"list\">\r\n";
for (const auto& it: i2p::tunnel::tunnels.GetTransitTunnels ())
{
+ const auto& expiry = i2p::tunnel::tunnels.GetTransitTunnelsExpirationTimeout ();
s << "
";
double bytes = it->GetNumTransmittedBytes ();
@@ -1365,7 +1371,8 @@ namespace http {
} else {
s << "" << (int) (bytes) << "B ";
}
-
+ // TODO: tunnel expiry per tunnel, not most recent
+ //s << "" << expiry << tr("s" /* translation: seconds */) << " ";
s << "" << it->GetTunnelID () << " ";
if (std::dynamic_pointer_cast(it))
s << ""
@@ -1844,7 +1851,7 @@ namespace http {
}
// HTML head start
ShowPageHead (s);
- if (/*req.uri.find("summary") != std::string::npos ||*/
+ if (req.uri.find("summary") != std::string::npos ||
req.uri.find("commands") != std::string::npos ||
(req.uri.find("local_destinations") != std::string::npos &&
req.uri.find("b32") == std::string::npos))
diff --git a/webconsole/style.css b/webconsole/style.css
index fa9edaa1..7da8a9cf 100644
--- a/webconsole/style.css
+++ b/webconsole/style.css
@@ -955,7 +955,7 @@ a:hover .host, a:focus .host, a:active .host {
text-align: right;
}
-.latency {
+.latency, .expiry {
padding: 2px 5px 2px 20px;
min-width: 40px;
display: inline-block;
@@ -966,6 +966,11 @@ a:hover .host, a:focus .host, a:active .host {
border-radius: 2px;
}
+.expiry {
+ margin-left: 10px;
+ float: none;
+}
+
.latency.unknown {
color: var(--ink-faded);
}
@@ -1410,6 +1415,12 @@ input[type=checkbox]:checked + label::after {
text-align: center;
}
+ #transit.list {
+ columns: 2;
+ column-gap: 1px;
+ column-rule: 1px solid var(--border2);
+ }
+
.hops {
min-width: 280px;
display: inline-block;
@@ -1469,12 +1480,16 @@ input[type=checkbox]:checked + label::after {
background-position: 5px center;
}
- .latency {
+ .latency, .expiry {
padding-top: 3px;
padding-bottom: 3px;
margin-left: 12px;
}
+ .expiry {
+ float: right;
+ }
+
.transferred {
min-width: 48px;
}