|
|
@ -92,6 +92,8 @@ namespace http { |
|
|
|
const char HTTP_PARAM_SAM_SESSION_ID[] = "id"; |
|
|
|
const char HTTP_PARAM_SAM_SESSION_ID[] = "id"; |
|
|
|
const char HTTP_PARAM_ADDRESS[] = "address"; |
|
|
|
const char HTTP_PARAM_ADDRESS[] = "address"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static std::string ConvertTime (uint64_t time); |
|
|
|
|
|
|
|
|
|
|
|
static void ShowUptime (std::stringstream& s, int seconds) |
|
|
|
static void ShowUptime (std::stringstream& s, int seconds) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int num; |
|
|
|
int num; |
|
|
@ -464,14 +466,14 @@ namespace http { |
|
|
|
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>Expires:</b> " << ls.GetExpirationTime() << "<br>\r\n"; |
|
|
|
s << "<b>Expires:</b> " << ConvertTime(ls.GetExpirationTime()) << "<br>\r\n"; |
|
|
|
auto leases = ls.GetNonExpiredLeases(); |
|
|
|
auto leases = ls.GetNonExpiredLeases(); |
|
|
|
s << "<b>Non Expired Leases: " << leases.size() << "</b><br>\r\n"; |
|
|
|
s << "<b>Non Expired Leases: " << leases.size() << "</b><br>\r\n"; |
|
|
|
for ( auto & l : leases ) |
|
|
|
for ( auto & l : leases ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
s << "<b>Gateway:</b> " << l->tunnelGateway.ToBase64() << "<br>\r\n"; |
|
|
|
s << "<b>Gateway:</b> " << l->tunnelGateway.ToBase64() << "<br>\r\n"; |
|
|
|
s << "<b>TunnelID:</b> " << l->tunnelID << "<br>\r\n"; |
|
|
|
s << "<b>TunnelID:</b> " << l->tunnelID << "<br>\r\n"; |
|
|
|
s << "<b>EndDate:</b> " << l->endDate << "<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"; |
|
|
|
} |
|
|
|
} |
|
|
@ -585,7 +587,7 @@ namespace http { |
|
|
|
} |
|
|
|
} |
|
|
|
if (!tmp_s6.str ().empty ()) |
|
|
|
if (!tmp_s6.str ().empty ()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
s << "<div class='slide'><label for='slide_" << boost::algorithm::to_lower_copy(name) << "v6'><b>" << name << "6</b> ( " << cnt6 << " )</label>\r\n<input type='checkbox' id='slide_" << boost::algorithm::to_lower_copy(name) << "v6'/>\r\n<p class='content'>"; |
|
|
|
s << "<div class='slide'><label for='slide_" << boost::algorithm::to_lower_copy(name) << "v6'><b>" << name << "v6</b> ( " << cnt6 << " )</label>\r\n<input type='checkbox' id='slide_" << boost::algorithm::to_lower_copy(name) << "v6'/>\r\n<p class='content'>"; |
|
|
|
s << tmp_s6.str () << "</p>\r\n</div>\r\n"; |
|
|
|
s << tmp_s6.str () << "</p>\r\n</div>\r\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -765,6 +767,16 @@ namespace http { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string ConvertTime (uint64_t time) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ldiv_t divTime = ldiv(time,1000); |
|
|
|
|
|
|
|
time_t t = divTime.quot; |
|
|
|
|
|
|
|
struct tm *tm = localtime(&t); |
|
|
|
|
|
|
|
char date[128]; |
|
|
|
|
|
|
|
snprintf(date, sizeof(date), "%02d/%02d/%d %02d:%02d:%02d.%03ld", tm->tm_mday, tm->tm_mon + 1, tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec, divTime.rem); |
|
|
|
|
|
|
|
return date; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
HTTPConnection::HTTPConnection (std::string hostname, std::shared_ptr<boost::asio::ip::tcp::socket> socket): |
|
|
|
HTTPConnection::HTTPConnection (std::string hostname, std::shared_ptr<boost::asio::ip::tcp::socket> socket): |
|
|
|
m_Socket (socket), m_Timer (socket->get_io_service ()), m_BufferLen (0), |
|
|
|
m_Socket (socket), m_Timer (socket->get_io_service ()), m_BufferLen (0), |
|
|
|
expected_host(hostname) |
|
|
|
expected_host(hostname) |
|
|
|