[tor-commits] [vidalia/alpha] Adds a non-exit option to the sharing tab

chiiph at torproject.org chiiph at torproject.org
Tue May 3 14:21:32 UTC 2011


commit 552ea29ed456c9275f075863b15166135ddb3967
Author: Tomas Touceda <chiiph at gentoo.org>
Date:   Sat Apr 30 18:18:18 2011 -0300

    Adds a non-exit option to the sharing tab
    
    Set middleman as the default exitpolicy for everything, the user has to
    explicitly check boxes to allow exit traffic.
---
 src/vidalia/config/ServerPage.cpp     |   94 ++++++++++++++++++++-------------
 src/vidalia/config/ServerPage.ui      |    9 +++-
 src/vidalia/config/ServerSettings.cpp |   18 ++++++-
 src/vidalia/config/ServerSettings.h   |    6 ++
 4 files changed, 89 insertions(+), 38 deletions(-)

diff --git a/src/vidalia/config/ServerPage.cpp b/src/vidalia/config/ServerPage.cpp
index d42fb70..16e244a 100644
--- a/src/vidalia/config/ServerPage.cpp
+++ b/src/vidalia/config/ServerPage.cpp
@@ -89,6 +89,8 @@ ServerPage::ServerPage(QWidget *parent)
                          this, SLOT(customRateChanged()));
   connect(ui.rdoClientMode, SIGNAL(toggled(bool)),
                       this, SLOT(serverModeChanged(bool)));
+  connect(ui.rdoNonExitMode, SIGNAL(toggled(bool)),
+                      this, SLOT(serverModeChanged(bool)));
   connect(ui.rdoServerMode, SIGNAL(toggled(bool)),
                       this, SLOT(serverModeChanged(bool)));
   connect(ui.rdoBridgeMode, SIGNAL(toggled(bool)),
@@ -217,10 +219,12 @@ ServerPage::serverModeChanged(bool enabled)
 {
   Q_UNUSED(enabled);
   bool bridgeEnabled = ui.rdoBridgeMode->isChecked();
+  bool relayEnabled = ui.rdoServerMode->isChecked() ||
+                      ui.rdoNonExitMode->isChecked();
   
   /* Show the tab menu only if the user is running a normal relay or a bridge
    * relay. */
-  ui.tabsMenu->setVisible(ui.rdoServerMode->isChecked() || bridgeEnabled);
+  ui.tabsMenu->setVisible(relayEnabled || bridgeEnabled);
   
   /* Disable the Exit Policies tab when bridge relay mode is selected */
   ui.tabsMenu->setTabEnabled(2, !bridgeEnabled);
@@ -236,6 +240,13 @@ ServerPage::serverModeChanged(bool enabled)
 
   ui.lineDirPort->setEnabled(!bridgeEnabled);
   ui.chkMirrorDirectory->setEnabled(!bridgeEnabled);
+
+  ui.chkWebsites->setEnabled(!ui.rdoNonExitMode->isChecked());
+  ui.chkSecWebsites->setEnabled(!ui.rdoNonExitMode->isChecked());
+  ui.chkMail->setEnabled(!ui.rdoNonExitMode->isChecked());
+  ui.chkIRC->setEnabled(!ui.rdoNonExitMode->isChecked());
+  ui.chkIM->setEnabled(!ui.rdoNonExitMode->isChecked());
+  ui.chkMisc->setEnabled(!ui.rdoNonExitMode->isChecked());
 }
 
 /** Returns true if the user has changed their server settings since the
@@ -270,7 +281,9 @@ ServerPage::save(QString &errmsg)
   /* Force the bandwidth rate limits to validate */
   customRateChanged();
   
-  if (ui.rdoServerMode->isChecked() || ui.rdoBridgeMode->isChecked()) {
+  if (ui.rdoServerMode->isChecked() || 
+      ui.rdoNonExitMode->isChecked() ||
+      ui.rdoBridgeMode->isChecked()) {
     /* A server must have an ORPort and a nickname */
     if (ui.lineServerPort->text().isEmpty() ||
         ui.lineServerNickname->text().isEmpty()) {
@@ -289,7 +302,9 @@ ServerPage::save(QString &errmsg)
   /* "Server" is enabled whether we're a bridge or normal relay. "Bridge" is
    * only enabled if we're a bridge (obviously). */
   _settings->setServerEnabled(ui.rdoServerMode->isChecked()
+                                || ui.rdoNonExitMode->isChecked()
                                 || ui.rdoBridgeMode->isChecked());
+  _settings->setNonExitEnabled(ui.rdoNonExitMode->isChecked());
   _settings->setBridgeEnabled(ui.rdoBridgeMode->isChecked());
   if (ui.rdoBridgeMode->isChecked())
     _settings->setPublishServerDescriptor(ui.chkPublishBridgeAddress->isChecked());
@@ -320,6 +335,8 @@ ServerPage::load()
 {
   if (_settings->isBridgeEnabled())
     ui.rdoBridgeMode->setChecked(true);
+  else if (_settings->isNonExitEnabled())
+    ui.rdoNonExitMode->setChecked(true);
   else if (_settings->isServerEnabled())
     ui.rdoServerMode->setChecked(true);
   else
@@ -460,41 +477,46 @@ ServerPage::loadExitPolicies()
 void
 ServerPage::saveExitPolicies()
 {
-  ExitPolicy exitPolicy;
-  bool rejectUnchecked = ui.chkMisc->isChecked();
-  
-  /* If misc is checked, then reject unchecked items and leave the default exit
-   * policy alone. Else, accept only checked items and end with reject *:*,
-   * replacing the default exit policy. */
-  if (ui.chkWebsites->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_HTTP);
-  } else if (!ui.chkWebsites->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_HTTP);
-  }
-  if (ui.chkSecWebsites->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_HTTPS);
-  } else if (!ui.chkSecWebsites->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_HTTPS);
-  }
-  if (ui.chkMail->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_MAIL);
-  } else if (!ui.chkMail->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_MAIL);
-  }
-  if (ui.chkIRC->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_IRC);
-  } else if (!ui.chkIRC->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_IRC);
-  }
-  if (ui.chkIM->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_IM);
-  } else if (!ui.chkIM->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_IM);
-  }
-  if (!ui.chkMisc->isChecked()) {
-    exitPolicy.addPolicy(Policy(Policy::RejectAll));
+  ExitPolicy *exitPolicy;
+  if(ui.rdoNonExitMode->isChecked()) {
+    exitPolicy = new ExitPolicy(ExitPolicy::Middleman);
+  } else {
+    exitPolicy = new ExitPolicy();
+    bool rejectUnchecked = ui.chkMisc->isChecked();
+    
+    /* If misc is checked, then reject unchecked items and leave the default exit
+    * policy alone. Else, accept only checked items and end with reject *:*,
+    * replacing the default exit policy. */
+    if (ui.chkWebsites->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_HTTP);
+    } else if (!ui.chkWebsites->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_HTTP);
+    }
+    if (ui.chkSecWebsites->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_HTTPS);
+    } else if (!ui.chkSecWebsites->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_HTTPS);
+    }
+    if (ui.chkMail->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_MAIL);
+    } else if (!ui.chkMail->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_MAIL);
+    }
+    if (ui.chkIRC->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_IRC);
+    } else if (!ui.chkIRC->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_IRC);
+    }
+    if (ui.chkIM->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_IM);
+    } else if (!ui.chkIM->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_IM);
+    }
+    if (!ui.chkMisc->isChecked()) {
+      exitPolicy->addPolicy(Policy(Policy::RejectAll));
+    }
   }
-  _settings->setExitPolicy(exitPolicy);
+  _settings->setExitPolicy(*exitPolicy);
 }
 
 /** Called when the user selects a new value from the rate combo box. */
