mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-07-24 07:00:57 -04:00
attempt at fixing tor bootstrap. Not working yet
This commit is contained in:
parent
139b22b41a
commit
da86da29ff
5 changed files with 94 additions and 4 deletions
|
@ -159,6 +159,7 @@ public:
|
|||
ERR_ALREADY_RUNNING, /// Another istance is running already
|
||||
ERR_CANT_ACQUIRE_LOCK, /// Another istance is already running?
|
||||
ERR_NO_AVAILABLE_ACCOUNT, /// Used in retroshare-service -U list when no account is available
|
||||
ERR_CANNOT_CONFIGURE_TOR, /// cannot start/configure Tor for an auto-tor node
|
||||
ERR_UNKNOWN /// Unkown error, maybe password is wrong?
|
||||
};
|
||||
|
||||
|
@ -184,6 +185,7 @@ public:
|
|||
static bool isPortable();
|
||||
static bool isWindowsXP();
|
||||
static bool collectEntropy(uint32_t bytes) ;
|
||||
static bool startAutoTor();
|
||||
|
||||
/*!
|
||||
* \brief lockFilePath
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include "util/folderiterator.h"
|
||||
#include "util/rsstring.h"
|
||||
#include "retroshare/rsinit.h"
|
||||
#include "retroshare/rstor.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
#include "retroshare/rsiface.h"
|
||||
#include "plugins/pluginmanager.h"
|
||||
|
@ -1923,6 +1924,46 @@ int RsServer::StartupRetroShare()
|
|||
return 1;
|
||||
}
|
||||
|
||||
bool RsInit::startAutoTor()
|
||||
{
|
||||
std::cerr << "(II) node is an automated Tor node => launching Tor auto-configuration." << std::endl;
|
||||
// Now that we know the Tor service running, and we know the SSL id, we can make sure it provides a viable hidden service
|
||||
|
||||
std::string tor_hidden_service_dir = RsAccounts::AccountDirectory() + "/hidden_service/" ;
|
||||
|
||||
RsTor::setTorDataDirectory(RsAccounts::ConfigDirectory() + "/tor/");
|
||||
RsTor::setHiddenServiceDirectory(tor_hidden_service_dir); // re-set it, because now it's changed to the specific location that is run
|
||||
|
||||
RsDirUtil::checkCreateDirectory(std::string(tor_hidden_service_dir)) ;
|
||||
|
||||
if(! RsTor::start() || RsTor::hasError())
|
||||
{
|
||||
std::cerr << "(EE) Tor cannot be started on your system: "+RsTor::errorMessage() << std::endl ;
|
||||
return false ;
|
||||
}
|
||||
std::cerr << "(II) Tor has been started." << std::endl;
|
||||
|
||||
// now start/create the hidden service as needed.
|
||||
|
||||
std::string service_id;
|
||||
RsTor::setupHiddenService();
|
||||
|
||||
while(RsTor::torStatus() != RsTorStatus::READY && RsTor::getHiddenServiceStatus(service_id) != RsTorHiddenServiceStatus::ONLINE) // runs until some status is reached: either tor works, or it fails.
|
||||
{
|
||||
rstime::rs_usleep(0.5*1000*1000) ;
|
||||
|
||||
std::cerr << "(II) Hidden service ID: " << service_id << ", status: " << (int)RsTor::getHiddenServiceStatus(service_id) << std::endl;
|
||||
if(RsTor::hasError())
|
||||
{
|
||||
std::string error_msg = RsTor::errorMessage();
|
||||
|
||||
std::cerr << "(EE) Tor hidden service cannot be started: " << error_msg << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
RsInit::LoadCertificateStatus RsLoginHelper::attemptLogin(const RsPeerId& account, const std::string& password)
|
||||
{
|
||||
if(isLoggedIn()) return RsInit::ERR_ALREADY_RUNNING;
|
||||
|
@ -1942,6 +1983,16 @@ RsInit::LoadCertificateStatus RsLoginHelper::attemptLogin(const RsPeerId& accoun
|
|||
rsNotify->setDisableAskPassword(false) ;
|
||||
rsNotify->clearPgpPassphrase() ;
|
||||
|
||||
bool is_hidden_node = false;
|
||||
bool is_auto_tor = false ;
|
||||
bool is_first_time = false ;
|
||||
|
||||
RsAccounts::getCurrentAccountOptions(is_hidden_node,is_auto_tor,is_first_time);
|
||||
|
||||
if(is_auto_tor)
|
||||
if(!RsInit::startAutoTor())
|
||||
return RsInit::ERR_CANNOT_CONFIGURE_TOR;
|
||||
|
||||
if(ret == RsInit::OK && RsControl::instance()->StartupRetroShare() == 1)
|
||||
return RsInit::OK;
|
||||
|
||||
|
|
|
@ -604,14 +604,14 @@ RsTorHiddenServiceStatus RsTor::getHiddenServiceStatus(std::string& service_id)
|
|||
auto list = instance()->control()->hiddenServices();
|
||||
|
||||
if(list.empty())
|
||||
return RsTorHiddenServiceStatus::NOT_CREATRED;
|
||||
return RsTorHiddenServiceStatus::NOT_CREATED;
|
||||
|
||||
service_id = (*list.begin())->serviceId().toStdString();
|
||||
|
||||
switch((*list.begin())->status())
|
||||
{
|
||||
default:
|
||||
case Tor::HiddenService::NotCreated: return RsTorHiddenServiceStatus::NOT_CREATRED;
|
||||
case Tor::HiddenService::NotCreated: return RsTorHiddenServiceStatus::NOT_CREATED;
|
||||
case Tor::HiddenService::Offline : return RsTorHiddenServiceStatus::OFFLINE;
|
||||
case Tor::HiddenService::Online : return RsTorHiddenServiceStatus::ONLINE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue