diff --git a/src/appcontext.cpp b/src/appcontext.cpp index 60b196a..cdad322 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -169,7 +169,7 @@ AppContext::AppContext(QCommandLineParser *cmdargs) { } void AppContext::initTor() { - this->tor = new Tor(this); + this->tor = new Tor(this, this); this->tor->start(); if (!(isTails || isWhonix)) { diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e8b3efa..d83426b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -932,6 +932,8 @@ void MainWindow::homeWidgetChanged(const QString &widgetName) { } void MainWindow::closeEvent(QCloseEvent *event) { + m_ctx->tor->stop(); + this->saveGeo(); if(m_wizard != nullptr) m_wizard->close(); diff --git a/src/utils/tor.cpp b/src/utils/tor.cpp index 280a989..1175982 100644 --- a/src/utils/tor.cpp +++ b/src/utils/tor.cpp @@ -50,6 +50,13 @@ Tor::Tor(AppContext *ctx, QObject *parent) return; } + // Don't spawn Tor on default port to avoid conflicts + Tor::torPort = 19450; + if (Utils::portOpen(Tor::torHost, Tor::torPort)) { + this->localTor = true; + return; + } + qDebug() << "Using embedded tor instance"; m_process.setProcessChannelMode(QProcess::MergedChannels); @@ -58,6 +65,10 @@ Tor::Tor(AppContext *ctx, QObject *parent) connect(&m_process, &QProcess::stateChanged, this, &Tor::stateChanged); } +void Tor::stop() { + m_process.kill(); +} + void Tor::start() { if (this->localTor) { this->checkConnection(); @@ -65,9 +76,6 @@ void Tor::start() { return; } - // Don't spawn Tor on default port to avoid conflicts - Tor::torPort = 19450; - auto state = m_process.state(); if (state == QProcess::ProcessState::Running || state == QProcess::ProcessState::Starting) { this->errorMsg = "Can't start Tor, already running or starting"; @@ -101,10 +109,6 @@ void Tor::start() { m_process.start(this->torPath, arguments); } -void Tor::stop() { - m_process.terminate(); -} - void Tor::checkConnection() { // We might not be able to connect to localhost if torsocks is used to start feather if (m_ctx->isTorSocks)