[tor-commits] [vidalia/master] Backport the new ServerPage to master

chiiph at torproject.org chiiph at torproject.org
Fri Oct 7 19:20:39 UTC 2011


commit bb16e81f0906a209340533c1a38bbec0b2774de3
Author: Tomás Touceda <chiiph at torproject.org>
Date:   Thu Sep 1 13:51:24 2011 -0300

    Backport the new ServerPage to master
---
 src/vidalia/config/ServerPage.cpp     |   99 ++++++++++++++++++++-------------
 src/vidalia/config/ServerPage.ui      |   17 ++++--
 src/vidalia/config/ServerSettings.cpp |   18 ++++++-
 src/vidalia/config/ServerSettings.h   |    6 ++
 4 files changed, 96 insertions(+), 44 deletions(-)

diff --git a/src/vidalia/config/ServerPage.cpp b/src/vidalia/config/ServerPage.cpp
index 5e8e2b6..f15dd96 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)),
@@ -220,10 +222,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);
@@ -254,6 +258,13 @@ ServerPage::serverModeChanged(bool enabled)
     ui.lblDirPort->setEnabled(!bridgeEnabled);
     ui.lineDirPort->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
@@ -287,8 +298,10 @@ 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()) {
@@ -307,7 +320,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.rdoBridgeMode->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());
@@ -338,6 +353,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
@@ -478,41 +495,47 @@ 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 a642471..cfb3251 100644
--- a/src/vidalia/config/ServerPage.ui
+++ b/src/vidalia/config/ServerPage.ui
@@ -23,28 +23,28 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0" colspan="3">
+     <item row="2" column="0" colspan="3">
       <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>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QRadioButton" name="rdoBridgeMode">
        <property name="text">
         <string>Help censored users reach the Tor network</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QLabel" name="lblWhatsThis">
        <property name="text">
         <string>&lt;a href=&quot;#bridgeHelp&quot;&gt;What's this?&lt;/a&gt;</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="2" colspan="2">
+     <item row="3" column="2" colspan="2">
       <spacer name="horizontalSpacer_2">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -57,6 +57,13 @@
        </property>
       </spacer>
      </item>
+     <item row="1" column="0" colspan="3">
+      <widget class="QRadioButton" name="rdoNonExitMode">
+       <property name="text">
+        <string>Relay traffic inside the Tor network (non-exit relay)</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
diff --git a/src/vidalia/config/ServerSettings.cpp b/src/vidalia/config/ServerSettings.cpp
index 91f8600..f1caa53 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");
@@ -257,6 +258,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
diff --git a/src/vidalia/config/ServerSettings.h b/src/vidalia/config/ServerSettings.h
index 775c92d..9479c5a 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