diff --git a/src/vidalia/config/ServerPage.ui b/src/vidalia/config/ServerPage.ui
index 6584058..c922710 100644
--- a/src/vidalia/config/ServerPage.ui
+++ b/src/vidalia/config/ServerPage.ui
@@ -22,9 +22,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QRadioButton" name="rdoNonExitMode">
+     <property name="text">
+      <string>Relay traffic inside the Tor network (non-exit relay)</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QRadioButton" name="rdoServerMode">
      <property name="text">
-      <string>Relay traffic for the Tor network</string>
+      <string>Relay traffic for the Tor network (exit relay)</string>
      </property>
     </widget>
    </item>
diff --git a/src/vidalia/config/ServerSettings.cpp b/src/vidalia/config/ServerSettings.cpp
index 22de6d6..2fde4f3 100644
--- a/src/vidalia/config/ServerSettings.cpp
+++ b/src/vidalia/config/ServerSettings.cpp
@@ -43,6 +43,7 @@
 #define SETTING_BANDWIDTH_RATE  "BandwidthRate"
 #define SETTING_BANDWIDTH_BURST "BandwidthBurst"
 #define SETTING_BRIDGE_RELAY    "BridgeRelay"
+#define SETTING_NONEXIT_RELAY   "NonExitRelay"
 #define SETTING_ENABLE_UPNP     "EnableUPnP"
 #define SETTING_RELAY_BANDWIDTH_RATE   "RelayBandwidthRate"
 #define SETTING_RELAY_BANDWIDTH_BURST  "RelayBandwidthBurst"
@@ -71,7 +72,7 @@ ServerSettings::ServerSettings(TorControl *torControl)
   setDefault(SETTING_BANDWIDTH_BURST,       10485760);
   setDefault(SETTING_RELAY_BANDWIDTH_BURST, 10485760);
   setDefault(SETTING_EXITPOLICY,
-    ExitPolicy(ExitPolicy::Default).toString());
+    ExitPolicy(ExitPolicy::Middleman).toString());
   setDefault(SETTING_ENABLE_UPNP, false); 
   setDefault(SETTING_BRIDGE_RELAY, false);
   setDefault(SETTING_PUBLISH_SERVER_DESCRIPTOR, "1");
@@ -258,6 +259,21 @@ ServerSettings::isBridgeEnabled()
   return value(SETTING_BRIDGE_RELAY).toBool() && isServerEnabled();
 }
 
+/** Sets to <b>enabled</b> whether Tor should be a non-exit node when acting as
+ * a server. */
+void
+ServerSettings::setNonExitEnabled(bool enabled)
+{
+  setValue(SETTING_NONEXIT_RELAY, enabled);
+}
+
+/** Returns true if Tor is configured to act as a non-exit node. */
+bool
+ServerSettings::isNonExitEnabled()
+{
+  return value(SETTING_NONEXIT_RELAY).toBool() && isServerEnabled();
+}
+
 /** Sets the server's ORPort. */
 void
 ServerSettings::setORPort(quint16 orPort)
diff --git a/src/vidalia/config/ServerSettings.h b/src/vidalia/config/ServerSettings.h
index 79a5db9..f5d5b9a 100644
--- a/src/vidalia/config/ServerSettings.h
+++ b/src/vidalia/config/ServerSettings.h
@@ -42,6 +42,12 @@ public:
   /** Returns true if Tor is configured to act as a bridge node. */
   bool isBridgeEnabled();
 
+  /** Sets to <b>enabled</b> whether Tor should be a non-exit node when acting
+   * as a server. */
+  void setNonExitEnabled(bool enable);
+  /** Returns true if Tor is configured to act as a non-exit node. */
+  bool isNonExitEnabled();
+
   /** Sets the server's ORPort value. */
   void setORPort(quint16 orPort);
   /** Gets the server's ORPort value. */





More information about the tor-commits mailing list