diff --git a/src/base/kernel/interfaces/IClient.h b/src/base/kernel/interfaces/IClient.h index db88638ad..9349aa6af 100644 --- a/src/base/kernel/interfaces/IClient.h +++ b/src/base/kernel/interfaces/IClient.h @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,6 +39,7 @@ class Algorithm; class Job; class JobResult; class Pool; +class ProxyUrl; class String; @@ -79,6 +80,7 @@ public: virtual void setAlgo(const Algorithm &algo) = 0; virtual void setEnabled(bool enabled) = 0; virtual void setPool(const Pool &pool) = 0; + virtual void setProxy(const ProxyUrl &proxy) = 0; virtual void setQuiet(bool quiet) = 0; virtual void setRetries(int retries) = 0; virtual void setRetryPause(uint64_t ms) = 0; diff --git a/src/base/kernel/interfaces/IStrategy.h b/src/base/kernel/interfaces/IStrategy.h index a0a249879..fc34521d6 100644 --- a/src/base/kernel/interfaces/IStrategy.h +++ b/src/base/kernel/interfaces/IStrategy.h @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,6 +35,7 @@ namespace xmrig { class Algorithm; class IClient; class JobResult; +class ProxyUrl; class IStrategy @@ -48,6 +49,7 @@ public: virtual void connect() = 0; virtual void resume() = 0; virtual void setAlgo(const Algorithm &algo) = 0; + virtual void setProxy(const ProxyUrl &proxy) = 0; virtual void stop() = 0; virtual void tick(uint64_t now) = 0; }; diff --git a/src/base/net/stratum/BaseClient.h b/src/base/net/stratum/BaseClient.h index 5726b3e58..700f78e96 100644 --- a/src/base/net/stratum/BaseClient.h +++ b/src/base/net/stratum/BaseClient.h @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -56,6 +56,7 @@ protected: inline int64_t sequence() const override { return m_sequence; } inline void setAlgo(const Algorithm &algo) override { m_pool.setAlgo(algo); } inline void setEnabled(bool enabled) override { m_enabled = enabled; } + inline void setProxy(const ProxyUrl &proxy) override { m_pool.setProxy(proxy); } inline void setQuiet(bool quiet) override { m_quiet = quiet; } inline void setRetries(int retries) override { m_retries = retries; } inline void setRetryPause(uint64_t ms) override { m_retryPause = ms; } diff --git a/src/base/net/stratum/Pool.h b/src/base/net/stratum/Pool.h index 0272ef077..352387717 100644 --- a/src/base/net/stratum/Pool.h +++ b/src/base/net/stratum/Pool.h @@ -106,6 +106,7 @@ public: inline uint64_t pollInterval() const { return m_pollInterval; } inline void setAlgo(const Algorithm &algorithm) { m_algorithm = algorithm; } inline void setPassword(const String &password) { m_password = password; } + inline void setProxy(const ProxyUrl &proxy) { m_proxy = proxy; } inline void setRigId(const String &rigId) { m_rigId = rigId; } inline void setUser(const String &user) { m_user = user; } diff --git a/src/base/net/stratum/SelfSelectClient.cpp b/src/base/net/stratum/SelfSelectClient.cpp index 4de49f6ef..cc442cd89 100644 --- a/src/base/net/stratum/SelfSelectClient.cpp +++ b/src/base/net/stratum/SelfSelectClient.cpp @@ -5,9 +5,9 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh * Copyright 2019 jtgrassie - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/base/net/stratum/SelfSelectClient.h b/src/base/net/stratum/SelfSelectClient.h index 44b07212c..ba675ffe9 100644 --- a/src/base/net/stratum/SelfSelectClient.h +++ b/src/base/net/stratum/SelfSelectClient.h @@ -5,9 +5,9 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh * Copyright 2019 jtgrassie - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,6 +68,7 @@ protected: inline void setAlgo(const Algorithm &algo) override { m_client->setAlgo(algo); } inline void setEnabled(bool enabled) override { m_client->setEnabled(enabled); } inline void setPool(const Pool &pool) override { m_client->setPool(pool); } + inline void setProxy(const ProxyUrl &proxy) override { m_client->setProxy(proxy); } inline void setQuiet(bool quiet) override { m_client->setQuiet(quiet); m_quiet = quiet; } inline void setRetries(int retries) override { m_client->setRetries(retries); m_retries = retries; } inline void setRetryPause(uint64_t ms) override { m_client->setRetryPause(ms); m_retryPause = ms; } diff --git a/src/base/net/stratum/strategies/FailoverStrategy.cpp b/src/base/net/stratum/strategies/FailoverStrategy.cpp index 28c1ad99f..ddeeb21f5 100644 --- a/src/base/net/stratum/strategies/FailoverStrategy.cpp +++ b/src/base/net/stratum/strategies/FailoverStrategy.cpp @@ -108,6 +108,14 @@ void xmrig::FailoverStrategy::setAlgo(const Algorithm &algo) } +void xmrig::FailoverStrategy::setProxy(const ProxyUrl &proxy) +{ + for (IClient *client : m_pools) { + client->setProxy(proxy); + } +} + + void xmrig::FailoverStrategy::stop() { for (auto &pool : m_pools) { diff --git a/src/base/net/stratum/strategies/FailoverStrategy.h b/src/base/net/stratum/strategies/FailoverStrategy.h index c69160ee9..18e92dd19 100644 --- a/src/base/net/stratum/strategies/FailoverStrategy.h +++ b/src/base/net/stratum/strategies/FailoverStrategy.h @@ -61,6 +61,7 @@ protected: void connect() override; void resume() override; void setAlgo(const Algorithm &algo) override; + void setProxy(const ProxyUrl &proxy) override; void stop() override; void tick(uint64_t now) override; diff --git a/src/base/net/stratum/strategies/SinglePoolStrategy.cpp b/src/base/net/stratum/strategies/SinglePoolStrategy.cpp index a45be658f..360311899 100644 --- a/src/base/net/stratum/strategies/SinglePoolStrategy.cpp +++ b/src/base/net/stratum/strategies/SinglePoolStrategy.cpp @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -75,6 +75,12 @@ void xmrig::SinglePoolStrategy::setAlgo(const Algorithm &algo) } +void xmrig::SinglePoolStrategy::setProxy(const ProxyUrl &proxy) +{ + m_client->setProxy(proxy); +} + + void xmrig::SinglePoolStrategy::stop() { m_client->disconnect(); diff --git a/src/base/net/stratum/strategies/SinglePoolStrategy.h b/src/base/net/stratum/strategies/SinglePoolStrategy.h index f2c8b2297..90b85c7d7 100644 --- a/src/base/net/stratum/strategies/SinglePoolStrategy.h +++ b/src/base/net/stratum/strategies/SinglePoolStrategy.h @@ -5,8 +5,8 @@ * Copyright 2014-2016 Wolf9466 * Copyright 2016 Jay D Dee * Copyright 2017-2018 XMR-Stak , - * Copyright 2018-2019 SChernykh - * Copyright 2016-2019 XMRig , + * Copyright 2018-2020 SChernykh + * Copyright 2016-2020 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,6 +55,7 @@ protected: void connect() override; void resume() override; void setAlgo(const Algorithm &algo) override; + void setProxy(const ProxyUrl &proxy) override; void stop() override; void tick(uint64_t now) override; diff --git a/src/net/Network.cpp b/src/net/Network.cpp index 643f30e44..5b36575fe 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -256,6 +256,7 @@ void xmrig::Network::setJob(IClient *client, const Job &job, bool donate) if (!donate && m_donate) { m_donate->setAlgo(job.algorithm()); + m_donate->setProxy(client->pool().proxy()); } m_controller->miner()->setJob(job, donate); diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index 86d1c4f7d..4559334bc 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -125,6 +125,12 @@ void xmrig::DonateStrategy::setAlgo(const xmrig::Algorithm &algo) } +void xmrig::DonateStrategy::setProxy(const ProxyUrl &proxy) +{ + m_strategy->setProxy(proxy); +} + + void xmrig::DonateStrategy::stop() { m_timer->stop(); @@ -246,8 +252,9 @@ xmrig::IClient *xmrig::DonateStrategy::createProxy() const IClient *client = strategy->client(); m_tls = client->hasExtension(IClient::EXT_TLS); - Pool pool(client->ip(), client->pool().port(), m_userId, client->pool().password(), 0, true, client->isTLS()); + Pool pool(client->pool().proxy().isValid() ? client->pool().host() : client->ip(), client->pool().port(), m_userId, client->pool().password(), 0, true, client->isTLS()); pool.setAlgo(client->pool().algorithm()); + pool.setProxy(client->pool().proxy()); IClient *proxy = new Client(-1, Platform::userAgent(), this); proxy->setPool(pool); diff --git a/src/net/strategies/DonateStrategy.h b/src/net/strategies/DonateStrategy.h index 6bc0c0756..91590034d 100644 --- a/src/net/strategies/DonateStrategy.h +++ b/src/net/strategies/DonateStrategy.h @@ -65,6 +65,7 @@ protected: int64_t submit(const JobResult &result) override; void connect() override; void setAlgo(const Algorithm &algo) override; + void setProxy(const ProxyUrl &proxy) override; void stop() override; void tick(uint64_t now) override;