]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
TorManager: fix tor connection issue after crash
authortobtoht <tob@featherwallet.org>
Sat, 25 Nov 2023 17:10:55 +0000 (18:10 +0100)
committertobtoht <tob@featherwallet.org>
Sat, 25 Nov 2023 18:39:13 +0000 (19:39 +0100)
src/WindowManager.cpp
src/utils/TorManager.cpp
src/utils/TorManager.h
src/utils/nodes.cpp

index 88c6313fdfa101db2e5f20478b1681357ee841f4..06a5c5e00b373b93e3a4c6d2a9721219a4f3c3ce 100644 (file)
@@ -638,7 +638,7 @@ void WindowManager::onProxySettingsChanged() {
         QString host = conf()->get(Config::socks5Host).toString();
         quint16 port = conf()->get(Config::socks5Port).toString().toUShort();
 
-        if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor && !torManager()->isLocalTor()) {
+        if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor && (!torManager()->isLocalTor() || torManager()->isAlreadyRunning())) {
             host = torManager()->featherTorHost;
             port = torManager()->featherTorPort;
         }
index 32d54a63437d057cbb8900decf805a06e1ec0633..82193701d8f97cc88bf2fa7a7b18af1c0694ef76 100644 (file)
@@ -3,9 +3,7 @@
 
 #include "utils/TorManager.h"
 
-#include <QScreen>
 #include <QDesktopServices>
-#include <QRegularExpression>
 
 #include "utils/config.h"
 #include "utils/Utils.h"
@@ -122,7 +120,7 @@ void TorManager::checkConnection() {
         this->setConnectionState(false);
     }
 
-    else if (m_localTor) {
+    else if (m_localTor && !m_alreadyRunning) {
         QString host = conf()->get(Config::socks5Host).toString();
         quint16 port = conf()->get(Config::socks5Port).toString().toUShort();
         this->setConnectionState(Utils::portOpen(host, port));
@@ -236,10 +234,15 @@ bool TorManager::isStarted() {
     return m_started;
 }
 
+bool TorManager::isAlreadyRunning() {
+    return m_alreadyRunning;
+}
+
 bool TorManager::shouldStartTorDaemon() {
     QString torHost = conf()->get(Config::socks5Host).toString();
     quint16 torPort = conf()->get(Config::socks5Port).toString().toUShort();
     QString torHostPort = QString("%1:%2").arg(torHost, QString::number(torPort));
+    m_alreadyRunning = false;
 
     // Don't start a Tor daemon if Feather is run with Torsocks
     if (Utils::isTorsocks()) {
@@ -287,6 +290,7 @@ bool TorManager::shouldStartTorDaemon() {
     // Tor daemon (or other service) is already running on our port (19450)
 
     if (Utils::portOpen(featherTorHost, featherTorPort)) {
+        m_alreadyRunning = true;
         return false;
     }
 
index 6afb4bea6a76f6679e1d362d9085d65bd5dd69db..c629baf69d1a1573256a05a63e863d85202f8be0 100644 (file)
@@ -25,6 +25,7 @@ public:
     bool unpackBins();
     bool isLocalTor();
     bool isStarted();
+    bool isAlreadyRunning();
     SemanticVersion getVersion(const QString &fileName);
 
     static TorManager* instance();
@@ -62,9 +63,10 @@ private:
     QProcess *m_process;
     int m_restarts = 0;
     bool m_stopRetries = false;
-    bool m_localTor;
+    bool m_localTor = false;
     bool m_started = false;
     bool m_unpacked = false;
+    bool m_alreadyRunning = false;
     QTimer *m_checkConnectionTimer;
 };
 
index 8f663e9d1c3cf568909af9a02eae8cf54e4bc651..e9f90277d452c85f69ce3ffb33e181291dfb413b 100644 (file)
@@ -230,7 +230,7 @@ void Nodes::connectToNode(const FeatherNode &node) {
 
     QString proxyAddress;
     if (useSocks5Proxy(node)) {
-        if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor && !torManager()->isLocalTor()) {
+        if (conf()->get(Config::proxy).toInt() == Config::Proxy::Tor && (!torManager()->isLocalTor() || torManager()->isAlreadyRunning())) {
             proxyAddress = QString("%1:%2").arg(torManager()->featherTorHost, QString::number(torManager()->featherTorPort));
         } else {
             proxyAddress = QString("%1:%2").arg(conf()->get(Config::socks5Host).toString(),