mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-22 07:49:56 -05:00
Merge branch 'v0.6-TorControl' of github.com:csoler/RetroShare into v0.6-TorControl
This commit is contained in:
commit
1e8e489cd1
@ -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));
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -68,6 +68,7 @@ public:
|
||||
};
|
||||
|
||||
explicit TorControl();
|
||||
virtual ~TorControl();
|
||||
|
||||
/* Information */
|
||||
Status status() const;
|
||||
@ -148,5 +149,3 @@ private:
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
extern Tor::TorControl *torControl;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -51,6 +51,7 @@ class TorManager : public HiddenServiceClient, public RsThread, public RsTor
|
||||
{
|
||||
public:
|
||||
static TorManager *instance();
|
||||
virtual ~TorManager();
|
||||
|
||||
TorProcess *process();
|
||||
TorControl *control();
|
||||
|
@ -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;
|
||||
|
@ -15,6 +15,7 @@ class TorControlDialog: public QWidget, public Ui::TorControlDialog
|
||||
|
||||
public:
|
||||
TorControlDialog(QWidget *parent =NULL);
|
||||
virtual ~TorControlDialog();
|
||||
|
||||
enum TorStatus {
|
||||
TOR_STATUS_UNKNOWN = 0x00,
|
||||
|
@ -591,6 +591,10 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO);
|
||||
RsGxsUpdateBroadcast::cleanup();
|
||||
#endif
|
||||
|
||||
if (is_auto_tor) {
|
||||
RsTor::stop();
|
||||
}
|
||||
|
||||
RsControl::instance()->rsGlobalShutDown();
|
||||
|
||||
delete(soundManager);
|
||||
|
Loading…
x
Reference in New Issue
Block a user