diff --git a/src/base/api/Api.cpp b/src/base/api/Api.cpp index ad44bbb3..8d68941d 100644 --- a/src/base/api/Api.cpp +++ b/src/base/api/Api.cpp @@ -51,10 +51,7 @@ 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); @@ -180,9 +177,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 0c1a728d..130ce78e 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 e61e66f1..27e7dc44 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 220bb7f5..ebfbcbf7 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 da73adee..4f0bd044 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 ad4b0c35..c87e822c 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 3da06b57..76056449 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 2e10c3ff..c700d109 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 7167e0bb..79a42a27 100644 --- a/src/base/kernel/interfaces/IConfig.h +++ b/src/base/kernel/interfaces/IConfig.h @@ -125,6 +125,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 f2e58408..a0a24987 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 3c275824..c58080e6 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 21eb581a..0e8e4fbb 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 2699e663..9db1e809 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 1130d12c..af576257 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 ba4418b6..9c304139 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 ceb19b8e..1705e881 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 7a4af838..ebd0bcf9 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 60db31f6..5aae1b6f 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 45f3843d..74e846b9 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;