fixed a few errors in TorManager event handling

This commit is contained in:
csoler 2021-12-30 22:14:34 +01:00
parent 1e8e489cd1
commit 281076d6b7
6 changed files with 43 additions and 23 deletions

View file

@ -107,7 +107,7 @@ enum class RsEventType : uint32_t
FILE_HASHING_COMPLETED = 20, FILE_HASHING_COMPLETED = 20,
/// @see rspeers.h /// @see rspeers.h
TOR_MANAGER = 17, TOR_MANAGER = 21,
__MAX /// Used internally, keep last __MAX /// Used internally, keep last
}; };

View file

@ -56,10 +56,11 @@ enum class RsTorConnectivityStatus: uint8_t {
ERROR = 0x00, ERROR = 0x00,
NOT_CONNECTED = 0x01, NOT_CONNECTED = 0x01,
CONNECTING = 0x02, CONNECTING = 0x02,
AUTHENTICATING = 0x03, SOCKET_CONNECTED = 0x03,
AUTHENTICATED = 0x04, AUTHENTICATING = 0x04,
HIDDEN_SERVICE_READY = 0x05, AUTHENTICATED = 0x05,
UNKNOWN = 0x06 HIDDEN_SERVICE_READY = 0x06,
UNKNOWN = 0x07
}; };
// Status of the Tor service with which RS is talking. // Status of the Tor service with which RS is talking.

View file

@ -81,8 +81,11 @@ static RsTorConnectivityStatus torConnectivityStatus(Tor::TorControl::Status t)
case TorControl::Error: return RsTorConnectivityStatus::ERROR; case TorControl::Error: return RsTorConnectivityStatus::ERROR;
case TorControl::NotConnected: return RsTorConnectivityStatus::NOT_CONNECTED; case TorControl::NotConnected: return RsTorConnectivityStatus::NOT_CONNECTED;
case TorControl::Connecting: return RsTorConnectivityStatus::CONNECTING; case TorControl::Connecting: return RsTorConnectivityStatus::CONNECTING;
case TorControl::SocketConnected: return RsTorConnectivityStatus::SOCKET_CONNECTED;
case TorControl::Authenticating: return RsTorConnectivityStatus::AUTHENTICATING; case TorControl::Authenticating: return RsTorConnectivityStatus::AUTHENTICATING;
case TorControl::Authenticated: return RsTorConnectivityStatus::AUTHENTICATED; case TorControl::Authenticated: return RsTorConnectivityStatus::AUTHENTICATED;
case TorControl::HiddenServiceReady: return RsTorConnectivityStatus::HIDDEN_SERVICE_READY;
case TorControl::Unknown: return RsTorConnectivityStatus::UNKNOWN;
} }
} }
static RsTorStatus torStatus(Tor::TorControl::TorStatus t) static RsTorStatus torStatus(Tor::TorControl::TorStatus t)
@ -107,6 +110,8 @@ void TorControl::setStatus(TorControl::Status n)
if (old == TorControl::Error) if (old == TorControl::Error)
mErrorMessage.clear(); mErrorMessage.clear();
std::cerr << "Setting status to s=" << mStatus << " val=" << (int)torConnectivityStatus(mStatus) << std::endl;
if(rsEvents) if(rsEvents)
{ {
auto ev = std::make_shared<RsTorManagerEvent>(); auto ev = std::make_shared<RsTorManagerEvent>();
@ -133,8 +138,9 @@ void TorControl::setTorStatus(TorControl::TorStatus n)
auto ev = std::make_shared<RsTorManagerEvent>(); auto ev = std::make_shared<RsTorManagerEvent>();
ev->mTorManagerEventType = RsTorManagerEventCode::TOR_STATUS_CHANGED; ev->mTorManagerEventType = RsTorManagerEventCode::TOR_STATUS_CHANGED;
ev->mTorConnectivityStatus = torConnectivityStatus(mStatus);
ev->mTorStatus = ::torStatus(mTorStatus); ev->mTorStatus = ::torStatus(mTorStatus);
ev->mTorConnectivityStatus = torConnectivityStatus(mStatus);
rsEvents->sendEvent(ev); rsEvents->sendEvent(ev);
} }
} }

View file

@ -51,13 +51,14 @@ class TorControl : public TorControlSocketClient
public: public:
enum Status enum Status
{ {
Error = -1, Error = 0x00,
NotConnected = 0x00, NotConnected = 0x01,
Connecting = 0x01, Connecting = 0x02,
SocketConnected = 0x02, SocketConnected = 0x03,
Authenticating = 0x03, Authenticating = 0x04,
Authenticated = 0x04, Authenticated = 0x05,
HiddenServiceReady = 0x05 HiddenServiceReady = 0x06,
Unknown = 0x07
}; };
enum TorStatus enum TorStatus

