From f5ce711ad6bda88de9c5412b95b6196673c04ee7 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 21 Dec 2017 21:34:51 +0100 Subject: [PATCH] only load hidden nodes in retro-only mode --- libretroshare/src/libretroshare.pro | 3 ++ libretroshare/src/rsserver/rsaccounts.cc | 12 +++-- libretroshare/src/rsserver/rsaccounts.h | 4 +- retroshare-gui/src/TorControl/TorManager.cpp | 1 + retroshare-gui/src/main.cpp | 55 +++++++++++--------- 5 files changed, 46 insertions(+), 29 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 1521f5574..e58d01eef 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -10,6 +10,9 @@ DESTDIR = lib #CONFIG += dsdv +retrotor { + DEFINES *= RETROTOR +} # the dht stunner is used to obtain RS' external ip addr. when it is natted # this system is unreliable and rs supports a newer and better one (asking connected peers) # CONFIG += useDhtStunner diff --git a/libretroshare/src/rsserver/rsaccounts.cc b/libretroshare/src/rsserver/rsaccounts.cc index 45983b5c3..6136a2a87 100644 --- a/libretroshare/src/rsserver/rsaccounts.cc +++ b/libretroshare/src/rsserver/rsaccounts.cc @@ -71,8 +71,11 @@ RsAccountsDetail::RsAccountsDetail() : mAccountsLocked(false), mPreferredId("") bool RsAccountsDetail::loadAccounts() { int failing_accounts ; - - getAvailableAccounts(mAccounts,failing_accounts,mUnsupportedKeys); +#ifdef RETROTOR + getAvailableAccounts(mAccounts,failing_accounts,mUnsupportedKeys,true); +#else + getAvailableAccounts(mAccounts,failing_accounts,mUnsupportedKeys,false); +#endif loadPreferredAccount(); checkPreferredId(); @@ -512,7 +515,7 @@ bool RsAccountsDetail::getAccountOptions(bool &ishidden, bool &isFirstTimeRun) /* directories with valid certificates in the expected location */ -bool RsAccountsDetail::getAvailableAccounts(std::map &accounts,int& failing_accounts,std::map >& unsupported_keys) +bool RsAccountsDetail::getAvailableAccounts(std::map &accounts,int& failing_accounts,std::map >& unsupported_keys,bool hidden_only) { failing_accounts = 0 ; /* get the directories */ @@ -615,6 +618,9 @@ bool RsAccountsDetail::getAvailableAccounts(std::map & continue; } + if(hidden_only && !hidden_location) + continue ; + if(valid_prefix && isHexaString(lochex) && (lochex).length() == 32) { std::string accountdir = mBaseDirectory + "/" + *it; diff --git a/libretroshare/src/rsserver/rsaccounts.h b/libretroshare/src/rsserver/rsaccounts.h index 5832dfa00..8ff253587 100644 --- a/libretroshare/src/rsserver/rsaccounts.h +++ b/libretroshare/src/rsserver/rsaccounts.h @@ -142,9 +142,9 @@ class RsAccountsDetail static bool defaultBaseDirectory(); - bool getAvailableAccounts(std::map &accounts, + bool getAvailableAccounts(std::map &accounts, int& failing_accounts, - std::map >& unsupported_keys); + std::map >& unsupported_keys, bool hidden_only=false); bool setupAccount(const std::string& accountdir); diff --git a/retroshare-gui/src/TorControl/TorManager.cpp b/retroshare-gui/src/TorControl/TorManager.cpp index 3b0c2d77f..47fef939d 100644 --- a/retroshare-gui/src/TorControl/TorManager.cpp +++ b/retroshare-gui/src/TorControl/TorManager.cpp @@ -118,6 +118,7 @@ QString TorManager::dataDirectory() const void TorManager::setDataDirectory(const QString &path) { d->dataDir = QDir::fromNativeSeparators(path); + if (!d->dataDir.isEmpty() && !d->dataDir.endsWith(QLatin1Char('/'))) d->dataDir.append(QLatin1Char('/')); } diff --git a/retroshare-gui/src/main.cpp b/retroshare-gui/src/main.cpp index 13f90ed93..3357bd688 100644 --- a/retroshare-gui/src/main.cpp +++ b/retroshare-gui/src/main.cpp @@ -289,21 +289,25 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); torManager->setDataDirectory(Rshare::dataDirectory() + QString("/tor/")); torManager->start(); - TorControlDialog tcd(torManager) ; - tcd.show(); + // We do not need to show this dialog. If too much of a pain, we may hide it and only show when it reports an error. - while(tcd.checkForTor() == TorControlDialog::TOR_STATUS_UNKNOWN) // runs until some status is reached: either tor works, or it fails. { - QCoreApplication::processEvents(); - usleep(1000) ; - } + TorControlDialog tcd(torManager) ; + tcd.show(); - tcd.hide(); + while(tcd.checkForTor() == TorControlDialog::TOR_STATUS_UNKNOWN) // runs until some status is reached: either tor works, or it fails. + { + QCoreApplication::processEvents(); + usleep(1000) ; + } - if(tcd.checkForTor() != TorControlDialog::TOR_STATUS_OK) - { - QMessageBox::critical(NULL,QObject::tr("Tor not found!"),QObject::tr("Tor wasn't found on your system. Please install it and re-start Retroshare.")) ; - return 1 ; + tcd.hide(); + + if(tcd.checkForTor() != TorControlDialog::TOR_STATUS_OK) + { + QMessageBox::critical(NULL,QObject::tr("Tor not found!"),QObject::tr("Tor wasn't found on your system. Please install it and re-start Retroshare.")) ; + return 1 ; + } } #endif @@ -374,22 +378,25 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); #ifdef RETROTOR // Now that we know the Tor service running, and we know the SSL id, we can make sure it provides a viable hidden service - /* Tor control manager */ - - tcd.show(); - - while(tcd.checkForHiddenService() == TorControlDialog::HIDDEN_SERVICE_STATUS_UNKNOWN) // runs until some status is reached: either tor works, or it fails. { - QCoreApplication::processEvents(); - usleep(1000) ; - } + torManager->setDataDirectory(Rshare::dataDirectory() + QString("/tor/")); // re-set it, because now it's changed to the specific location that is run - tcd.hide(); + TorControlDialog tcd(torManager) ; + tcd.show(); - if(tcd.checkForHiddenService() != TorControlDialog::HIDDEN_SERVICE_STATUS_OK) - { - QMessageBox::critical(NULL,QObject::tr("Cannot start a hidden tor service!"),QObject::tr("It was not possible to start a hidden service.")) ; - return 1 ; + while(tcd.checkForHiddenService() == TorControlDialog::HIDDEN_SERVICE_STATUS_UNKNOWN) // runs until some status is reached: either tor works, or it fails. + { + QCoreApplication::processEvents(); + usleep(1000) ; + } + + tcd.hide(); + + if(tcd.checkForHiddenService() != TorControlDialog::HIDDEN_SERVICE_STATUS_OK) + { + QMessageBox::critical(NULL,QObject::tr("Cannot start a hidden tor service!"),QObject::tr("It was not possible to start a hidden service.")) ; + return 1 ; + } } #endif