Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pages/Mining.qml
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ Rectangle {
confirmationDialog.cancelText = qsTr("No") + translationManager.emptyString;
confirmationDialog.okText = qsTr("Yes") + translationManager.emptyString;
confirmationDialog.onAcceptedCallback = function() {
p2poolManager.proxyAddress = persistentSettings.getProxyAddress();
p2poolManager.download();
statusMessageText.text = "Downloading P2Pool...";
statusMessage.visible = true
Expand Down Expand Up @@ -652,6 +653,7 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
chain = "nano"
}
var p2poolArgs = persistentSettings.p2poolFlags;
p2poolManager.proxyAddress = persistentSettings.getProxyAddress();
var success = p2poolManager.start(p2poolArgs, address, chain, threads);
if (success)
{
Expand Down
2 changes: 1 addition & 1 deletion pages/settings/SettingsLayout.qml
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ Rectangle {
}
text: qsTr("Socks5 proxy (%1%2)")
.arg(appWindow.walletMode >= 2 ? qsTr("remote node connections, ") : "")
.arg(qsTr("updates downloading, fetching price sources")) + translationManager.emptyString
.arg(qsTr("updates downloading, fetching price sources, P2Pool")) + translationManager.emptyString
}

MoneroComponents.RemoteNodeEdit {
Expand Down
57 changes: 51 additions & 6 deletions src/p2pool/P2PoolManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include "P2PoolManager.h"
#include "net/http_client.h"
#include "net/http.h"
#include "common/util.h"
#include "main/oshelper.h"
#include "qt/utils.h"
Expand Down Expand Up @@ -72,11 +72,26 @@ void P2PoolManager::download() {
validHash = "a358489a4b1a6addfcc86ff235a0ce50210899f5e3a6dc93ce0eb69e0d181564";
#endif
QFile file(fileName);
epee::net_utils::http::http_simple_client http_client;
net::http::client http_client;
QString proxyAddress;
{
QMutexLocker locker(&m_proxyMutex);
proxyAddress = m_proxyAddress;
}

if (!proxyAddress.isEmpty() && !http_client.set_proxy(proxyAddress.toStdString())) {
qCritical() << "Failed to set p2pool download proxy address" << proxyAddress;
emit p2poolDownloadFailure(ConnectionIssue);
return;
}

const epee::net_utils::http::http_response_info* response = NULL;
std::string userAgent = randomUserAgent().toStdString();
std::chrono::milliseconds timeout = std::chrono::seconds(10);
http_client.set_server(url.host().toStdString(), "443", {});
const epee::net_utils::ssl_options_t sslOptions{
epee::net_utils::ssl_support_t::e_ssl_support_enabled
};
http_client.set_server(url.host().toStdString(), "443", {}, sslOptions);
bool success = http_client.invoke_get(url.path().toStdString(), timeout, {}, std::addressof(response), {{"User-Agent", userAgent}});
if (success && response->m_response_code == 404) {
emit p2poolDownloadFailure(BinaryNotAvailable);
Expand All @@ -86,9 +101,11 @@ void P2PoolManager::download() {
for (std::pair<std::string, std::string> i : fields) {
if (i.first == "Location") {
url = QString::fromStdString(i.second);
http_client.set_server(url.host().toStdString(), "443", {});
std::string query = url.query(QUrl::FullyEncoded).toStdString();
std::string path = url.path().toStdString() + "?" + query;
http_client.set_server(url.host().toStdString(), "443", {}, sslOptions);
std::string path = url.path().toStdString();
if (url.hasQuery()) {
path += "?" + url.query(QUrl::FullyEncoded).toStdString();
}
http_client.wipe_response();
success = http_client.invoke_get(path, timeout, {}, std::addressof(response), {{"User-Agent", userAgent}});
}
Expand Down Expand Up @@ -196,6 +213,15 @@ bool P2PoolManager::start(const QString &flags, const QString &address, const QS
arguments << "--wallet" << address;
}

{
QMutexLocker locker(&m_proxyMutex);
if (!m_proxyAddress.isEmpty()) {
if (!arguments.contains("--socks5")) {
arguments << "--socks5" << m_proxyAddress;
}
}
}

qDebug() << "starting p2pool " + m_p2pool;
qDebug() << "With command line arguments " << arguments;

Expand All @@ -220,6 +246,25 @@ bool P2PoolManager::start(const QString &flags, const QString &address, const QS
return true;
}

QString P2PoolManager::proxyAddress() const
{
QMutexLocker locker(&m_proxyMutex);
return m_proxyAddress;
}

void P2PoolManager::setProxyAddress(QString address)
{
{
QMutexLocker locker(&m_proxyMutex);
if (m_proxyAddress == address) {
return;
}
m_proxyAddress = address;
}

emit proxyAddressChanged();
}

void P2PoolManager::exit()
{
qDebug("P2PoolManager: exit()");
Expand Down
6 changes: 6 additions & 0 deletions src/p2pool/P2PoolManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
class P2PoolManager : public QObject
{
Q_OBJECT
Q_PROPERTY(QString proxyAddress READ proxyAddress WRITE setProxyAddress NOTIFY proxyAddressChanged)

public:
explicit P2PoolManager(QObject *parent = 0);
Expand All @@ -63,17 +64,22 @@ class P2PoolManager : public QObject
private:

bool running(NetworkType::Type nettype) const;
QString proxyAddress() const;
void setProxyAddress(QString address);
signals:
void p2poolStartFailure() const;
void p2poolStatus(bool isMining, int hashrate) const;
void p2poolDownloadFailure(int errorCode) const;
void p2poolDownloadSuccess() const;
void proxyAddressChanged() const;

private:
std::unique_ptr<QProcess> m_p2poold;
QMutex m_p2poolMutex;
QString m_p2pool;
QString m_p2poolPath;
QString m_proxyAddress;
mutable QMutex m_proxyMutex;
bool started = false;

mutable FutureScheduler m_scheduler;
Expand Down
Loading