diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp
index 6f884a9b..12edf276 100644
--- a/daemon/HTTPServer.cpp
+++ b/daemon/HTTPServer.cpp
@@ -198,7 +198,10 @@ namespace http {
s << "ERROR: " << string << "
\r\n";
}
- void ShowStatus (std::stringstream& s, bool includeHiddenContent)
+ void ShowStatus (
+ std::stringstream& s,
+ bool includeHiddenContent,
+ i2p::http::OutputFormatEnum outputFormat)
{
s << "Uptime: ";
ShowUptime(s, i2p::context.GetUptime ());
@@ -245,9 +248,12 @@ namespace http {
ShowTraffic (s, i2p::transport::transports.GetTotalTransitTransmittedBytes ());
s << " (" << (double) i2p::transport::transports.GetTransitBandwidth () / 1024 << " KiB/s)
\r\n";
s << "Data path: " << i2p::fs::GetDataDir() << "
\r\n";
- s << "
\r\n
\r\n
\r\n";
- if(includeHiddenContent) {
- s << "Router Ident: " << i2p::context.GetRouterInfo().GetIdentHashBase64() << "
\r\n";
+ s << "
";
+ if((outputFormat==OutputFormatEnum::forWebConsole)||!includeHiddenContent) {
+ s << "
\r\n
\r\n
\r\n";
+ }
+ if(includeHiddenContent) {
+ 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" ;
@@ -272,9 +278,12 @@ namespace http {
}
s << address->host.to_string() << ":" << address->port << "
\r\n";
}
- }
+ }
s << "
\r\n
\r\n";
- s << "
Routers: " << i2p::data::netdb.GetNumRouters () << " ";
+ if(outputFormat==OutputFormatEnum::forQtUi) {
+ s << "
";
+ }
+ s << "
Routers: " << i2p::data::netdb.GetNumRouters () << " ";
s << "
Floodfills: " << i2p::data::netdb.GetNumFloodfills () << " ";
s << "
LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "
\r\n";
@@ -285,15 +294,17 @@ namespace http {
s << "
Client Tunnels: " << std::to_string(clientTunnelCount) << " ";
s << "
Transit Tunnels: " << std::to_string(transitTunnelCount) << "
\r\n
\r\n";
- s << "
ServicesService | State |
\r\n";
- s << "" << "HTTP Proxy" << " | |
\r\n";
- s << "" << "SOCKS Proxy" << " | |
\r\n";
- s << "" << "BOB" << " | |
\r\n";
- s << "" << "SAM" << " | |
\r\n";
- s << "" << "I2CP" << " | |
\r\n";
- bool i2pcontrol; i2p::config::GetOption("i2pcontrol.enabled", i2pcontrol);
- s << "" << "I2PControl" << " | |
\r\n";
- s << "
\r\n";
+ if(outputFormat==OutputFormatEnum::forWebConsole) {
+ s << "
ServicesService | State |
\r\n";
+ s << "" << "HTTP Proxy" << " | |
\r\n";
+ s << "" << "SOCKS Proxy" << " | |
\r\n";
+ s << "" << "BOB" << " | |
\r\n";
+ s << "" << "SAM" << " | |
\r\n";
+ s << "" << "I2CP" << " | |
\r\n";
+ bool i2pcontrol; i2p::config::GetOption("i2pcontrol.enabled", i2pcontrol);
+ s << "" << "I2PControl" << " | |
\r\n";
+ s << "
\r\n";
+ }
}
void ShowLocalDestinations (std::stringstream& s)
@@ -863,7 +874,7 @@ namespace http {
} else if (req.uri.find("cmd=") != std::string::npos) {
HandleCommand (req, res, s);
} else {
- ShowStatus (s, true);
+ ShowStatus (s, true, i2p::http::OutputFormatEnum::forWebConsole);
res.add_header("Refresh", "10");
}
ShowPageTail (s);
diff --git a/daemon/HTTPServer.h b/daemon/HTTPServer.h
index 46477dae..a1b82875 100644
--- a/daemon/HTTPServer.h
+++ b/daemon/HTTPServer.h
@@ -80,7 +80,8 @@ namespace http
};
//all the below functions are also used by Qt GUI, see mainwindow.cpp -> getStatusPageHtml
- void ShowStatus (std::stringstream& s, bool includeHiddenContent);
+ enum OutputFormatEnum { forWebConsole, forQtUi };
+ void ShowStatus (std::stringstream& s, bool includeHiddenContent, OutputFormatEnum outputFormat);
void ShowLocalDestinations (std::stringstream& s);
void ShowLeasesSets(std::stringstream& s);
void ShowTunnels (std::stringstream& s);
diff --git a/qt/i2pd_qt/i2pd_qt.pro b/qt/i2pd_qt/i2pd_qt.pro
index 21ef6358..12d13a17 100644
--- a/qt/i2pd_qt/i2pd_qt.pro
+++ b/qt/i2pd_qt/i2pd_qt.pro
@@ -1,308 +1,310 @@
-QT += core gui
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = i2pd_qt
-TEMPLATE = app
-QMAKE_CXXFLAGS *= -std=c++11
-DEFINES += USE_UPNP
-
-# change to your own path, where you will store all needed libraries with 'git clone' commands below.
-MAIN_PATH = /path/to/libraries
-
-# git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
-# git clone https://github.com/PurpleI2P/android-ifaddrs.git
-BOOST_PATH = $$MAIN_PATH/Boost-for-Android-Prebuilt
-OPENSSL_PATH = $$MAIN_PATH/OpenSSL-for-Android-Prebuilt
-MINIUPNP_PATH = $$MAIN_PATH/MiniUPnP-for-Android-Prebuilt
-IFADDRS_PATH = $$MAIN_PATH/android-ifaddrs
-
-# Steps in Android SDK manager:
-# 1) Check Extras/Google Support Library https://developer.android.com/topic/libraries/support-library/setup.html
-# 2) Check API 11
-# Finally, click Install.
-
-SOURCES += DaemonQT.cpp mainwindow.cpp \
- ../../libi2pd/api.cpp \
- ../../libi2pd/Base.cpp \
- ../../libi2pd/BloomFilter.cpp \
- ../../libi2pd/Config.cpp \
- ../../libi2pd/CPU.cpp \
- ../../libi2pd/Crypto.cpp \
- ../../libi2pd/CryptoKey.cpp \
- ../../libi2pd/Datagram.cpp \
- ../../libi2pd/Destination.cpp \
- ../../libi2pd/Event.cpp \
- ../../libi2pd/Family.cpp \
- ../../libi2pd/FS.cpp \
- ../../libi2pd/Garlic.cpp \
- ../../libi2pd/Gost.cpp \
- ../../libi2pd/Gzip.cpp \
- ../../libi2pd/HTTP.cpp \
- ../../libi2pd/I2NPProtocol.cpp \
- ../../libi2pd/I2PEndian.cpp \
- ../../libi2pd/Identity.cpp \
- ../../libi2pd/LeaseSet.cpp \
- ../../libi2pd/Log.cpp \
- ../../libi2pd/NetDb.cpp \
- ../../libi2pd/NetDbRequests.cpp \
- ../../libi2pd/NTCPSession.cpp \
- ../../libi2pd/Profiling.cpp \
- ../../libi2pd/Reseed.cpp \
- ../../libi2pd/RouterContext.cpp \
- ../../libi2pd/RouterInfo.cpp \
- ../../libi2pd/Signature.cpp \
- ../../libi2pd/SSU.cpp \
- ../../libi2pd/SSUData.cpp \
- ../../libi2pd/SSUSession.cpp \
- ../../libi2pd/Streaming.cpp \
- ../../libi2pd/Timestamp.cpp \
- ../../libi2pd/TransitTunnel.cpp \
- ../../libi2pd/Transports.cpp \
- ../../libi2pd/Tunnel.cpp \
- ../../libi2pd/TunnelEndpoint.cpp \
- ../../libi2pd/TunnelGateway.cpp \
- ../../libi2pd/TunnelPool.cpp \
- ../../libi2pd/util.cpp \
- ../../libi2pd_client/AddressBook.cpp \
- ../../libi2pd_client/BOB.cpp \
- ../../libi2pd_client/ClientContext.cpp \
- ../../libi2pd_client/HTTPProxy.cpp \
- ../../libi2pd_client/I2CP.cpp \
- ../../libi2pd_client/I2PService.cpp \
- ../../libi2pd_client/I2PTunnel.cpp \
- ../../libi2pd_client/MatchedDestination.cpp \
- ../../libi2pd_client/SAM.cpp \
- ../../libi2pd_client/SOCKS.cpp \
- ../../libi2pd_client/Websocket.cpp \
- ../../libi2pd_client/WebSocks.cpp \
- ClientTunnelPane.cpp \
- MainWindowItems.cpp \
- ServerTunnelPane.cpp \
- SignatureTypeComboboxFactory.cpp \
- TunnelConfig.cpp \
- TunnelPane.cpp \
- ../../daemon/Daemon.cpp \
- ../../daemon/HTTPServer.cpp \
- ../../daemon/i2pd.cpp \
- ../../daemon/I2PControl.cpp \
- ../../daemon/UnixDaemon.cpp \
- ../../daemon/UPnP.cpp \
- textbrowsertweaked1.cpp \
- pagewithbackbutton.cpp \
- widgetlock.cpp \
- widgetlockregistry.cpp
-
-#qt creator does not handle this well
-#SOURCES += $$files(../../libi2pd/*.cpp)
-#SOURCES += $$files(../../libi2pd_client/*.cpp)
-#SOURCES += $$files(../../daemon/*.cpp)
-#SOURCES += $$files(./*.cpp)
-
-SOURCES -= ../../daemon/UnixDaemon.cpp
-
-HEADERS += DaemonQT.h mainwindow.h \
- ../../libi2pd/api.h \
- ../../libi2pd/Base.h \
- ../../libi2pd/BloomFilter.h \
- ../../libi2pd/Config.h \
- ../../libi2pd/Crypto.h \
- ../../libi2pd/CryptoKey.h \
- ../../libi2pd/Datagram.h \
- ../../libi2pd/Destination.h \
- ../../libi2pd/Event.h \
- ../../libi2pd/Family.h \
- ../../libi2pd/FS.h \
- ../../libi2pd/Garlic.h \
- ../../libi2pd/Gost.h \
- ../../libi2pd/Gzip.h \
- ../../libi2pd/HTTP.h \
- ../../libi2pd/I2NPProtocol.h \
- ../../libi2pd/I2PEndian.h \
- ../../libi2pd/Identity.h \
- ../../libi2pd/LeaseSet.h \
- ../../libi2pd/LittleBigEndian.h \
- ../../libi2pd/Log.h \
- ../../libi2pd/NetDb.hpp \
- ../../libi2pd/NetDbRequests.h \
- ../../libi2pd/NTCPSession.h \
- ../../libi2pd/Profiling.h \
- ../../libi2pd/Queue.h \
- ../../libi2pd/Reseed.h \
- ../../libi2pd/RouterContext.h \
- ../../libi2pd/RouterInfo.h \
- ../../libi2pd/Signature.h \
- ../../libi2pd/SSU.h \
- ../../libi2pd/SSUData.h \
- ../../libi2pd/SSUSession.h \
- ../../libi2pd/Streaming.h \
- ../../libi2pd/Tag.h \
- ../../libi2pd/Timestamp.h \
- ../../libi2pd/TransitTunnel.h \
- ../../libi2pd/Transports.h \
- ../../libi2pd/TransportSession.h \
- ../../libi2pd/Tunnel.h \
- ../../libi2pd/TunnelBase.h \
- ../../libi2pd/TunnelConfig.h \
- ../../libi2pd/TunnelEndpoint.h \
- ../../libi2pd/TunnelGateway.h \
- ../../libi2pd/TunnelPool.h \
- ../../libi2pd/util.h \
- ../../libi2pd/version.h \
- ../../libi2pd_client/AddressBook.h \
- ../../libi2pd_client/BOB.h \
- ../../libi2pd_client/ClientContext.h \
- ../../libi2pd_client/HTTPProxy.h \
- ../../libi2pd_client/I2CP.h \
- ../../libi2pd_client/I2PService.h \
- ../../libi2pd_client/I2PTunnel.h \
- ../../libi2pd_client/MatchedDestination.h \
- ../../libi2pd_client/SAM.h \
- ../../libi2pd_client/SOCKS.h \
- ../../libi2pd_client/Websocket.h \
- ../../libi2pd_client/WebSocks.h \
- ClientTunnelPane.h \
- MainWindowItems.h \
- ServerTunnelPane.h \
- SignatureTypeComboboxFactory.h \
- TunnelConfig.h \
- TunnelPane.h \
- TunnelsPageUpdateListener.h \
- ../../daemon/Daemon.h \
- ../../daemon/HTTPServer.h \
- ../../daemon/I2PControl.h \
- ../../daemon/UPnP.h \
- textbrowsertweaked1.h \
- pagewithbackbutton.h \
- widgetlock.h \
- widgetlockregistry.h
-
-INCLUDEPATH += ../../libi2pd
-INCLUDEPATH += ../../libi2pd_client
-INCLUDEPATH += ../../daemon
-INCLUDEPATH += .
-
-FORMS += mainwindow.ui \
- tunnelform.ui \
- statusbuttons.ui \
- routercommandswidget.ui \
- generalsettingswidget.ui
-
-LIBS += -lz
-
-macx {
- message("using mac os x target")
- BREWROOT=/usr/local
- BOOSTROOT=$$BREWROOT/opt/boost
- SSLROOT=$$BREWROOT/opt/libressl
- UPNPROOT=$$BREWROOT/opt/miniupnpc
- INCLUDEPATH += $$BOOSTROOT/include
- INCLUDEPATH += $$SSLROOT/include
- INCLUDEPATH += $$UPNPROOT/include
- LIBS += $$SSLROOT/lib/libcrypto.a
- LIBS += $$SSLROOT/lib/libssl.a
- LIBS += $$BOOSTROOT/lib/libboost_system.a
- LIBS += $$BOOSTROOT/lib/libboost_date_time.a
- LIBS += $$BOOSTROOT/lib/libboost_filesystem.a
- LIBS += $$BOOSTROOT/lib/libboost_program_options.a
- LIBS += $$UPNPROOT/lib/libminiupnpc.a
-}
-
-android {
- message("Using Android settings")
- DEFINES += ANDROID=1
- DEFINES += __ANDROID__
-
- CONFIG += mobility
-
- MOBILITY =
-
- INCLUDEPATH += $$BOOST_PATH/boost_1_53_0/include \
- $$OPENSSL_PATH/openssl-1.0.2/include \
- $$MINIUPNP_PATH/miniupnp-2.0/include \
- $$IFADDRS_PATH
- DISTFILES += android/AndroidManifest.xml
-
- ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
-
- SOURCES += $$IFADDRS_PATH/ifaddrs.c
- HEADERS += $$IFADDRS_PATH/ifaddrs.h
-
- equals(ANDROID_TARGET_ARCH, armeabi-v7a){
- DEFINES += ANDROID_ARM7A
- # http://stackoverflow.com/a/30235934/529442
- LIBS += -L$$BOOST_PATH/boost_1_53_0/armeabi-v7a/lib \
- -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
- -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
- -L$$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/ -lcrypto -lssl \
- -L$$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/ -lminiupnpc
-
- PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto.a \
- $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl.a
- DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
-
- ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto_1_0_0.so \
- $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl_1_0_0.so \
- $$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/libminiupnpc.so
- }
-
- equals(ANDROID_TARGET_ARCH, x86){
- # http://stackoverflow.com/a/30235934/529442
- LIBS += -L$$BOOST_PATH/boost_1_53_0/x86/lib \
- -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
- -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
- -L$$OPENSSL_PATH/openssl-1.0.2/x86/lib/ -lcrypto -lssl \
- -L$$MINIUPNP_PATH/miniupnp-2.0/x86/lib/ -lminiupnpc
-
- PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto.a \
- $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl.a
-
- DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
-
- ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto_1_0_0.so \
- $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl_1_0_0.so \
- $$MINIUPNP_PATH/miniupnp-2.0/x86/lib/libminiupnpc.so
- }
-}
-
-linux:!android {
- message("Using Linux settings")
- LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc
-}
-
-windows {
- message("Using Windows settings")
- RC_FILE = i2pd.rc
- DEFINES += BOOST_USE_WINDOWS_H WINDOWS _WINDOWS WIN32_LEAN_AND_MEAN MINIUPNP_STATICLIB
- DEFINES -= UNICODE _UNICODE
- BOOST_SUFFIX = -mt
- QMAKE_CXXFLAGS = -Os
- QMAKE_LFLAGS = -s -Wl,-Bstatic -static-libgcc -static-libstdc++ -mwindows
-
- LIBS = -lminiupnpc \
- -lboost_system$$BOOST_SUFFIX \
- -lboost_date_time$$BOOST_SUFFIX \
- -lboost_filesystem$$BOOST_SUFFIX \
- -lboost_program_options$$BOOST_SUFFIX \
- -lssl \
- -lcrypto \
- -lz \
- -lwsock32 \
- -lws2_32 \
- -lgdi32 \
- -liphlpapi \
- -lstdc++ \
- -lpthread
-}
-
-!android:!symbian:!maemo5:!simulator {
- message("Build with a system tray icon")
- # see also http://doc.qt.io/qt-4.8/qt-desktop-systray-systray-pro.html for example on wince*
- #sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS i2pd_qt.pro resources images
- RESOURCES = i2pd.qrc
- QT += xml
- #INSTALLS += sources
-}
-
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = i2pd_qt
+TEMPLATE = app
+QMAKE_CXXFLAGS *= -std=c++11
+DEFINES += USE_UPNP
+
+# change to your own path, where you will store all needed libraries with 'git clone' commands below.
+MAIN_PATH = /path/to/libraries
+
+# git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
+# git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
+# git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
+# git clone https://github.com/PurpleI2P/android-ifaddrs.git
+BOOST_PATH = $$MAIN_PATH/Boost-for-Android-Prebuilt
+OPENSSL_PATH = $$MAIN_PATH/OpenSSL-for-Android-Prebuilt
+MINIUPNP_PATH = $$MAIN_PATH/MiniUPnP-for-Android-Prebuilt
+IFADDRS_PATH = $$MAIN_PATH/android-ifaddrs
+
+# Steps in Android SDK manager:
+# 1) Check Extras/Google Support Library https://developer.android.com/topic/libraries/support-library/setup.html
+# 2) Check API 11
+# Finally, click Install.
+
+SOURCES += DaemonQT.cpp mainwindow.cpp \
+ ../../libi2pd/api.cpp \
+ ../../libi2pd/Base.cpp \
+ ../../libi2pd/BloomFilter.cpp \
+ ../../libi2pd/Config.cpp \
+ ../../libi2pd/CPU.cpp \
+ ../../libi2pd/Crypto.cpp \
+ ../../libi2pd/CryptoKey.cpp \
+ ../../libi2pd/Datagram.cpp \
+ ../../libi2pd/Destination.cpp \
+ ../../libi2pd/Event.cpp \
+ ../../libi2pd/Family.cpp \
+ ../../libi2pd/FS.cpp \
+ ../../libi2pd/Garlic.cpp \
+ ../../libi2pd/Gost.cpp \
+ ../../libi2pd/Gzip.cpp \
+ ../../libi2pd/HTTP.cpp \
+ ../../libi2pd/I2NPProtocol.cpp \
+ ../../libi2pd/I2PEndian.cpp \
+ ../../libi2pd/Identity.cpp \
+ ../../libi2pd/LeaseSet.cpp \
+ ../../libi2pd/Log.cpp \
+ ../../libi2pd/NetDb.cpp \
+ ../../libi2pd/NetDbRequests.cpp \
+ ../../libi2pd/NTCPSession.cpp \
+ ../../libi2pd/Profiling.cpp \
+ ../../libi2pd/Reseed.cpp \
+ ../../libi2pd/RouterContext.cpp \
+ ../../libi2pd/RouterInfo.cpp \
+ ../../libi2pd/Signature.cpp \
+ ../../libi2pd/SSU.cpp \
+ ../../libi2pd/SSUData.cpp \
+ ../../libi2pd/SSUSession.cpp \
+ ../../libi2pd/Streaming.cpp \
+ ../../libi2pd/Timestamp.cpp \
+ ../../libi2pd/TransitTunnel.cpp \
+ ../../libi2pd/Transports.cpp \
+ ../../libi2pd/Tunnel.cpp \
+ ../../libi2pd/TunnelEndpoint.cpp \
+ ../../libi2pd/TunnelGateway.cpp \
+ ../../libi2pd/TunnelPool.cpp \
+ ../../libi2pd/util.cpp \
+ ../../libi2pd_client/AddressBook.cpp \
+ ../../libi2pd_client/BOB.cpp \
+ ../../libi2pd_client/ClientContext.cpp \
+ ../../libi2pd_client/HTTPProxy.cpp \
+ ../../libi2pd_client/I2CP.cpp \
+ ../../libi2pd_client/I2PService.cpp \
+ ../../libi2pd_client/I2PTunnel.cpp \
+ ../../libi2pd_client/MatchedDestination.cpp \
+ ../../libi2pd_client/SAM.cpp \
+ ../../libi2pd_client/SOCKS.cpp \
+ ../../libi2pd_client/Websocket.cpp \
+ ../../libi2pd_client/WebSocks.cpp \
+ ClientTunnelPane.cpp \
+ MainWindowItems.cpp \
+ ServerTunnelPane.cpp \
+ SignatureTypeComboboxFactory.cpp \
+ TunnelConfig.cpp \
+ TunnelPane.cpp \
+ ../../daemon/Daemon.cpp \
+ ../../daemon/HTTPServer.cpp \
+ ../../daemon/i2pd.cpp \
+ ../../daemon/I2PControl.cpp \
+ ../../daemon/UnixDaemon.cpp \
+ ../../daemon/UPnP.cpp \
+ textbrowsertweaked1.cpp \
+ pagewithbackbutton.cpp \
+ widgetlock.cpp \
+ widgetlockregistry.cpp
+
+#qt creator does not handle this well
+#SOURCES += $$files(../../libi2pd/*.cpp)
+#SOURCES += $$files(../../libi2pd_client/*.cpp)
+#SOURCES += $$files(../../daemon/*.cpp)
+#SOURCES += $$files(./*.cpp)
+
+SOURCES -= ../../daemon/UnixDaemon.cpp
+
+HEADERS += DaemonQT.h mainwindow.h \
+ ../../libi2pd/api.h \
+ ../../libi2pd/Base.h \
+ ../../libi2pd/BloomFilter.h \
+ ../../libi2pd/Config.h \
+ ../../libi2pd/Crypto.h \
+ ../../libi2pd/CryptoKey.h \
+ ../../libi2pd/Datagram.h \
+ ../../libi2pd/Destination.h \
+ ../../libi2pd/Event.h \
+ ../../libi2pd/Family.h \
+ ../../libi2pd/FS.h \
+ ../../libi2pd/Garlic.h \
+ ../../libi2pd/Gost.h \
+ ../../libi2pd/Gzip.h \
+ ../../libi2pd/HTTP.h \
+ ../../libi2pd/I2NPProtocol.h \
+ ../../libi2pd/I2PEndian.h \
+ ../../libi2pd/Identity.h \
+ ../../libi2pd/LeaseSet.h \
+ ../../libi2pd/LittleBigEndian.h \
+ ../../libi2pd/Log.h \
+ ../../libi2pd/NetDb.hpp \
+ ../../libi2pd/NetDbRequests.h \
+ ../../libi2pd/NTCPSession.h \
+ ../../libi2pd/Profiling.h \
+ ../../libi2pd/Queue.h \
+ ../../libi2pd/Reseed.h \
+ ../../libi2pd/RouterContext.h \
+ ../../libi2pd/RouterInfo.h \
+ ../../libi2pd/Signature.h \
+ ../../libi2pd/SSU.h \
+ ../../libi2pd/SSUData.h \
+ ../../libi2pd/SSUSession.h \
+ ../../libi2pd/Streaming.h \
+ ../../libi2pd/Tag.h \
+ ../../libi2pd/Timestamp.h \
+ ../../libi2pd/TransitTunnel.h \
+ ../../libi2pd/Transports.h \
+ ../../libi2pd/TransportSession.h \
+ ../../libi2pd/Tunnel.h \
+ ../../libi2pd/TunnelBase.h \
+ ../../libi2pd/TunnelConfig.h \
+ ../../libi2pd/TunnelEndpoint.h \
+ ../../libi2pd/TunnelGateway.h \
+ ../../libi2pd/TunnelPool.h \
+ ../../libi2pd/util.h \
+ ../../libi2pd/version.h \
+ ../../libi2pd_client/AddressBook.h \
+ ../../libi2pd_client/BOB.h \
+ ../../libi2pd_client/ClientContext.h \
+ ../../libi2pd_client/HTTPProxy.h \
+ ../../libi2pd_client/I2CP.h \
+ ../../libi2pd_client/I2PService.h \
+ ../../libi2pd_client/I2PTunnel.h \
+ ../../libi2pd_client/MatchedDestination.h \
+ ../../libi2pd_client/SAM.h \
+ ../../libi2pd_client/SOCKS.h \
+ ../../libi2pd_client/Websocket.h \
+ ../../libi2pd_client/WebSocks.h \
+ ClientTunnelPane.h \
+ MainWindowItems.h \
+ ServerTunnelPane.h \
+ SignatureTypeComboboxFactory.h \
+ TunnelConfig.h \
+ TunnelPane.h \
+ TunnelsPageUpdateListener.h \
+ ../../daemon/Daemon.h \
+ ../../daemon/HTTPServer.h \
+ ../../daemon/I2PControl.h \
+ ../../daemon/UPnP.h \
+ textbrowsertweaked1.h \
+ pagewithbackbutton.h \
+ widgetlock.h \
+ widgetlockregistry.h \
+ i2pd.rc \
+ i2pd.rc
+
+INCLUDEPATH += ../../libi2pd
+INCLUDEPATH += ../../libi2pd_client
+INCLUDEPATH += ../../daemon
+INCLUDEPATH += .
+
+FORMS += mainwindow.ui \
+ tunnelform.ui \
+ statusbuttons.ui \
+ routercommandswidget.ui \
+ generalsettingswidget.ui
+
+LIBS += -lz
+
+macx {
+ message("using mac os x target")
+ BREWROOT=/usr/local
+ BOOSTROOT=$$BREWROOT/opt/boost
+ SSLROOT=$$BREWROOT/opt/libressl
+ UPNPROOT=$$BREWROOT/opt/miniupnpc
+ INCLUDEPATH += $$BOOSTROOT/include
+ INCLUDEPATH += $$SSLROOT/include
+ INCLUDEPATH += $$UPNPROOT/include
+ LIBS += $$SSLROOT/lib/libcrypto.a
+ LIBS += $$SSLROOT/lib/libssl.a
+ LIBS += $$BOOSTROOT/lib/libboost_system.a
+ LIBS += $$BOOSTROOT/lib/libboost_date_time.a
+ LIBS += $$BOOSTROOT/lib/libboost_filesystem.a
+ LIBS += $$BOOSTROOT/lib/libboost_program_options.a
+ LIBS += $$UPNPROOT/lib/libminiupnpc.a
+}
+
+android {
+ message("Using Android settings")
+ DEFINES += ANDROID=1
+ DEFINES += __ANDROID__
+
+ CONFIG += mobility
+
+ MOBILITY =
+
+ INCLUDEPATH += $$BOOST_PATH/boost_1_53_0/include \
+ $$OPENSSL_PATH/openssl-1.0.2/include \
+ $$MINIUPNP_PATH/miniupnp-2.0/include \
+ $$IFADDRS_PATH
+ DISTFILES += android/AndroidManifest.xml
+
+ ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
+
+ SOURCES += $$IFADDRS_PATH/ifaddrs.c
+ HEADERS += $$IFADDRS_PATH/ifaddrs.h
+
+ equals(ANDROID_TARGET_ARCH, armeabi-v7a){
+ DEFINES += ANDROID_ARM7A
+ # http://stackoverflow.com/a/30235934/529442
+ LIBS += -L$$BOOST_PATH/boost_1_53_0/armeabi-v7a/lib \
+ -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
+ -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
+ -L$$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/ -lcrypto -lssl \
+ -L$$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/ -lminiupnpc
+
+ PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto.a \
+ $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl.a
+ DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
+
+ ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libcrypto_1_0_0.so \
+ $$OPENSSL_PATH/openssl-1.0.2/armeabi-v7a/lib/libssl_1_0_0.so \
+ $$MINIUPNP_PATH/miniupnp-2.0/armeabi-v7a/lib/libminiupnpc.so
+ }
+
+ equals(ANDROID_TARGET_ARCH, x86){
+ # http://stackoverflow.com/a/30235934/529442
+ LIBS += -L$$BOOST_PATH/boost_1_53_0/x86/lib \
+ -lboost_system-gcc-mt-1_53 -lboost_date_time-gcc-mt-1_53 \
+ -lboost_filesystem-gcc-mt-1_53 -lboost_program_options-gcc-mt-1_53 \
+ -L$$OPENSSL_PATH/openssl-1.0.2/x86/lib/ -lcrypto -lssl \
+ -L$$MINIUPNP_PATH/miniupnp-2.0/x86/lib/ -lminiupnpc
+
+ PRE_TARGETDEPS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto.a \
+ $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl.a
+
+ DEPENDPATH += $$OPENSSL_PATH/openssl-1.0.2/include
+
+ ANDROID_EXTRA_LIBS += $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libcrypto_1_0_0.so \
+ $$OPENSSL_PATH/openssl-1.0.2/x86/lib/libssl_1_0_0.so \
+ $$MINIUPNP_PATH/miniupnp-2.0/x86/lib/libminiupnpc.so
+ }
+}
+
+linux:!android {
+ message("Using Linux settings")
+ LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread -lminiupnpc
+}
+
+windows {
+ message("Using Windows settings")
+ RC_FILE = i2pd.rc
+ DEFINES += BOOST_USE_WINDOWS_H WINDOWS _WINDOWS WIN32_LEAN_AND_MEAN MINIUPNP_STATICLIB
+ DEFINES -= UNICODE _UNICODE
+ BOOST_SUFFIX = -mt
+ QMAKE_CXXFLAGS = -Os
+ QMAKE_LFLAGS = -s -Wl,-Bstatic -static-libgcc -static-libstdc++ -mwindows
+
+ LIBS = -lminiupnpc \
+ -lboost_system$$BOOST_SUFFIX \
+ -lboost_date_time$$BOOST_SUFFIX \
+ -lboost_filesystem$$BOOST_SUFFIX \
+ -lboost_program_options$$BOOST_SUFFIX \
+ -lssl \
+ -lcrypto \
+ -lz \
+ -lwsock32 \
+ -lws2_32 \
+ -lgdi32 \
+ -liphlpapi \
+ -lstdc++ \
+ -lpthread
+}
+
+!android:!symbian:!maemo5:!simulator {
+ message("Build with a system tray icon")
+ # see also http://doc.qt.io/qt-4.8/qt-desktop-systray-systray-pro.html for example on wince*
+ #sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS i2pd_qt.pro resources images
+ RESOURCES = i2pd.qrc
+ QT += xml
+ #INSTALLS += sources
+}
+
diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp
index c3761764..a095f78c 100644
--- a/qt/i2pd_qt/mainwindow.cpp
+++ b/qt/i2pd_qt/mainwindow.cpp
@@ -349,7 +349,9 @@ QString MainWindow::getStatusPageHtml(bool showHiddenInfo) {
s << "";
switch (statusPage) {
- case main_page: i2p::http::ShowStatus(s, showHiddenInfo);break;
+ case main_page:
+ i2p::http::ShowStatus(s, showHiddenInfo, i2p::http::OutputFormatEnum::forQtUi);
+ break;
case commands: break;
case local_destinations: i2p::http::ShowLocalDestinations(s);break;
case leasesets: i2p::http::ShowLeasesSets(s); break;