commit aa75d978cf5f442acc1221b58320191c50affafd Author: Tomás Touceda chiiph@torproject.org Date: Tue Mar 6 15:54:28 2012 -0300
Handle bootstrap like before and display what tor says if unknown
This way we can partially translate the descriptions --- src/torcontrol/BootstrapStatus.cpp | 39 ++++++++++++++++++++++++++++++++--- src/torcontrol/BootstrapStatus.h | 25 ++++++++++++++++++++-- src/torcontrol/TorControl.cpp | 4 +- src/torcontrol/TorEvents.cpp | 2 +- src/vidalia/MainWindow.cpp | 38 ++++++++++++++++++++++++++++++++++- 5 files changed, 97 insertions(+), 11 deletions(-)
diff --git a/src/torcontrol/BootstrapStatus.cpp b/src/torcontrol/BootstrapStatus.cpp index f4e38b8..fb79eb9 100644 --- a/src/torcontrol/BootstrapStatus.cpp +++ b/src/torcontrol/BootstrapStatus.cpp @@ -20,14 +20,13 @@ BootstrapStatus::BootstrapStatus() { _severity = tc::UnrecognizedSeverity; _reason = tc::UnrecognizedReason; - _status = QString(); + _status = UnrecognizedStatus; _action = UnrecognizedRecommendation; _percentComplete = -1; }
/** Constructor. */ -BootstrapStatus::BootstrapStatus(tc::Severity severity, - const QString &status, +BootstrapStatus::BootstrapStatus(tc::Severity severity, Status status, int percentComplete, const QString &description, const QString &warning, @@ -43,6 +42,37 @@ BootstrapStatus::BootstrapStatus(tc::Severity severity, _action = action; }
+/** Converts a string TAG value to a BootstrapStatus enum value. */ +BootstrapStatus::Status +BootstrapStatus::statusFromString(const QString &str) +{ + if (!str.compare("CONN_DIR", Qt::CaseInsensitive)) + return ConnectingToDirMirror; + if (!str.compare("HANDSHAKE_DIR", Qt::CaseInsensitive)) + return HandshakingWithDirMirror; + if (!str.compare("ONEHOP_CREATE", Qt::CaseInsensitive)) + return CreatingOneHopCircuit; + if (!str.compare("REQUESTING_STATUS", Qt::CaseInsensitive)) + return RequestingNetworkStatus; + if (!str.compare("LOADING_STATUS", Qt::CaseInsensitive)) + return LoadingNetworkStatus; + if (!str.compare("LOADING_KEYS", Qt::CaseInsensitive)) + return LoadingAuthorityCertificates; + if (!str.compare("REQUESTING_DESCRIPTORS", Qt::CaseInsensitive)) + return RequestingDescriptors; + if (!str.compare("LOADING_DESCRIPTORS", Qt::CaseInsensitive)) + return LoadingDescriptors; + if (!str.compare("CONN_OR", Qt::CaseInsensitive)) + return ConnectingToEntryGuard; + if (!str.compare("HANDSHAKE_OR", Qt::CaseInsensitive)) + return HandshakingWithEntryGuard; + if (!str.compare("CIRCUIT_CREATE", Qt::CaseInsensitive)) + return EstablishingCircuit; + if (!str.compare("DONE", Qt::CaseInsensitive)) + return BootstrappingDone; + return UnrecognizedStatus; +} + /** Returns the action that the Tor software recommended be taken in response * to this bootstrap status. */ BootstrapStatus::Recommendation @@ -60,6 +90,7 @@ bool BootstrapStatus::isValid() const { return (_severity != tc::UnrecognizedSeverity - && _percentComplete >= 0); + && _status != UnrecognizedStatus + && _percentComplete >= 0); }
diff --git a/src/torcontrol/BootstrapStatus.h b/src/torcontrol/BootstrapStatus.h index a2e3297..7526fdb 100644 --- a/src/torcontrol/BootstrapStatus.h +++ b/src/torcontrol/BootstrapStatus.h @@ -25,6 +25,23 @@ class BootstrapStatus { public: + /** Currently enumerated bootstrapping states defined by Tor's control + * protocol (Tor >= 0.2.1.0-alpha-dev. */ + enum Status { + UnrecognizedStatus, + ConnectingToDirMirror, + HandshakingWithDirMirror, + CreatingOneHopCircuit, + RequestingNetworkStatus, + LoadingNetworkStatus, + LoadingAuthorityCertificates, + RequestingDescriptors, + LoadingDescriptors, + ConnectingToEntryGuard, + HandshakingWithEntryGuard, + EstablishingCircuit, + BootstrappingDone + }; /** Actions the Tor software might recommend controllers take in response to * a bootstrap status problem event. */ enum Recommendation { @@ -38,7 +55,7 @@ public:
/** Constructor. */ BootstrapStatus(tc::Severity severity, - const QString &status, int percentComplete, + Status status, int percentComplete, const QString &description, const QString &warning = QString(), tc::ConnectionStatusReason reason = tc::UnrecognizedReason, @@ -49,7 +66,7 @@ public:
/** Returns the BootstrapStatus enum value indicated by this bootstrap * status event. */ - QString status() const { return _status; } + Status status() const { return _status; }
/** Returns an integer between 0 and 100 representing an estimate of how * much of Tor's bootstrapping process it has completed. */ @@ -77,6 +94,8 @@ public: * phase. */ bool isValid() const;
+ /** Converts a string TAG value to a BootstrapStatus enum value. */ + static Status statusFromString(const QString &tag); /** Converts a string RECOMMENDATION value to a RecommendAction enum * value. */ static Recommendation actionFromString(const QString &str); @@ -90,7 +109,7 @@ private: /** Current bootstrapping status value. * \sa status */ - QString _status; + Status _status;
/** Approximate percentage of Tor's bootstrapping process that is complete. * \sa percentComplete diff --git a/src/torcontrol/TorControl.cpp b/src/torcontrol/TorControl.cpp index dc4bf1d..9cdf6ad 100644 --- a/src/torcontrol/TorControl.cpp +++ b/src/torcontrol/TorControl.cpp @@ -238,7 +238,7 @@ TorControl::getBootstrapPhase() tc::Severity severity = tc::severityFromString(args.value("status/bootstrap-phase")); BootstrapStatus status = BootstrapStatus(severity, - args.value("TAG"), + BootstrapStatus::statusFromString(args.value("TAG")), args.value("PROGRESS").toInt(), args.value("SUMMARY")); emit bootstrapStatusChanged(status); @@ -411,7 +411,7 @@ TorControl::bootstrapStatus(QString *errmsg) tc::Severity severity = tc::severityFromString(str.section(' ', 0, 0)); QHash<QString,QString> args = string_parse_keyvals(str); return BootstrapStatus(severity, - args.value("TAG"), + BootstrapStatus::statusFromString(args.value("TAG")), args.value("PROGRESS").toInt(), args.value("SUMMARY"), args.value("WARNING"), diff --git a/src/torcontrol/TorEvents.cpp b/src/torcontrol/TorEvents.cpp index f068f1a..588a093 100644 --- a/src/torcontrol/TorEvents.cpp +++ b/src/torcontrol/TorEvents.cpp @@ -368,7 +368,7 @@ TorEvents::handleClientStatusEvent(tc::Severity severity, } else if (! action.compare("BOOTSTRAP", Qt::CaseInsensitive)) { BootstrapStatus status = BootstrapStatus(severity, - args.value("TAG"), + BootstrapStatus::statusFromString(args.value("TAG")), args.value("PROGRESS").toInt(), args.value("SUMMARY"), args.value("WARNING"), diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp index 732ca26..aad830e 100644 --- a/src/vidalia/MainWindow.cpp +++ b/src/vidalia/MainWindow.cpp @@ -1097,7 +1097,43 @@ MainWindow::bootstrapStatusChanged(const BootstrapStatus &bs) bs.recommendedAction() != BootstrapStatus::RecommendIgnore);
QString description; - description = bs.description(); + switch (bs.status()) { + case BootstrapStatus::ConnectingToDirMirror: + description = tr("Connecting to a relay directory"); + break; + case BootstrapStatus::HandshakingWithDirMirror: + case BootstrapStatus::CreatingOneHopCircuit: + description = tr("Establishing an encrypted directory connection"); + break; + case BootstrapStatus::RequestingNetworkStatus: + description = tr("Retrieving network status"); + break; + case BootstrapStatus::LoadingNetworkStatus: + description = tr("Loading network status"); + break; + case BootstrapStatus::LoadingAuthorityCertificates: + description = tr("Loading authority certificates"); + break; + case BootstrapStatus::RequestingDescriptors: + description = tr("Requesting relay information"); + break; + case BootstrapStatus::LoadingDescriptors: + description = tr("Loading relay information"); + break; + case BootstrapStatus::ConnectingToEntryGuard: + description = tr("Connecting to the Tor network"); + break; + case BootstrapStatus::HandshakingWithEntryGuard: + case BootstrapStatus::EstablishingCircuit: + description = tr("Establishing a Tor circuit"); + break; + case BootstrapStatus::BootstrappingDone: + description = tr("Connected to the Tor network!"); + warn = false; /* probably false anyway */ + break; + default: + description = description = bs.description(); + } if (warn) { QString reason; /* Is it really a good idea to translate these? */