[tor-commits] [vidalia/alpha] Migrate TorSettings to the new structure

chiiph at torproject.org chiiph at torproject.org
Mon Mar 5 13:01:51 UTC 2012


commit fa3f968392247de08fbc99e3cc20107c38e25d9a
Author: Tomás Touceda <chiiph at 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);
   





More information about the tor-commits mailing list