diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp
index 0577ac15..9c039df4 100644
--- a/daemon/HTTPServer.cpp
+++ b/daemon/HTTPServer.cpp
@@ -60,12 +60,14 @@ namespace http {
" .tunnel.established { color: #56B734; }\r\n"
" .tunnel.expiring { color: #D3AE3F; }\r\n"
" .tunnel.failed { color: #D33F3F; }\r\n"
- " .tunnel.another { color: #434343; }\r\n"
+ " .tunnel.building { color: #434343; }\r\n"
" 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"
+ " .slide label { color: #894C84 }\r\n"
+ " .slide p, .slide [type='checkbox']{ display:none; }\r\n"
+ " .slide [type='checkbox']:checked ~ p { display:block; margin-top: 0; padding: 0; }\r\n"
+ " .disabled:after { color: #D33F3F; content: \"Disabled\" }\r\n"
+ " .enabled:after { color: #56B734; content: \"Enabled\" }\r\n"
"\r\n";
const char HTTP_PAGE_TUNNELS[] = "tunnels";
@@ -270,7 +272,17 @@ namespace http {
size_t transitTunnelCount = i2p::tunnel::tunnels.CountTransitTunnels();
s << "Client Tunnels: " << std::to_string(clientTunnelCount) << " ";
- s << "Transit Tunnels: " << std::to_string(transitTunnelCount) << "
\r\n";
+ s << "Transit Tunnels: " << std::to_string(transitTunnelCount) << "
\r\n
\r\n";
+
+ s << "
\r\n
\r\n
\r\n";
+ s << "
\r\n
\r\n
\r\n";
for(auto& it: dest->GetLeaseSets ())
s << it.second->GetIdentHash ().ToBase32 () << "
\r\n";
s << "
\r\n
\r\n";
- }
+ } else
+ s << "
LeaseSets: 0\r\n";
auto pool = dest->GetTunnelPool ();
if (pool)
{
@@ -401,7 +413,7 @@ namespace http {
void ShowLeasesSets(std::stringstream& s)
{
- s << "
LeaseSets (click on to show info):
\r\n";
+ s << "
LeaseSets:\r\n
\r\n";
int counter = 1;
// for each lease set
i2p::data::netdb.VisitLeaseSets(
@@ -434,6 +446,7 @@ namespace http {
void ShowTunnels (std::stringstream& s)
{
+ s << "
Tunnels:\r\n
\r\n";
s << "
Queue size: " << i2p::tunnel::tunnels.GetQueueSize () << "
\r\n";
s << "
Inbound tunnels:\r\n";
@@ -457,7 +470,7 @@ namespace http {
static void ShowCommands (std::stringstream& s, uint32_t token)
{
/* commands */
- s << "
Router Commands\r\n";
+ s << "
Router Commands\r\n
\r\n";
s << "
Run peer test\r\n";
//s << "
Reload config\r\n";
if (i2p::context.AcceptsTunnels ())
@@ -529,13 +542,13 @@ namespace http {
}
if (!tmp_s.str ().empty ())
{
- s << "
NTCP ( " << cnt << " )
\r\n";
- s << tmp_s.str () << "
\r\n";
+ s << "
\r\n
\r\n
";
+ s << tmp_s.str () << "
\r\n
\r\n";
}
if (!tmp_s6.str ().empty ())
{
- s << "
NTCP6 ( " << cnt6 << " )
\r\n";
- s << tmp_s6.str () << "
\r\n";
+ s << "
\r\n
\r\n
";
+ s << tmp_s6.str () << "
\r\n
\r\n";
}
}
}
@@ -545,7 +558,7 @@ namespace http {
auto sessions = ssuServer->GetSessions ();
if (!sessions.empty ())
{
- s << "
SSU ( " << (int) sessions.size() << " )
\r\n";
+ s << "
\r\n
\r\n
";
for (const auto& it: sessions)
{
auto endpoint = it.second->GetRemoteEndpoint ();
@@ -557,12 +570,12 @@ namespace http {
s << " [itag:" << it.second->GetRelayTag () << "]";
s << "
\r\n" << std::endl;
}
- s << "
\r\n";
+ s << "
\r\n
\r\n";
}
auto sessions6 = ssuServer->GetSessionsV6 ();
if (!sessions6.empty ())
{
- s << "
SSU6 ( " << (int) sessions6.size() << " )
\r\n";
+ s << "
\r\n
\r\n
";
for (const auto& it: sessions6)
{
auto endpoint = it.second->GetRemoteEndpoint ();
@@ -574,7 +587,7 @@ namespace http {
s << " [itag:" << it.second->GetRelayTag () << "]";
s << "
\r\n" << std::endl;
}
- s << "
\r\n";
+ s << "
\r\n
\r\n";
}
}
}
diff --git a/libi2pd_client/ClientContext.cpp b/libi2pd_client/ClientContext.cpp
index 1ce09aeb..4eb06424 100644
--- a/libi2pd_client/ClientContext.cpp
+++ b/libi2pd_client/ClientContext.cpp
@@ -71,12 +71,12 @@ namespace client
}
try
{
- m_HttpProxy = new i2p::proxy::HTTPProxy("HTTP Proxy",httpProxyAddr, httpProxyPort, httpOutProxyURL, localDestination);
- m_HttpProxy->Start();
+ m_HttpProxy = new i2p::proxy::HTTPProxy("HTTP Proxy", httpProxyAddr, httpProxyPort, httpOutProxyURL, localDestination);
+ m_HttpProxy->Start();
}
catch (std::exception& e)
{
- LogPrint(eLogError, "Clients: Exception in HTTP Proxy: ", e.what());
+ LogPrint(eLogError, "Clients: Exception in HTTP Proxy: ", e.what());
}
}
@@ -107,7 +107,7 @@ namespace client
}
try
{
- m_SocksProxy = new i2p::proxy::SOCKSProxy( "SOCKS", socksProxyAddr, socksProxyPort,
+ m_SocksProxy = new i2p::proxy::SOCKSProxy("SOCKS", socksProxyAddr, socksProxyPort,
socksOutProxy, socksOutProxyAddr, socksOutProxyPort, localDestination);
m_SocksProxy->Start();
}
diff --git a/libi2pd_client/ClientContext.h b/libi2pd_client/ClientContext.h
index 4e7cacf1..4b5d0dce 100644
--- a/libi2pd_client/ClientContext.h
+++ b/libi2pd_client/ClientContext.h
@@ -65,11 +65,11 @@ namespace client
std::shared_ptr
GetSharedLocalDestination () const { return m_SharedLocalDestination; };
std::shared_ptr CreateNewLocalDestination (bool isPublic = false, // transient
- i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_DSA_SHA1,
+ i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_DSA_SHA1,
i2p::data::CryptoKeyType cryptoType = i2p::data::CRYPTO_KEY_TYPE_ELGAMAL,
- const std::map * params = nullptr); // used by SAM only
+ const std::map * params = nullptr); // used by SAM only
std::shared_ptr CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic = true,
- const std::map * params = nullptr);
+ const std::map * params = nullptr);
std::shared_ptr CreateNewMatchedTunnelDestination(const i2p::data::PrivateKeys &keys, const std::string & name, const std::map * params = nullptr);
void DeleteLocalDestination (std::shared_ptr destination);
std::shared_ptr FindLocalDestination (const i2p::data::IdentHash& destination) const;
@@ -78,6 +78,7 @@ namespace client
i2p::data::CryptoKeyType cryptoType = i2p::data::CRYPTO_KEY_TYPE_ELGAMAL);
AddressBook& GetAddressBook () { return m_AddressBook; };
+ const BOBCommandChannel * GetBOBCommandChannel () const { return m_BOBCommandChannel; };
const SAMBridge * GetSAMBridge () const { return m_SamBridge; };
const I2CPServer * GetI2CPServer () const { return m_I2CPServer; };