diff --git a/src/api/v1/ApiRouter.cpp b/src/api/v1/ApiRouter.cpp
index e73d77f..212ef10 100644
--- a/src/api/v1/ApiRouter.cpp
+++ b/src/api/v1/ApiRouter.cpp
@@ -22,14 +22,8 @@
* along with this program. If not, see .
*/
-#include
-#include
-#include
-#include
-
-
-#include "base/api/interfaces/IApiRequest.h"
#include "api/v1/ApiRouter.h"
+#include "base/api/interfaces/IApiRequest.h"
#include "base/kernel/Platform.h"
#include "base/tools/Buffer.h"
#include "core/config/Config.h"
@@ -41,6 +35,11 @@
#include "version.h"
+#include
+#include
+#include
+
+
static inline double normalize(double d)
{
if (!std::isnormal(d)) {
@@ -57,9 +56,7 @@ xmrig::ApiRouter::ApiRouter(Base *base) :
}
-xmrig::ApiRouter::~ApiRouter()
-{
-}
+xmrig::ApiRouter::~ApiRouter() = default;
void xmrig::ApiRouter::onRequest(IApiRequest &request)
@@ -69,7 +66,6 @@ void xmrig::ApiRouter::onRequest(IApiRequest &request)
request.accept();
getMiner(request.reply(), request.doc());
getHashrate(request.reply(), request.doc());
- getResourcesSummary(request.reply(), request.doc());
getMinersSummary(request.reply(), request.doc());
getResults(request.reply(), request.doc());
}
@@ -196,36 +192,6 @@ void xmrig::ApiRouter::getMinersSummary(rapidjson::Value &reply, rapidjson::Docu
}
-
-void xmrig::ApiRouter::getResourcesSummary(rapidjson::Value &reply, rapidjson::Document &doc) const
-{
- using namespace rapidjson;
- auto &allocator = doc.GetAllocator();
-
- size_t rss = 0;
- uv_resident_set_memory(&rss);
-
- Value resources(kObjectType);
- Value memory(kObjectType);
- Value load_average(kArrayType);
-
- memory.AddMember("total", uv_get_total_memory(), allocator);
- memory.AddMember("resident_set_memory", static_cast(rss), allocator);
-
- double loadavg[3] = { 1.0 };
- uv_loadavg(loadavg);
- load_average.PushBack(loadavg[0], allocator);
- load_average.PushBack(loadavg[1], allocator);
- load_average.PushBack(loadavg[2], allocator);
-
- resources.AddMember("memory", memory, allocator);
- resources.AddMember("load_average", load_average, allocator);
- resources.AddMember("hardware_concurrency", std::thread::hardware_concurrency(), allocator);
-
- reply.AddMember("resources", resources, allocator);
-}
-
-
void xmrig::ApiRouter::getResults(rapidjson::Value &reply, rapidjson::Document &doc) const
{
auto &allocator = doc.GetAllocator();
@@ -243,8 +209,8 @@ void xmrig::ApiRouter::getResults(rapidjson::Value &reply, rapidjson::Document &
results.AddMember("hashes_donate", stats.donateHashes, allocator);
rapidjson::Value best(rapidjson::kArrayType);
- for (size_t i = 0; i < stats.topDiff.size(); ++i) {
- best.PushBack(stats.topDiff[i], allocator);
+ for (uint64_t i : stats.topDiff) {
+ best.PushBack(i, allocator);
}
results.AddMember("best", best, allocator);
diff --git a/src/api/v1/ApiRouter.h b/src/api/v1/ApiRouter.h
index 60560dc..f121849 100644
--- a/src/api/v1/ApiRouter.h
+++ b/src/api/v1/ApiRouter.h
@@ -27,6 +27,7 @@
#include "base/api/interfaces/IApiListener.h"
+#include "base/tools/Object.h"
#include "proxy/StatsData.h"
#include "rapidjson/fwd.h"
@@ -40,6 +41,8 @@ class Base;
class ApiRouter : public xmrig::IApiListener
{
public:
+ XMRIG_DISABLE_COPY_MOVE_DEFAULT(ApiRouter)
+
ApiRouter(Base *base);
~ApiRouter() override;
@@ -52,7 +55,6 @@ private:
void getMiner(rapidjson::Value &reply, rapidjson::Document &doc) const;
void getMiners(rapidjson::Value &reply, rapidjson::Document &doc) const;
void getMinersSummary(rapidjson::Value &reply, rapidjson::Document &doc) const;
- void getResourcesSummary(rapidjson::Value &reply, rapidjson::Document &doc) const;
void getResults(rapidjson::Value &reply, rapidjson::Document &doc) const;
void getWorkers(rapidjson::Value &reply, rapidjson::Document &doc) const;
diff --git a/src/base/api/Api.cpp b/src/base/api/Api.cpp
index ad44bbb..c66241c 100644
--- a/src/base/api/Api.cpp
+++ b/src/base/api/Api.cpp
@@ -49,12 +49,48 @@
#endif
+#include
+
+
+namespace xmrig {
+
+
+static rapidjson::Value getResources(rapidjson::Document &doc)
+{
+ using namespace rapidjson;
+ auto &allocator = doc.GetAllocator();
+
+ size_t rss = 0;
+ uv_resident_set_memory(&rss);
+
+ Value out(kObjectType);
+ Value memory(kObjectType);
+ Value load_average(kArrayType);
+
+ memory.AddMember("free", uv_get_free_memory(), allocator);
+ memory.AddMember("total", uv_get_total_memory(), allocator);
+ memory.AddMember("resident_set_memory", static_cast(rss), allocator);
+
+ double loadavg[3] = { 0.0 };
+ uv_loadavg(loadavg);
+ load_average.PushBack(loadavg[0], allocator);
+ load_average.PushBack(loadavg[1], allocator);
+ load_average.PushBack(loadavg[2], allocator);
+
+ out.AddMember("memory", memory, allocator);
+ out.AddMember("load_average", load_average, allocator);
+ out.AddMember("hardware_concurrency", std::thread::hardware_concurrency(), allocator);
+
+ return out;
+}
+
+
+} // namespace xmrig
+
+
xmrig::Api::Api(Base *base) :
m_base(base),
- m_id(),
- m_workerId(),
- m_timestamp(Chrono::currentMSecsSinceEpoch()),
- m_httpd(nullptr)
+ m_timestamp(Chrono::currentMSecsSinceEpoch())
{
base->addListener(this);
@@ -117,10 +153,13 @@ void xmrig::Api::exec(IApiRequest &request)
auto &allocator = request.doc().GetAllocator();
request.accept();
- request.reply().AddMember("id", StringRef(m_id), allocator);
- request.reply().AddMember("worker_id", StringRef(m_workerId), allocator);
- request.reply().AddMember("uptime", (Chrono::currentMSecsSinceEpoch() - m_timestamp) / 1000, allocator);
- request.reply().AddMember("restricted", request.isRestricted(), allocator);
+
+ auto &reply = request.reply();
+ reply.AddMember("id", StringRef(m_id), allocator);
+ reply.AddMember("worker_id", StringRef(m_workerId), allocator);
+ reply.AddMember("uptime", (Chrono::currentMSecsSinceEpoch() - m_timestamp) / 1000, allocator);
+ reply.AddMember("restricted", request.isRestricted(), allocator);
+ reply.AddMember("resources", getResources(request.doc()), allocator);
Value features(kArrayType);
# ifdef XMRIG_FEATURE_API
@@ -144,7 +183,7 @@ void xmrig::Api::exec(IApiRequest &request)
# ifdef XMRIG_FEATURE_OPENCL
features.PushBack("opencl", allocator);
# endif
- request.reply().AddMember("features", features, allocator);
+ reply.AddMember("features", features, allocator);
}
for (IApiListener *listener : m_listeners) {
@@ -180,9 +219,9 @@ void xmrig::Api::genId(const String &id)
uint8_t hash[200];
const size_t addrSize = sizeof(interfaces[i].phys_addr);
const size_t inSize = (sizeof(APP_KIND) - 1) + addrSize + sizeof(uint16_t);
- const uint16_t port = static_cast(m_base->config()->http().port());
+ const auto port = static_cast(m_base->config()->http().port());
- uint8_t *input = new uint8_t[inSize]();
+ auto*input = new uint8_t[inSize]();
memcpy(input, &port, sizeof(uint16_t));
memcpy(input + sizeof(uint16_t), interfaces[i].phys_addr, addrSize);
memcpy(input + sizeof(uint16_t) + addrSize, APP_KIND, (sizeof(APP_KIND) - 1));
diff --git a/src/base/api/Api.h b/src/base/api/Api.h
index 0c1a728..130ce78 100644
--- a/src/base/api/Api.h
+++ b/src/base/api/Api.h
@@ -70,10 +70,10 @@ private:
void genWorkerId(const String &id);
Base *m_base;
- char m_id[32];
- char m_workerId[128];
+ char m_id[32]{};
+ char m_workerId[128]{};
const uint64_t m_timestamp;
- Httpd *m_httpd;
+ Httpd *m_httpd = nullptr;
std::vector m_listeners;
};
diff --git a/src/base/api/Httpd.cpp b/src/base/api/Httpd.cpp
index e61e66f..27e7dc4 100644
--- a/src/base/api/Httpd.cpp
+++ b/src/base/api/Httpd.cpp
@@ -23,9 +23,9 @@
*/
+#include "base/api/Httpd.h"
#include "3rdparty/http-parser/http_parser.h"
#include "base/api/Api.h"
-#include "base/api/Httpd.h"
#include "base/io/log/Log.h"
#include "base/net/http/HttpApiResponse.h"
#include "base/net/http/HttpData.h"
@@ -58,9 +58,7 @@ xmrig::Httpd::Httpd(Base *base) :
}
-xmrig::Httpd::~Httpd()
-{
-}
+xmrig::Httpd::~Httpd() = default;
bool xmrig::Httpd::start()
diff --git a/src/base/api/Httpd.h b/src/base/api/Httpd.h
index 220bb7f..ebfbcbf 100644
--- a/src/base/api/Httpd.h
+++ b/src/base/api/Httpd.h
@@ -26,11 +26,12 @@
#define XMRIG_HTTPD_H
-#include
+#include
#include "base/kernel/interfaces/IBaseListener.h"
#include "base/kernel/interfaces/IHttpListener.h"
+#include "base/tools/Object.h"
namespace xmrig {
@@ -44,6 +45,8 @@ class TcpServer;
class Httpd : public IBaseListener, public IHttpListener
{
public:
+ XMRIG_DISABLE_COPY_MOVE_DEFAULT(Httpd)
+
Httpd(Base *base);
~Httpd() override;
diff --git a/src/base/api/requests/ApiRequest.cpp b/src/base/api/requests/ApiRequest.cpp
index da73ade..4f0bd04 100644
--- a/src/base/api/requests/ApiRequest.cpp
+++ b/src/base/api/requests/ApiRequest.cpp
@@ -33,6 +33,4 @@ xmrig::ApiRequest::ApiRequest(Source source, bool restricted) :
}
-xmrig::ApiRequest::~ApiRequest()
-{
-}
+xmrig::ApiRequest::~ApiRequest() = default;
diff --git a/src/base/api/requests/ApiRequest.h b/src/base/api/requests/ApiRequest.h
index ad4b0c3..c87e822 100644
--- a/src/base/api/requests/ApiRequest.h
+++ b/src/base/api/requests/ApiRequest.h
@@ -29,6 +29,7 @@
#include "base/api/interfaces/IApiRequest.h"
#include "base/tools/String.h"
+#include "base/tools/Object.h"
namespace xmrig {
@@ -37,6 +38,8 @@ namespace xmrig {
class ApiRequest : public IApiRequest
{
public:
+ XMRIG_DISABLE_COPY_MOVE_DEFAULT(ApiRequest)
+
ApiRequest(Source source, bool restricted);
~ApiRequest() override;
@@ -63,8 +66,8 @@ protected:
String m_rpcMethod;
private:
- bool m_restricted;
- Source m_source;
+ const bool m_restricted;
+ const Source m_source;
};
diff --git a/src/base/kernel/config/BaseConfig.cpp b/src/base/kernel/config/BaseConfig.cpp
index 3da06b5..7605644 100644
--- a/src/base/kernel/config/BaseConfig.cpp
+++ b/src/base/kernel/config/BaseConfig.cpp
@@ -63,11 +63,6 @@
#include "version.h"
-xmrig::BaseConfig::BaseConfig()
-{
-}
-
-
void xmrig::BaseConfig::printVersions()
{
char buf[256] = { 0 };
diff --git a/src/base/kernel/config/BaseConfig.h b/src/base/kernel/config/BaseConfig.h
index 2e10c3f..c700d10 100644
--- a/src/base/kernel/config/BaseConfig.h
+++ b/src/base/kernel/config/BaseConfig.h
@@ -31,9 +31,6 @@
#include "base/net/stratum/Pools.h"
-struct option;
-
-
namespace xmrig {
@@ -43,7 +40,7 @@ class IJsonReader;
class BaseConfig : public IConfig
{
public:
- BaseConfig();
+ BaseConfig() = default;
inline bool isAutoSave() const { return m_autoSave; }
inline bool isBackground() const { return m_background; }
diff --git a/src/base/kernel/interfaces/IConfig.h b/src/base/kernel/interfaces/IConfig.h
index 7167e0b..5044545 100644
--- a/src/base/kernel/interfaces/IConfig.h
+++ b/src/base/kernel/interfaces/IConfig.h
@@ -89,6 +89,7 @@ public:
AssemblyKey = 1015,
RandomXInitKey = 1022,
RandomXNumaKey = 1023,
+ RandomXModeKey = 1029,
CPUMaxThreadsKey = 1026,
MemoryPoolKey = 1027,
@@ -125,6 +126,7 @@ public:
TlsProtocolsKey = 1114,
AlgoExtKey = 1115,
ProxyPasswordKey = 1116,
+ LoginFileKey = 'L',
// xmrig nvidia
CudaMaxThreadsKey = 1200,
diff --git a/src/base/kernel/interfaces/IStrategy.h b/src/base/kernel/interfaces/IStrategy.h
index f2e5840..a0a2498 100644
--- a/src/base/kernel/interfaces/IStrategy.h
+++ b/src/base/kernel/interfaces/IStrategy.h
@@ -26,7 +26,7 @@
#define XMRIG_ISTRATEGY_H
-#include
+#include
namespace xmrig {
diff --git a/src/base/net/http/Http.cpp b/src/base/net/http/Http.cpp
index 3c27582..c58080e 100644
--- a/src/base/net/http/Http.cpp
+++ b/src/base/net/http/Http.cpp
@@ -23,9 +23,9 @@
*/
+#include "base/net/http/Http.h"
#include "3rdparty/rapidjson/document.h"
#include "base/io/json/Json.h"
-#include "base/net/http/Http.h"
namespace xmrig {
@@ -41,10 +41,7 @@ static const char *kToken = "access-token";
xmrig::Http::Http() :
- m_enabled(false),
- m_restricted(true),
- m_host(kLocalhost),
- m_port(0)
+ m_host(kLocalhost)
{
}
diff --git a/src/base/net/http/Http.h b/src/base/net/http/Http.h
index 21eb581..0e8e4fb 100644
--- a/src/base/net/http/Http.h
+++ b/src/base/net/http/Http.h
@@ -38,7 +38,7 @@ class Http
public:
Http();
- inline bool isAuthRequired() const { return m_restricted == false || !m_token.isNull(); }
+ inline bool isAuthRequired() const { return !m_restricted || !m_token.isNull(); }
inline bool isEnabled() const { return m_enabled; }
inline bool isRestricted() const { return m_restricted; }
inline const String &host() const { return m_host; }
@@ -58,11 +58,11 @@ public:
void setPort(int port);
private:
- bool m_enabled;
- bool m_restricted;
+ bool m_enabled = false;
+ bool m_restricted = true;
String m_host;
String m_token;
- uint16_t m_port;
+ uint16_t m_port = 0;
};
diff --git a/src/base/net/http/HttpClient.cpp b/src/base/net/http/HttpClient.cpp
index 2699e66..9db1e80 100644
--- a/src/base/net/http/HttpClient.cpp
+++ b/src/base/net/http/HttpClient.cpp
@@ -66,7 +66,7 @@ public:
inline static void onWrite(uv_write_t *req, int) { delete reinterpret_cast(req->data); }
- uv_buf_t bufs[2];
+ uv_buf_t bufs[2]{};
private:
std::string m_body;
diff --git a/src/base/net/http/HttpContext.cpp b/src/base/net/http/HttpContext.cpp
index 1130d12..af57625 100644
--- a/src/base/net/http/HttpContext.cpp
+++ b/src/base/net/http/HttpContext.cpp
@@ -24,27 +24,30 @@
*/
+#include "base/net/http/HttpContext.h"
+#include "3rdparty/http-parser/http_parser.h"
+#include "base/kernel/interfaces/IHttpListener.h"
+#include "base/tools/Chrono.h"
+
+
#include
#include
-#include "3rdparty/http-parser/http_parser.h"
-#include "base/kernel/interfaces/IHttpListener.h"
-#include "base/net/http/HttpContext.h"
-
-
namespace xmrig {
+
static http_parser_settings http_settings;
static std::map storage;
static uint64_t SEQUENCE = 0;
+
} // namespace xmrig
xmrig::HttpContext::HttpContext(int parser_type, IHttpListener *listener) :
HttpData(SEQUENCE++),
- m_wasHeaderValue(false),
+ m_timestamp(Chrono::steadyMSecs()),
m_listener(listener)
{
storage[id()] = this;
@@ -96,6 +99,12 @@ std::string xmrig::HttpContext::ip() const
}
+uint64_t xmrig::HttpContext::elapsed() const
+{
+ return Chrono::steadyMSecs() - m_timestamp;
+}
+
+
void xmrig::HttpContext::close(int status)
{
if (status < 0 && m_listener) {
diff --git a/src/base/net/http/HttpContext.h b/src/base/net/http/HttpContext.h
index ba4418b..9c30413 100644
--- a/src/base/net/http/HttpContext.h
+++ b/src/base/net/http/HttpContext.h
@@ -59,6 +59,7 @@ public:
size_t parse(const char *data, size_t size);
std::string ip() const;
+ uint64_t elapsed() const;
void close(int status = 0);
static HttpContext *get(uint64_t id);
@@ -74,7 +75,8 @@ private:
void setHeader();
- bool m_wasHeaderValue;
+ bool m_wasHeaderValue = false;
+ const uint64_t m_timestamp;
http_parser *m_parser;
IHttpListener *m_listener;
std::string m_lastHeaderField;
diff --git a/src/base/net/http/HttpData.h b/src/base/net/http/HttpData.h
index ceb19b8..1705e88 100644
--- a/src/base/net/http/HttpData.h
+++ b/src/base/net/http/HttpData.h
@@ -38,12 +38,12 @@ namespace xmrig {
class HttpData
{
public:
- inline HttpData(uint64_t id) : method(0), status(0), m_id(id) {}
+ inline HttpData(uint64_t id) : m_id(id) {}
inline uint64_t id() const { return m_id; }
- int method;
- int status;
+ int method = 0;
+ int status = 0;
std::map headers;
std::string body;
std::string url;
diff --git a/src/base/net/http/HttpResponse.cpp b/src/base/net/http/HttpResponse.cpp
index 7a4af83..ebd0bcf 100644
--- a/src/base/net/http/HttpResponse.cpp
+++ b/src/base/net/http/HttpResponse.cpp
@@ -24,20 +24,23 @@
*/
-#include
-#include
-#include
-
-
+#include "base/net/http/HttpResponse.h"
#include "3rdparty/http-parser/http_parser.h"
#include "base/io/log/Log.h"
#include "base/net/http/HttpContext.h"
-#include "base/net/http/HttpResponse.h"
#include "base/tools/Baton.h"
+#include "base/tools/Object.h"
+
+
+#include
+#include
+#include
+#include
namespace xmrig {
+
static const char *kCRLF = "\r\n";
static const char *kUserAgent = "user-agent";
@@ -45,6 +48,8 @@ static const char *kUserAgent = "user-agent";
class WriteBaton : public Baton
{
public:
+ XMRIG_DISABLE_COPY_MOVE_DEFAULT(WriteBaton)
+
inline WriteBaton(const std::stringstream &ss, const char *data, size_t size, HttpContext *ctx) :
m_ctx(ctx),
m_header(ss.str())
@@ -79,7 +84,7 @@ public:
inline static void onWrite(uv_write_t *req, int) { delete reinterpret_cast(req->data); }
- uv_buf_t bufs[2];
+ uv_buf_t bufs[2]{};
private:
HttpContext *m_ctx;
@@ -98,7 +103,7 @@ xmrig::HttpResponse::HttpResponse(uint64_t id, int statusCode) :
bool xmrig::HttpResponse::isAlive() const
{
- HttpContext *ctx = HttpContext::get(m_id);
+ auto ctx = HttpContext::get(m_id);
return ctx && uv_is_writable(ctx->stream());
}
@@ -129,8 +134,8 @@ void xmrig::HttpResponse::end(const char *data, size_t size)
ss << kCRLF;
- HttpContext *ctx = HttpContext::get(m_id);
- WriteBaton *baton = new WriteBaton(ss, data, size, ctx);
+ auto ctx = HttpContext::get(m_id);
+ auto baton = new WriteBaton(ss, data, size, ctx);
# ifndef APP_DEBUG
if (statusCode() >= 400)
@@ -138,13 +143,14 @@ void xmrig::HttpResponse::end(const char *data, size_t size)
{
const bool err = statusCode() >= 400;
- Log::print(err ? Log::ERR : Log::INFO, CYAN("%s ") CLEAR MAGENTA_BOLD("%s") WHITE_BOLD(" %s ") CSI "1;%dm%d " CLEAR WHITE_BOLD("%zu ") BLACK_BOLD("\"%s\""),
+ Log::print(err ? Log::ERR : Log::INFO, CYAN("%s ") CLEAR MAGENTA_BOLD("%s") WHITE_BOLD(" %s ") CSI "1;%dm%d " CLEAR WHITE_BOLD("%zu ") CYAN_BOLD("%" PRIu64 "ms ") BLACK_BOLD("\"%s\""),
ctx->ip().c_str(),
http_method_str(static_cast(ctx->method)),
ctx->url.c_str(),
err ? 31 : 32,
statusCode(),
baton->size(),
+ ctx->elapsed(),
ctx->headers.count(kUserAgent) ? ctx->headers.at(kUserAgent).c_str() : nullptr
);
}
diff --git a/src/base/net/http/HttpServer.cpp b/src/base/net/http/HttpServer.cpp
index 60db31f..5aae1b6 100644
--- a/src/base/net/http/HttpServer.cpp
+++ b/src/base/net/http/HttpServer.cpp
@@ -49,7 +49,7 @@ xmrig::HttpServer::~HttpServer()
void xmrig::HttpServer::onConnection(uv_stream_t *stream, uint16_t)
{
- HttpContext *ctx = new HttpContext(HTTP_REQUEST, m_listener);
+ auto ctx = new HttpContext(HTTP_REQUEST, m_listener);
uv_accept(stream, ctx->stream());
uv_read_start(ctx->stream(),
@@ -65,11 +65,11 @@ void xmrig::HttpServer::onConnection(uv_stream_t *stream, uint16_t)
},
[](uv_stream_t *tcp, ssize_t nread, const uv_buf_t *buf)
{
- HttpContext *ctx = static_cast(tcp->data);
+ auto ctx = static_cast(tcp->data);
if (nread >= 0) {
- const size_t size = static_cast(nread);
- const size_t parsed = ctx->parse(buf->base, size);
+ const auto size = static_cast(nread);
+ const auto parsed = ctx->parse(buf->base, size);
if (parsed < size) {
ctx->close();
diff --git a/src/base/net/http/HttpServer.h b/src/base/net/http/HttpServer.h
index 45f3843..74e846b 100644
--- a/src/base/net/http/HttpServer.h
+++ b/src/base/net/http/HttpServer.h
@@ -28,11 +28,12 @@
#define XMRIG_HTTPSERVER_H
-typedef struct http_parser http_parser;
-typedef struct http_parser_settings http_parser_settings;
+using http_parser = struct http_parser;
+using http_parser_settings = struct http_parser_settings;
#include "base/kernel/interfaces/ITcpServerListener.h"
+#include "base/tools/Object.h"
namespace xmrig {
@@ -44,6 +45,8 @@ class IHttpListener;
class HttpServer : public ITcpServerListener
{
public:
+ XMRIG_DISABLE_COPY_MOVE_DEFAULT(HttpServer)
+
HttpServer(IHttpListener *listener);
~HttpServer() override;