Merge branch 'v0.6-TorControl' of github.com:csoler/RetroShare into v0.6-TorControl

This commit is contained in:
csoler 2021-12-30 19:51:53 +01:00
commit 1e8e489cd1
9 changed files with 49 additions and 8 deletions

View File

@ -84,7 +84,7 @@ RsThreadedTcpSocket::RsThreadedTcpSocket() : RsTcpSocket()
}
void RsThreadedTcpSocket::run()
{
while(connectionState() == CONNECTED)
while(!shouldStop() && connectionState() == CONNECTED)
{
tick();
std::this_thread::sleep_for(std::chrono::milliseconds(200));

View File

@ -141,6 +141,12 @@ public:
*/
static bool start();
/*!
* \brief stop
* Stop the Tor management threads.
*/
static void stop();
/*!
* \brief getHiddenServiceInfo
* Gets information about the hidden service setup by RS to run.

View File

@ -46,8 +46,6 @@
#include "StrUtil.h"
#include "PendingOperation.h"
Tor::TorControl *torControl = 0;
class nullstream: public std::ostream {};
static std::ostream& torctrldebug()
@ -70,6 +68,11 @@ TorControl::TorControl()
mSocket = new TorControlSocket(this);
}
TorControl::~TorControl()
{
delete(mSocket);
}
static RsTorConnectivityStatus torConnectivityStatus(Tor::TorControl::Status t)
{
switch(t)

View File

@ -68,6 +68,7 @@ public:
};
explicit TorControl();
virtual ~TorControl();
/* Information */
Status status() const;
@ -148,5 +149,3 @@ private:
};
}
extern Tor::TorControl *torControl;

View File

@ -53,6 +53,8 @@
using namespace Tor;
static TorManager *rsTor = nullptr;
namespace Tor
{
@ -71,6 +73,7 @@ public:
HiddenService *hiddenService ;
explicit TorManagerPrivate(TorManager *parent = 0);
virtual ~TorManagerPrivate();
std::string torExecutablePath() const;
bool createDataDir(const std::string &path);
@ -94,6 +97,11 @@ TorManager::TorManager()
{
}
TorManager::~TorManager()
{
delete(d);
}
TorManagerPrivate::TorManagerPrivate(TorManager *parent)
: q(parent)
, process(0)
@ -104,6 +112,11 @@ TorManagerPrivate::TorManagerPrivate(TorManager *parent)
control->set_statusChanged_callback([this](int new_status,int /*old_status*/) { controlStatusChanged(new_status); });
}
TorManagerPrivate::~TorManagerPrivate()
{
delete(control);
}
TorManager *TorManager::instance()
{
static TorManager *p = 0;
@ -450,7 +463,7 @@ void TorManager::run()
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
d->control->shutdown();
d->control->shutdownSync();
d->process->stop();
if(rsEvents)
@ -828,6 +841,17 @@ bool RsTor::start()
return instance()->startTorManager();
}
void RsTor::stop()
{
if (rsTor) {
if (rsTor->isRunning()) {
rsTor->fullstop();
}
delete(rsTor);
rsTor= nullptr;
}
}
void RsTor::setTorDataDirectory(const std::string& dir)
{
instance()->setTorDataDirectory(dir);
@ -843,8 +867,6 @@ TorManager *RsTor::instance()
assert(getpid() == syscall(SYS_gettid));// make sure we're not in a thread
#endif
static TorManager *rsTor = nullptr;
if(rsTor == nullptr)
rsTor = new TorManager;

View File

@ -51,6 +51,7 @@ class TorManager : public HiddenServiceClient, public RsThread, public RsTor
{
public:
static TorManager *instance();
virtual ~TorManager();
TorProcess *process();
TorControl *control();

View File

@ -42,6 +42,11 @@ TorControlDialog::TorControlDialog(QWidget *)
adjustSize();
}
TorControlDialog::~TorControlDialog()
{
rsEvents->unregisterEventsHandler(mEventHandlerId);
}
void TorControlDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> event)
{
if(event->mType != RsEventType::TOR_MANAGER) return;

View File

@ -15,6 +15,7 @@ class TorControlDialog: public QWidget, public Ui::TorControlDialog
public:
TorControlDialog(QWidget *parent =NULL);
virtual ~TorControlDialog();
enum TorStatus {
TOR_STATUS_UNKNOWN = 0x00,

View File

@ -591,6 +591,10 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO);
RsGxsUpdateBroadcast::cleanup();
#endif
if (is_auto_tor) {
RsTor::stop();
}
RsControl::instance()->rsGlobalShutDown();
delete(soundManager);