|
|
@ -462,26 +462,35 @@ namespace http { |
|
|
|
[&s, &counter](const i2p::data::IdentHash dest, std::shared_ptr<i2p::data::LeaseSet> leaseSet) |
|
|
|
[&s, &counter](const i2p::data::IdentHash dest, std::shared_ptr<i2p::data::LeaseSet> leaseSet) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// create copy of lease set so we extract leases
|
|
|
|
// create copy of lease set so we extract leases
|
|
|
|
int storeType = leaseSet->GetStoreType (); |
|
|
|
auto storeType = leaseSet->GetStoreType (); |
|
|
|
i2p::data::LeaseSet ls(leaseSet->GetBuffer(), leaseSet->GetBufferLen()); |
|
|
|
std::unique_ptr<i2p::data::LeaseSet> ls; |
|
|
|
|
|
|
|
if (storeType == i2p::data::NETDB_STORE_TYPE_LEASESET) |
|
|
|
|
|
|
|
ls.reset (new i2p::data::LeaseSet (leaseSet->GetBuffer(), leaseSet->GetBufferLen())); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
ls.reset (new i2p::data::LeaseSet2 (storeType, leaseSet->GetBuffer(), leaseSet->GetBufferLen())); |
|
|
|
|
|
|
|
if (!ls) return; |
|
|
|
s << "<div class='leaseset"; |
|
|
|
s << "<div class='leaseset"; |
|
|
|
if (ls.IsExpired()) |
|
|
|
if (ls->IsExpired()) |
|
|
|
s << " expired"; // additional css class for expired
|
|
|
|
s << " expired"; // additional css class for expired
|
|
|
|
s << "'>\r\n"; |
|
|
|
s << "'>\r\n"; |
|
|
|
if (!ls.IsValid()) |
|
|
|
if (!ls->IsValid()) |
|
|
|
s << "<div class='invalid'>!! Invalid !! </div>\r\n"; |
|
|
|
s << "<div class='invalid'>!! Invalid !! </div>\r\n"; |
|
|
|
s << "<div class='slide'><label for='slide" << counter << "'>" << dest.ToBase32() << "</label>\r\n"; |
|
|
|
s << "<div class='slide'><label for='slide" << counter << "'>" << dest.ToBase32() << "</label>\r\n"; |
|
|
|
s << "<input type='checkbox' id='slide" << (counter++) << "'/>\r\n<p class='content'>\r\n"; |
|
|
|
s << "<input type='checkbox' id='slide" << (counter++) << "'/>\r\n<p class='content'>\r\n"; |
|
|
|
s << "<b>Store type:</b> " << storeType << "<br>\r\n"; |
|
|
|
s << "<b>Store type:</b> " << (int)storeType << "<br>\r\n"; |
|
|
|
s << "<b>Expires:</b> " << ConvertTime(ls.GetExpirationTime()) << "<br>\r\n"; |
|
|
|
s << "<b>Expires:</b> " << ConvertTime(ls->GetExpirationTime()) << "<br>\r\n"; |
|
|
|
auto leases = ls.GetNonExpiredLeases(); |
|
|
|
if (storeType == i2p::data::NETDB_STORE_TYPE_LEASESET || storeType == i2p::data::NETDB_STORE_TYPE_STANDARD_LEASESET2) |
|
|
|
s << "<b>Non Expired Leases: " << leases.size() << "</b><br>\r\n"; |
|
|
|
{ |
|
|
|
for ( auto & l : leases ) |
|
|
|
// leases information is available
|
|
|
|
{ |
|
|
|
auto leases = ls->GetNonExpiredLeases(); |
|
|
|
s << "<b>Gateway:</b> " << l->tunnelGateway.ToBase64() << "<br>\r\n"; |
|
|
|
s << "<b>Non Expired Leases: " << leases.size() << "</b><br>\r\n"; |
|
|
|
s << "<b>TunnelID:</b> " << l->tunnelID << "<br>\r\n"; |
|
|
|
for ( auto & l : leases ) |
|
|
|
s << "<b>EndDate:</b> " << ConvertTime(l->endDate) << "<br>\r\n"; |
|
|
|
{ |
|
|
|
} |
|
|
|
s << "<b>Gateway:</b> " << l->tunnelGateway.ToBase64() << "<br>\r\n"; |
|
|
|
|
|
|
|
s << "<b>TunnelID:</b> " << l->tunnelID << "<br>\r\n"; |
|
|
|
|
|
|
|
s << "<b>EndDate:</b> " << ConvertTime(l->endDate) << "<br>\r\n"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
s << "</p>\r\n</div>\r\n</div>\r\n"; |
|
|
|
s << "</p>\r\n</div>\r\n</div>\r\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
); |
|
|
|