[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r1211: By default, we will start Tor with a "-f ~/.vidalia/torrc" o (trunk/src/config)



Author: edmanm
Date: 2006-09-20 14:47:29 -0400 (Wed, 20 Sep 2006)
New Revision: 1211

Modified:
   trunk/src/config/serversettings.cpp
   trunk/src/config/torsettings.cpp
   trunk/src/config/torsettings.h
Log:
By default, we will start Tor with a "-f ~/.vidalia/torrc" or a Windows
equivalent. (Tickets #108 and #82) Simplify handling of Tor arguments, too.


Modified: trunk/src/config/serversettings.cpp
===================================================================
--- trunk/src/config/serversettings.cpp	2006-09-20 17:50:00 UTC (rev 1210)
+++ trunk/src/config/serversettings.cpp	2006-09-20 18:47:29 UTC (rev 1211)
@@ -277,7 +277,7 @@
 {
   TorSettings settings;
   QHash<QString,QString> confValues;
-  if (_torControl->isConnected() && settings.usingAlternateTorrc()) {
+  if (_torControl->isConnected() && !changedSinceLastApply()) {
     confValues.insert(SERVER_ORPORT, "");
     confValues.insert(SERVER_NICKNAME, "");
     if (_torControl->getConf(confValues)) {

Modified: trunk/src/config/torsettings.cpp
===================================================================
--- trunk/src/config/torsettings.cpp	2006-09-20 17:50:00 UTC (rev 1210)
+++ trunk/src/config/torsettings.cpp	2006-09-20 18:47:29 UTC (rev 1211)
@@ -25,16 +25,19 @@
  */
 
 #include <QDir>
+#include <vidalia.h>
 
 #include "torsettings.h"
 
 /* Tor Settings */
 #define SETTING_TOR_EXECUTABLE  "Tor/TorExecutable"
-#define SETTING_TOR_ARGUMENTS   "Tor/Arguments"
+#define SETTING_TORRC           "Tor/Torrc"
 #define SETTING_CONTROL_ADDR    "Tor/ControlAddr"
 #define SETTING_CONTROL_PORT    "Tor/ControlPort"
 #define SETTING_AUTH_TOKEN      "Tor/AuthToken"
 #define SETTING_USE_SERVICE     "Tor/UseService"
+#define SETTING_TOR_USER        "Tor/User"
+#define SETTING_TOR_GROUP       "Tor/Group"
 
 /* On win32, we need to add the .exe onto Tor's filename */
 #if defined(Q_OS_WIN32)
@@ -49,16 +52,16 @@
 #define DEFAULT_CONTROL_ADDR    "127.0.0.1"
 #define DEFAULT_CONTROL_PORT    9051
 #define DEFAULT_AUTH_TOKEN      ""
-#define DEFAULT_TORRC           ""
-#define DEFAULT_USER            ""
-#define DEFAULT_GROUP           ""
+#define DEFAULT_TORRC           (Vidalia::dataDirectory() + "/torrc")
+#define DEFAULT_TOR_USER        ""
+#define DEFAULT_TOR_GROUP       ""
 #define DEFAULT_USE_SERVICE     false
 
 /* Arguments we can pass to Tor on the command-line */
 #define TOR_ARG_CONTROL_PORT    "ControlPort"
 #define TOR_ARG_TORRC           "-f"
-#define TOR_ARG_RUN_AS_USER     "User"
-#define TOR_ARG_RUN_AS_GROUP    "Group"
+#define TOR_ARG_USER            "User"
+#define TOR_ARG_GROUP           "Group"
 
 
 /** Default constructor */
@@ -82,82 +85,52 @@
   setValue(SETTING_TOR_EXECUTABLE, torExecutable);
 }
 
+QString
+TorSettings::formatArgument(QString name, QString value)
+{
+  if (value.indexOf(" ") >= 0) {
+    value = "\"" + value + "\"";
+  }
+  return name + " " + value;
+}
+
 /** Returns a formatted QString of all currently set command-line arguments.
  * If an argument's value contains a space, then it will be wrapped in quotes.
  * */
 QString
 TorSettings::getArguments()
-{ 
-  QMap<QString, QVariant> args = getArgumentsMap();
-  QString fmtArgs, arg;
-  foreach(QString key, args.keys()) {
-    arg = args.value(key).toString();
-    if (arg.indexOf(" ") > 0) {
-      arg = "\"" + arg + "\"";
-    }
-    fmtArgs.append(" " + key + " " + arg);
-  }
-  return fmtArgs;
-}
-
-/** Returns a QMap<arg, value> containing all arguments to be passed to Tor's
-* executable. */
-QMap<QString, QVariant>
-TorSettings::getArgumentsMap()
 {
-  QMap<QString, QVariant> args = value(SETTING_TOR_ARGUMENTS,
-                                       DEFAULT_TOR_ARGUMENTS).toMap();
-  args.insert(TOR_ARG_CONTROL_PORT, QString::number(getControlPort()));
+  QString args;
+
+  /* Add the torrc argument (if specified) */
+  QString torrc = getTorrc();
+  if (!torrc.isEmpty()) {
+    args += formatArgument(TOR_ARG_TORRC, torrc) + " ";
+  }
+  /* Add the ControlPort value */
+  quint16 controlPort = getControlPort();
+  if (controlPort) {
+    args += formatArgument(TOR_ARG_CONTROL_PORT, 
+                           QString::number(controlPort)) + " ";
+  }
+  /* Add the User argument (if specified) */
+  QString user = getUser();
+  if (!user.isEmpty()) {
+    args += formatArgument(TOR_ARG_USER, user) + " ";
+  }
+  /* Add the Group argument (if specified) */
+  QString group = getGroup();
+  if (!group.isEmpty()) {
+    args += formatArgument(TOR_ARG_GROUP, group);
+  }
   return args;
 }
 
-/** Returns true if we have a setting for the given Tor argument. */
-bool
-TorSettings::hasArgument(QString arg)
-{
-  return getArgumentsMap().contains(arg);
-}
-
-/** Set Tor arguments to the supplied arg-value map. */
-void
-TorSettings::setArguments(QMap<QString, QVariant> args)
-{
-  setValue(SETTING_TOR_ARGUMENTS, args);
-}
-
-/** Add an argument to the list of command-line arguments used when starting
-* Tor. */
-void
-TorSettings::setArgument(QString arg, QString value)
-{
-  QMap<QString, QVariant> args = getArgumentsMap();
-  args.insert(arg, value);
-  setArguments(args);
-}
-
-/** Gets the stored value for the specified argument name. If no value is set,
- * then defaultValue is returned. */
-QVariant
-TorSettings::getArgument(QString arg, QVariant defaultValue)
-{
-  return getArgumentsMap().value(arg, defaultValue);
-}
-
-/** Remove a single Tor command-line argument. */
-void
-TorSettings::unsetArgument(QString arg)
-{
-  QMap<QString, QVariant> args = getArgumentsMap();
-  args.remove(arg);
-  setArguments(args);
-}
-
-/** Returns the torrc that will be used when starting Tor. If the default
- * torrc is used, then this method returns an empty string. */
+/** Returns the torrc that will be used when starting Tor. */
 QString
 TorSettings::getTorrc()
 {
-  return getArgument(TOR_ARG_TORRC, DEFAULT_TORRC).toString();
+  return value(SETTING_TORRC, DEFAULT_TORRC).toString();
 }
 
 /** Sets the torrc that will be used when starting Tor.
@@ -166,23 +139,18 @@
 void
 TorSettings::setTorrc(QString torrc)
 {
-  torrc.isEmpty() ? unsetArgument(TOR_ARG_TORRC)
-                  : setArgument(TOR_ARG_TORRC, torrc);
+  torrc = torrc.simplified();
+  if (torrc != DEFAULT_TORRC) {
+    setValue(SETTING_TORRC, torrc);
+  }
 }
 
-/** Returns true if Tor is started using an alternate torrc file. */
-bool
-TorSettings::usingAlternateTorrc()
-{
-  return hasArgument(TOR_ARG_TORRC);
-}
-
 /** Returns the user used when running Tor. The user is specified as an
  * argument to Tor, which will setuid to this user. */
 QString
 TorSettings::getUser()
 {
-  return getArgument(TOR_ARG_RUN_AS_USER, DEFAULT_USER).toString();
+  return value(SETTING_TOR_USER, DEFAULT_TOR_USER).toString();
 }
 
 /** Sets the user used when running Tor. The user is specified as an argument
@@ -190,8 +158,7 @@
 void
 TorSettings::setUser(QString user)
 {
-  user.isEmpty() ? unsetArgument(TOR_ARG_RUN_AS_USER)
-                 : setArgument(TOR_ARG_RUN_AS_USER, user);
+  setValue(SETTING_TOR_USER, user);
 }
 
 /** Returns the group used when running Tor. The group is specified as an
@@ -199,7 +166,7 @@
 QString
 TorSettings::getGroup()
 {
-  return getArgument(TOR_ARG_RUN_AS_GROUP, DEFAULT_GROUP).toString();
+  return value(SETTING_TOR_GROUP).toString();
 }
 
 /** Sets the group used when running Tor. The group is specified as an
@@ -207,8 +174,7 @@
 void
 TorSettings::setGroup(QString group)
 {
-  group.isEmpty() ? unsetArgument(TOR_ARG_RUN_AS_GROUP)
-                  : setArgument(TOR_ARG_RUN_AS_GROUP, group);
+  setValue(SETTING_TOR_GROUP, group);
 }
 
 /** Get the address or hostname used to connect to Tor */
@@ -272,3 +238,4 @@
 {
   setValue(SETTING_USE_SERVICE, useService);
 }
+

Modified: trunk/src/config/torsettings.h
===================================================================
--- trunk/src/config/torsettings.h	2006-09-20 17:50:00 UTC (rev 1210)
+++ trunk/src/config/torsettings.h	2006-09-20 18:47:29 UTC (rev 1211)
@@ -51,8 +51,6 @@
   QString getTorrc();
   /** Sets the torrc to use when starting Tor. */
   void setTorrc(QString torrc);
-  /** Returns true if Tor uses an alternate torrc. */
-  bool usingAlternateTorrc();
   
   /** Get Tor's control interface address. */
   QHostAddress getControlAddress();
@@ -85,19 +83,9 @@
   void setUseService(bool useService);
 
 private:
-  /** Returns a QMap of all currently set command-line arguments. */
-  QMap<QString, QVariant> getArgumentsMap(); 
-  /** Returns true if the given argument is set. */
-  bool hasArgument(QString arg);
-  /** Sets Tor's command-line arguments to the given list. */
-  void setArguments(QMap<QString, QVariant> args);
-  /** Sets a specific command-line argument to the given value. */
-  void setArgument(QString arg, QString value);
-  /** Unsets the given argument, removing it from Tor's command-line. */
-  void unsetArgument(QString arg);
-  /** Returns the value of the given command-line argument, or defaultValue is
-   * no value is set for the argument. */
-  QVariant getArgument(QString arg, QVariant defaultValue);
+  /** Formats the argument name <b>name</b> with the given value <b>value</b>.
+   * If <b>value</b> contains a space, <b>value</b> will be wrapped in quotes. */
+  QString formatArgument(QString name, QString value);
 };
 
 #endif