View file

@ -239,8 +239,6 @@ bool TorManager::setupHiddenService()
assert(d->hiddenService); assert(d->hiddenService);
// connect(d->hiddenService, SIGNAL(statusChanged(int,int)), this, SLOT(hiddenServiceStatusChanged(int,int)));
// Generally, these are not used, and we bind to localhost and port 0 // Generally, these are not used, and we bind to localhost and port 0
// for an automatic (and portable) selection. // for an automatic (and portable) selection.
@ -258,6 +256,9 @@ bool TorManager::setupHiddenService()
std::cerr << ": OK - Adding hidden service to TorControl." << std::endl; std::cerr << ": OK - Adding hidden service to TorControl." << std::endl;
// Note: 9878 is quite arbitrary, but since each RS node generates its own hidden service, all of them
// can use the same port without any conflict.
d->hiddenService->addTarget(9878, "127.0.0.1",hidden_service_port); d->hiddenService->addTarget(9878, "127.0.0.1",hidden_service_port);
control()->addHiddenService(d->hiddenService); control()->addHiddenService(d->hiddenService);
@ -483,6 +484,7 @@ void TorManager::threadTick()
switch(d->control->status()) switch(d->control->status())
{ {
case TorControl::Unknown:
case TorControl::Connecting: case TorControl::Connecting:
break; break;
@ -618,12 +620,13 @@ void TorManagerPrivate::getConfFinished(TorControlCommand *sender)
if(RsUtil::StringToInt(str,n) && n==1 && !configNeeded) if(RsUtil::StringToInt(str,n) && n==1 && !configNeeded)
{ {
configNeeded = true; configNeeded = true;
//emit q->configurationNeededChanged();
if(rsEvents) if(rsEvents)
{ {
auto ev = std::make_shared<RsTorManagerEvent>(); auto ev = std::make_shared<RsTorManagerEvent>();
ev->mTorManagerEventType = RsTorManagerEventCode::CONFIGURATION_NEEDED; ev->mTorManagerEventType = RsTorManagerEventCode::CONFIGURATION_NEEDED;
ev->mTorConnectivityStatus = RsTorConnectivityStatus::UNKNOWN;
ev->mTorStatus = RsTorStatus::UNKNOWN;
rsEvents->sendEvent(ev); rsEvents->sendEvent(ev);
} }
} }

View file

@ -55,7 +55,13 @@ void TorControlDialog::handleEvent_main_thread(std::shared_ptr<const RsEvent> ev
if(!fe) if(!fe)
return; return;
statusChanged(fe->mTorStatus,fe->mTorConnectivityStatus); switch(fe->mTorManagerEventType)
{
case RsTorManagerEventCode::TOR_STATUS_CHANGED:
case RsTorManagerEventCode::TOR_CONNECTIVITY_CHANGED: statusChanged(fe->mTorStatus,fe->mTorConnectivityStatus);
break;
default: ;
}
} }
void TorControlDialog::onIncomingConnection() void TorControlDialog::onIncomingConnection()
@ -73,11 +79,14 @@ void TorControlDialog::statusChanged(RsTorStatus torstatus, RsTorConnectivitySta
switch(tor_control_status) switch(tor_control_status)
{ {
default: default:
case RsTorConnectivityStatus::ERROR : tor_control_status_str = tr("Error") ; break ; case RsTorConnectivityStatus::ERROR: tor_control_status_str = tr("Error") ; break ;
case RsTorConnectivityStatus::NOT_CONNECTED: tor_control_status_str = tr("Not connected") ; break ; case RsTorConnectivityStatus::NOT_CONNECTED: tor_control_status_str = tr("Not connected") ; break ;
case RsTorConnectivityStatus::CONNECTING: tor_control_status_str = tr("Connecting") ; break ; case RsTorConnectivityStatus::CONNECTING: tor_control_status_str = tr("Connecting") ; break ;
case RsTorConnectivityStatus::SOCKET_CONNECTED: tor_control_status_str = tr("Socket connected") ; break ;
case RsTorConnectivityStatus::AUTHENTICATING: tor_control_status_str = tr("Authenticating") ; break ; case RsTorConnectivityStatus::AUTHENTICATING: tor_control_status_str = tr("Authenticating") ; break ;
case RsTorConnectivityStatus::AUTHENTICATED: tor_control_status_str = tr("Authenticated") ; break ; case RsTorConnectivityStatus::AUTHENTICATED: tor_control_status_str = tr("Authenticated") ; break ;
case RsTorConnectivityStatus::HIDDEN_SERVICE_READY: tor_control_status_str = tr("Hidden service ready") ; break ;
case RsTorConnectivityStatus::UNKNOWN: tor_control_status_str = tr("Unknown") ; break ;
} }
switch(torstatus) switch(torstatus)