
commit fa3f968392247de08fbc99e3cc20107c38e25d9a Author: Tomás Touceda <chiiph@torproject.org> Date: Fri Feb 3 22:16:26 2012 -0300 Migrate TorSettings to the new structure --- src/vidalia/config/TorSettings.cpp | 131 ++++++++++++++++++++++-------------- src/vidalia/config/TorSettings.h | 2 +- 2 files changed, 81 insertions(+), 52 deletions(-) diff --git a/src/vidalia/config/TorSettings.cpp b/src/vidalia/config/TorSettings.cpp index 9fa5369..85164d0 100644 --- a/src/vidalia/config/TorSettings.cpp +++ b/src/vidalia/config/TorSettings.cpp @@ -29,8 +29,8 @@ /* Tor Settings */ #define SETTING_TOR_EXECUTABLE "TorExecutable" #define SETTING_TORRC "Torrc" -#define SETTING_CONTROL_ADDR "ControlAddr" #define SETTING_DEFAULTS_TORRC "DefaultsTorrc" +#define SETTING_CONTROL_ADDR "ControlListenAddress" #define SETTING_CONTROL_PORT "ControlPort" #define SETTING_SOCKET_PATH "ControlSocket" #define SETTING_CONTROL_METHOD "ControlMethod" @@ -61,6 +61,7 @@ #define TOR_ARG_HASHED_PASSWORD "HashedControlPassword" #define TOR_ARG_COOKIE_AUTH "CookieAuthentication" #define TOR_ARG_SOCKSPORT "SocksPort" +#define TOR_ARG_CONTROLFILE "ControlPortWriteToFile" /** Generate random control passwords of 16 characters */ #define PASSWORD_LEN 16 @@ -91,35 +92,51 @@ TorSettings::TorSettings(TorControl *torControl) setDefault(SETTING_DATA_DIRECTORY, ""); setDefault(SETTING_CONTROL_PASSWORD, ""); setDefault(SETTING_USE_RANDOM_PASSWORD, true); - setDefault(SETTING_WARN_PLAINTEXT_PORTS, QList<QVariant>() << 23 << 109 - << 110 << 143); - setDefault(SETTING_REJECT_PLAINTEXT_PORTS, QList<QVariant>()); setDefault(SETTING_BOOTSTRAP, false); setDefault(SETTING_BOOTSTRAP_FROM, ""); - setDefault(SETTING_AUTOCONTROL, true); + setDefault(SETTING_AUTOCONTROL, false); } /** Applies any changes to Tor's control port or authentication settings. */ bool TorSettings::apply(QString *errmsg) { - QHash<QString, QString> conf; - QString hashedPassword; - - conf.insert(SETTING_CONTROL_PORT, - localValue(SETTING_CONTROL_PORT).toString()); - - if(localValue(SETTING_AUTOCONTROL).toBool()) - conf.insert(TOR_ARG_SOCKSPORT, "auto"); - else - conf.insert(TOR_ARG_SOCKSPORT, "9050"); + Torrc *torrc = Vidalia::torrc(); + torrc->setValue(SETTING_CONTROL_PORT, + QString::number(volatileValue(SETTING_CONTROL_PORT).toInt())); + + torrc->clear(QStringList() + << TOR_ARG_SOCKSPORT + << SETTING_CONTROL_PORT); + + torrc->setValue(SETTING_DATA_DIRECTORY, volatileValue(SETTING_DATA_DIRECTORY).toString()); + + if(volatileValue(SETTING_AUTOCONTROL).toBool()) { + torrc->setValue(SETTING_CONTROL_PORT, "auto"); + torrc->setValue(TOR_ARG_SOCKSPORT, "auto"); + torrc->setValue(TOR_ARG_CONTROLFILE, QString("%1/port.conf").arg(getDataDirectory())); + } else { + QString socks = "9050", control = "9051"; + { + with_torrc_value(TOR_ARG_SOCKSPORT) + socks = ret.at(0); + } + { + with_torrc_value(TOR_ARG_SOCKSPORT) + control = ret.at(0); + } + torrc->setValue(TOR_ARG_SOCKSPORT, socks); + torrc->setValue(SETTING_CONTROL_PORT, control); + } + + QString hashedPassword; AuthenticationMethod authMethod = toAuthenticationMethod(localValue(SETTING_AUTH_METHOD).toString()); switch (authMethod) { case CookieAuth: - conf.insert(TOR_ARG_COOKIE_AUTH, "1"); - conf.insert(TOR_ARG_HASHED_PASSWORD, ""); + torrc->setValue(TOR_ARG_COOKIE_AUTH, "1"); + torrc->setValue(TOR_ARG_HASHED_PASSWORD, ""); break; case PasswordAuth: hashedPassword = useRandomPassword() @@ -130,34 +147,33 @@ TorSettings::apply(QString *errmsg) *errmsg = tr("Failed to hash the control password."); return false; } - conf.insert(TOR_ARG_COOKIE_AUTH, "0"); - conf.insert(TOR_ARG_HASHED_PASSWORD, hashedPassword); + torrc->setValue(TOR_ARG_COOKIE_AUTH, "0"); + if(not useRandomPassword()) + torrc->setValue(TOR_ARG_HASHED_PASSWORD, hashedPassword); break; default: - conf.insert(TOR_ARG_COOKIE_AUTH, "0"); - conf.insert(TOR_ARG_HASHED_PASSWORD, ""); + torrc->setValue(TOR_ARG_COOKIE_AUTH, "0"); + torrc->setValue(TOR_ARG_HASHED_PASSWORD, ""); } - conf.insert(SETTING_WARN_PLAINTEXT_PORTS, - localValue(SETTING_WARN_PLAINTEXT_PORTS).toStringList().join(",")); - conf.insert(SETTING_REJECT_PLAINTEXT_PORTS, - localValue(SETTING_REJECT_PLAINTEXT_PORTS).toStringList().join(",")); - - return torControl()->setConf(conf, errmsg); + return torrc->apply(Vidalia::torControl(), errmsg); } /** Gets the location of Tor's data directory. */ QString -TorSettings::getDataDirectory() const +TorSettings::getDataDirectory() { - return QDir::convertSeparators(value(SETTING_DATA_DIRECTORY).toString()); + with_torrc_value(SETTING_DATA_DIRECTORY) { + return ret.at(0); + } + return QDir::convertSeparators(volatileValue(SETTING_DATA_DIRECTORY).toString()); } /** Sets the location to use as Tor's data directory. */ void TorSettings::setDataDirectory(const QString &dataDirectory) { - setValue(SETTING_DATA_DIRECTORY, dataDirectory); + setVolatileValue(SETTING_DATA_DIRECTORY, dataDirectory); } /** Returns a fully-qualified path to Tor's executable, including the @@ -222,7 +238,10 @@ TorSettings::setDefaultsTorrc(const QString &torrc) QHostAddress TorSettings::getControlAddress() const { - QString addr = localValue(SETTING_CONTROL_ADDR).toString(); + QString addr = defaultValue(SETTING_CONTROL_ADDR).toString(); + with_torrc_value(SETTING_CONTROL_ADDR) { + addr = ret.at(0); + } return QHostAddress(addr); } @@ -230,35 +249,42 @@ TorSettings::getControlAddress() const void TorSettings::setControlAddress(const QHostAddress &addr) { - setValue(SETTING_CONTROL_ADDR, addr.toString()); + setVolatileValue(SETTING_CONTROL_ADDR, addr.toString()); } /** Get the control port used to connect to Tor */ quint16 TorSettings::getControlPort() const { - return (quint16)value(SETTING_CONTROL_PORT).toInt(); + quint16 port = defaultValue(SETTING_CONTROL_PORT).toInt(); + with_torrc_value(SETTING_CONTROL_PORT) { + port = (quint16)ret.at(0).toUInt(); + } + return port; } /** Set the control port used to connect to Tor */ void TorSettings::setControlPort(quint16 port) { - setValue(SETTING_CONTROL_PORT, port); + setVolatileValue(SETTING_CONTROL_PORT, port); } /** Get the path for ControlSocket */ QString TorSettings::getSocketPath() const { - return value(SETTING_SOCKET_PATH).toString(); + with_torrc_value(SETTING_SOCKET_PATH) { + return ret.at(0); + } + return defaultValue(SETTING_SOCKET_PATH).toString(); } /** Set the path for ControlSocket */ void TorSettings::setSocketPath(const QString &path) { - setValue(SETTING_SOCKET_PATH, path); + setVolatileValue(SETTING_SOCKET_PATH, path); } /** Get the current control method */ @@ -343,10 +369,12 @@ QList<quint16> TorSettings::getWarnPlaintextPorts() const { QList<quint16> out; - QList<QVariant> ports; + QStringList ports; - ports = value(SETTING_WARN_PLAINTEXT_PORTS).toList(); - foreach (QVariant port, ports) { + ports = Vidalia::torrc()->value(SETTING_WARN_PLAINTEXT_PORTS); + if(ports.size() > 0) + ports = ports.at(0).split(","); + foreach (QString port, ports) { out << port.toUInt(); } return out; @@ -357,11 +385,11 @@ TorSettings::getWarnPlaintextPorts() const void TorSettings::setWarnPlaintextPorts(const QList<quint16> &ports) { - QList<QVariant> warnList; + QStringList warnList; foreach (quint16 port, ports) { - warnList << QVariant(port); + warnList << QString::number(port); } - setValue(SETTING_WARN_PLAINTEXT_PORTS, warnList); + setValue(SETTING_WARN_PLAINTEXT_PORTS, warnList.join(",")); } /** Returns the current list of ports that will cause Tor to reject the @@ -370,10 +398,11 @@ QList<quint16> TorSettings::getRejectPlaintextPorts() const { QList<quint16> out; - QList<QVariant> ports; - - ports = value(SETTING_REJECT_PLAINTEXT_PORTS).toList(); - foreach (QVariant port, ports) { + QStringList ports; + ports = Vidalia::torrc()->value(SETTING_REJECT_PLAINTEXT_PORTS); + if(ports.size() > 0) + ports = ports.at(0).split(","); + foreach (QString port, ports) { out << port.toUInt(); } return out; @@ -384,11 +413,11 @@ TorSettings::getRejectPlaintextPorts() const void TorSettings::setRejectPlaintextPorts(const QList<quint16> &ports) { - QList<QVariant> rejectList; + QStringList rejectList; foreach (quint16 port, ports) { - rejectList << QVariant(port); + rejectList << QString::number(port); } - setValue(SETTING_REJECT_PLAINTEXT_PORTS, rejectList); + setValue(SETTING_REJECT_PLAINTEXT_PORTS, rejectList.join(",")); } /** Returns the string description of the authentication method specified by @@ -484,11 +513,11 @@ TorSettings::bootstrapFrom() const bool TorSettings::autoControlPort() const { - return value(SETTING_AUTOCONTROL).toBool(); + return getControlPort() == 0; } void TorSettings::setAutoControlPort(const bool autoControl) { - setValue(SETTING_AUTOCONTROL, autoControl); + setVolatileValue(SETTING_AUTOCONTROL, autoControl); } diff --git a/src/vidalia/config/TorSettings.h b/src/vidalia/config/TorSettings.h index 9e6622e..2fdf1e5 100644 --- a/src/vidalia/config/TorSettings.h +++ b/src/vidalia/config/TorSettings.h @@ -47,7 +47,7 @@ public: void setExecutable(const QString &torExecutable); /** Gets the location of Tor's data directory. */ - QString getDataDirectory() const; + QString getDataDirectory(); /** Sets the location to use for Tor's data directory. */ void setDataDirectory(const QString &dataDir);