[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [vidalia/alpha] Actually save ControlPort and SocksPort when modified
commit d09c2ed80f2fab69536db19940211c8c835eb033
Author: Tomás Touceda <chiiph@xxxxxxxxxxxxxx>
Date: Fri Mar 16 14:31:36 2012 -0300
Actually save ControlPort and SocksPort when modified
Reload settings after editing torrc through its dialog.
Also, remove a lot of whitespace.
---
src/torcontrol/RouterDescriptor.cpp | 6 +-
src/torcontrol/RouterDescriptor.h | 8 ++--
src/vidalia/config/AdvancedPage.cpp | 39 ++++++++++--------
src/vidalia/config/ConfigDialog.cpp | 30 +++++++------
src/vidalia/config/ConfigDialog.h | 8 ++--
src/vidalia/config/ConfigPage.h | 11 +++--
src/vidalia/config/NetworkSettings.cpp | 16 ++++----
src/vidalia/config/ServerPage.cpp | 60 ++++++++++++++--------------
src/vidalia/config/ServerSettings.cpp | 40 +++++++++---------
src/vidalia/config/TorSettings.cpp | 64 +++++++++++++++++++-----------
src/vidalia/config/TorSettings.h | 26 +++++++-----
src/vidalia/config/VSettings.cpp | 8 ++--
src/vidalia/config/VSettings.h | 8 ++--
src/vidalia/config/torrc/Torrc.cpp | 26 +++++++-----
src/vidalia/config/torrc/TorrcParser.cpp | 21 +++++-----
15 files changed, 204 insertions(+), 167 deletions(-)
diff --git a/src/torcontrol/RouterDescriptor.cpp b/src/torcontrol/RouterDescriptor.cpp
index 21643f2..26051c1 100644
--- a/src/torcontrol/RouterDescriptor.cpp
+++ b/src/torcontrol/RouterDescriptor.cpp
@@ -1,10 +1,10 @@
/*
** This file is part of Vidalia, and is subject to the license terms in the
-** LICENSE file, found in the top level directory of this distribution. If
+** LICENSE file, found in the top level directory of this distribution. If
** you did not receive the LICENSE file with this file, you may obtain it
** from the Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
diff --git a/src/torcontrol/RouterDescriptor.h b/src/torcontrol/RouterDescriptor.h
index d0c3400..32dfc36 100644
--- a/src/torcontrol/RouterDescriptor.h
+++ b/src/torcontrol/RouterDescriptor.h
@@ -1,14 +1,14 @@
/*
** This file is part of Vidalia, and is subject to the license terms in the
-** LICENSE file, found in the top level directory of this distribution. If
+** LICENSE file, found in the top level directory of this distribution. If
** you did not receive the LICENSE file with this file, you may obtain it
** from the Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
-/*
+/*
** \file RouterDescriptor.h
** \brief Parses a blob of router descriptor text from Tor
*/
diff --git a/src/vidalia/config/AdvancedPage.cpp b/src/vidalia/config/AdvancedPage.cpp
index 44216c7..7f9d884 100644
--- a/src/vidalia/config/AdvancedPage.cpp
+++ b/src/vidalia/config/AdvancedPage.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -138,7 +138,7 @@ AdvancedPage::save(QString &errmsg)
if (controlAddress.isNull()) {
errmsg = tr("'%1' is not a valid IP address.")
.arg(ui.lineControlAddress->text());
- return false;
+ return false;
}
_settings->setControlMethod(ControlMethod::Port);
} else {
@@ -149,9 +149,9 @@ AdvancedPage::save(QString &errmsg)
}
_settings->setControlMethod(ControlMethod::Socket);
}
-
+
/* Validate the selected authentication options */
- TorSettings::AuthenticationMethod authMethod =
+ TorSettings::AuthenticationMethod authMethod =
indexToAuthMethod(ui.cmbAuthMethod->currentIndex());
if (authMethod == TorSettings::PasswordAuth
&& ui.linePassword->text().isEmpty()
@@ -178,13 +178,13 @@ AdvancedPage::save(QString &errmsg)
/* Only remember the torrc and datadir values if Vidalia started Tor, or
* if the user changed the displayed values. */
- if (Vidalia::torControl()->isVidaliaRunningTor() or
+ if (Vidalia::torControl()->isVidaliaRunningTor() or
!Vidalia::torControl()->isConnected()) {
QString torrc = ui.lineTorConfig->text();
if (torrc != _settings->getTorrc()) {
_settings->setTorrc(torrc);
if(Vidalia::torControl()->isConnected()) {
- QMessageBox::StandardButtons res = QMessageBox::question(this, tr("Warning"),
+ QMessageBox::StandardButtons res = QMessageBox::question(this, tr("Warning"),
tr("You changed torrc path, would you like to restart Tor?"),
QMessageBox::Yes | QMessageBox::No);
if(res == QMessageBox::Yes)
@@ -225,6 +225,10 @@ AdvancedPage::load()
{
ui.lineControlAddress->setText(_settings->getControlAddress().toString());
ui.lineControlPort->setText(QString::number(_settings->getControlPort()));
+
+ // We don't want to loose the socksport
+ _settings->setSocksPort(_settings->getSocksPort());
+
ui.lineTorConfig->setText(_settings->getTorrc());
ui.lineTorDataDirectory->setText(_settings->getDataDirectory());
ui.chkAuto->setChecked(_settings->autoControlPort());
@@ -292,7 +296,7 @@ void
AdvancedPage::browseTorConfig()
{
/* Prompt the user to select a file or create a new one */
- QString filename = QFileDialog::getOpenFileName(this,
+ QString filename = QFileDialog::getOpenFileName(this,
tr("Select Tor Configuration File"),
QFileInfo(ui.lineTorConfig->text()).filePath(),
tr("Tor Configuration File (torrc);;All Files (*)"));
@@ -311,7 +315,7 @@ AdvancedPage::browseTorConfig()
tr("%1 does not exist. Would you like to create it?")
.arg(filename),
VMessageBox::Yes, VMessageBox::No);
-
+
if (response == VMessageBox::No) {
/* Don't create it. Just bail. */
return;
@@ -339,7 +343,7 @@ AdvancedPage::browseTorDataDirectory()
tr("Select a Directory to Use for Tor Data"),
ui.lineTorDataDirectory->text());
- if (!dataDir.isEmpty())
+ if (!dataDir.isEmpty())
ui.lineTorDataDirectory->setText(dataDir);
}
@@ -355,7 +359,7 @@ AdvancedPage::browseSocketPath()
tr("Select a file to use for Tor socket path"),
start);
- if (!socketPath.isEmpty())
+ if (!socketPath.isEmpty())
ui.lineSocketPath->setText(socketPath);
}
@@ -371,12 +375,12 @@ AdvancedPage::setupService(bool useService)
if (!useService && isInstalled) {
/* Uninstall if we don't want to use it anymore */
Vidalia::torControl()->stop();
-
+
if (!service.remove()) {
VMessageBox::critical(this,
tr("Unable to remove Tor Service"),
tr("Vidalia was unable to remove the Tor service.\n\n"
- "You may need to remove it manually."),
+ "You may need to remove it manually."),
VMessageBox::Ok, VMessageBox::Cancel);
}
} else if (useService && !isInstalled) {
@@ -395,14 +399,15 @@ AdvancedPage::setupService(bool useService)
#endif
/** Called when the user presses the Edit current torrc button */
-void
+void
AdvancedPage::displayTorrcDialog()
{
TorrcDialog rcdialog(this);
rcdialog.exec();
+ emit reloadAll();
}
-void
+void
AdvancedPage::toggleControl(bool)
{
if(ui.rdoControlPort->isChecked()) {
@@ -439,7 +444,7 @@ AdvancedPage::toggleAuto(bool)
void
AdvancedPage::displayWarning(bool checked)
{
- ui.lblWarn->setVisible(!checked and
- indexToAuthMethod(ui.cmbAuthMethod->currentIndex()) ==
+ ui.lblWarn->setVisible(!checked and
+ indexToAuthMethod(ui.cmbAuthMethod->currentIndex()) ==
TorSettings::PasswordAuth);
}
diff --git a/src/vidalia/config/ConfigDialog.cpp b/src/vidalia/config/ConfigDialog.cpp
index a92e959..1724814 100644
--- a/src/vidalia/config/ConfigDialog.cpp
+++ b/src/vidalia/config/ConfigDialog.cpp
@@ -3,12 +3,12 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
-/*
+/*
** \file ConfigDialog.cpp
** \brief Contains a series of Vidalia and Tor configuration pages
*/
@@ -43,12 +43,12 @@ ConfigDialog::ConfigDialog(QWidget* parent)
{
/* Invoke the Qt Designer generated QObject setup routine */
ui.setupUi(this);
-
+
/* Override the QDialogButtonBox button text so we can use our own
* translations. */
QPushButton *button = ui.buttonBox->button(QDialogButtonBox::Ok);
if (button) {
- Vidalia::createShortcut(QKeySequence(Qt::Key_Return),
+ Vidalia::createShortcut(QKeySequence(Qt::Key_Return),
this, button, SLOT(click()));
}
button = ui.buttonBox->button(QDialogButtonBox::Cancel);
@@ -56,7 +56,7 @@ ConfigDialog::ConfigDialog(QWidget* parent)
Vidalia::createShortcut("Esc", this, button, SLOT(click()));
Vidalia::createShortcut("Ctrl+W", this, button, SLOT(click()));
}
-
+
/* Connect the button box signals to the appropriate slots */
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(saveChanges()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(close()));
@@ -96,14 +96,16 @@ ConfigDialog::ConfigDialog(QWidget* parent)
foreach (ConfigPage *page, ui.stackPages->pages()) {
connect(page, SIGNAL(helpRequested(QString)),
this, SLOT(help(QString)));
+ connect(page, SIGNAL(reloadAll()),
+ this, SLOT(loadSettings()));
}
/* Create the toolbar */
ui.toolBar->addActions(grp->actions());
ui.toolBar->addSeparator();
- connect(grp, SIGNAL(triggered(QAction *)),
+ connect(grp, SIGNAL(triggered(QAction *)),
ui.stackPages, SLOT(showPage(QAction *)));
-
+
/* Create and bind the Help button */
QAction *helpAct = new QAction(QIcon(IMAGE_HELP), tr("Help"), ui.toolBar);
helpAct->setData("Help");
@@ -121,7 +123,7 @@ ConfigDialog::ConfigDialog(QWidget* parent)
/** Creates a new action associated with a config page. */
QAction*
-ConfigDialog::createPageAction(const QIcon &img, const QString &text,
+ConfigDialog::createPageAction(const QIcon &img, const QString &text,
const QString &data, QActionGroup *group)
{
QAction *action = new QAction(img, text, group);
@@ -181,16 +183,16 @@ void
ConfigDialog::saveChanges()
{
QString errmsg;
-
+
/* Call each config page's save() method to save its data */
foreach (ConfigPage *page, ui.stackPages->pages()) {
if (!page->save(errmsg)) {
/* Display the offending page */
ui.stackPages->setCurrentPage(page);
-
+
/* Show the user what went wrong */
- VMessageBox::warning(this,
- tr("Error Saving Settings"),
+ VMessageBox::warning(this,
+ tr("Error Saving Settings"),
p(tr("Vidalia was unable to save your %1 settings.")
.arg(tr(qPrintable(page->title()), "ConfigDialog"))) + p(errmsg),
VMessageBox::Ok);
@@ -259,7 +261,7 @@ void
ConfigDialog::help()
{
Page currentPage = static_cast<Page>(ui.stackPages->currentIndex());
-
+
switch (currentPage) {
case Network:
help("config.network"); break;
diff --git a/src/vidalia/config/ConfigDialog.h b/src/vidalia/config/ConfigDialog.h
index fe63954..441a85d 100644
--- a/src/vidalia/config/ConfigDialog.h
+++ b/src/vidalia/config/ConfigDialog.h
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -76,10 +76,10 @@ private slots:
/** Stub method that relays the checkForUpdates() signal from the General
* settings page to the owner of the config dialog (MainWindow). */
void onCheckForUpdates();
-
-private:
/** Loads the current configuration settings */
void loadSettings();
+
+private:
/** Creates a new action for a config page. */
QAction* createPageAction(const QIcon &img, const QString &text,
const QString &data, QActionGroup *group);
diff --git a/src/vidalia/config/ConfigPage.h b/src/vidalia/config/ConfigPage.h
index 2a237c1..d939302 100644
--- a/src/vidalia/config/ConfigPage.h
+++ b/src/vidalia/config/ConfigPage.h
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -25,7 +25,7 @@ class ConfigPage : public QWidget
public:
/** Default Constructor */
- ConfigPage(QWidget *parent = 0, const QString title = QString())
+ ConfigPage(QWidget *parent = 0, const QString title = QString())
: QWidget(parent), _title(title) {}
/** Returns the title of this configuration page. */
@@ -54,7 +54,7 @@ public:
/** Subclassed pages can overload this method to revert any cancelled
* settings. */
virtual void revert() {}
-
+
virtual void retranslateUi() {}
signals:
@@ -62,6 +62,9 @@ signals:
* <b>topic</b>. */
void helpRequested(const QString &topic);
+ /** Emitted when all the settings need to be reloaded */
+ void reloadAll();
+
private:
QString _title; /**< Title of this configuration page. */
};
diff --git a/src/vidalia/config/NetworkSettings.cpp b/src/vidalia/config/NetworkSettings.cpp
index 4f56432..bb4e7ba 100644
--- a/src/vidalia/config/NetworkSettings.cpp
+++ b/src/vidalia/config/NetworkSettings.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -86,7 +86,7 @@ NetworkSettings::apply(QString *errmsg)
if (!user.isEmpty() || !pass.isEmpty())
auth = QString("%1:%2").arg(user).arg(pass);
-
+
switch (getProxyType()) {
case NoProxy:
break;
@@ -110,7 +110,7 @@ NetworkSettings::apply(QString *errmsg)
torrc->setValue(SETTING_SOCKS5_USERNAME, user);
torrc->setValue(SETTING_SOCKS5_PASSWORD, pass);
}
-
+
torrc->setValue(SETTING_HTTPS_PROXY, https);
torrc->setValue(SETTING_HTTPS_PROXY_AUTH, auth);
} else {
@@ -216,7 +216,7 @@ NetworkSettings::setReachablePorts(const QList<quint16> &reachablePorts)
}
/** Returns the proxy type Tor is using, or NoProxy if it makes direct
- * connections. */
+ * connections. */
NetworkSettings::ProxyType
NetworkSettings::getProxyType()
{
@@ -252,7 +252,7 @@ NetworkSettings::getProxyUsername()
return value(SETTING_PROXY_USERNAME).toString();
}
-/** Sets the proxy server username to <b>user</b>. */
+/** Sets the proxy server username to <b>user</b>. */
void
NetworkSettings::setProxyUsername(const QString &user)
{
@@ -266,7 +266,7 @@ NetworkSettings::getProxyPassword()
return value(SETTING_PROXY_PASSWORD).toString();
}
-/** Sets the proxy server password to <b>pass</b>. */
+/** Sets the proxy server password to <b>pass</b>. */
void
NetworkSettings::setProxyPassword(const QString &pass)
{
@@ -350,7 +350,7 @@ NetworkSettings::ProxyType
NetworkSettings::proxyTypeFromString(const QString &type)
{
QString str = type.toLower();
-
+
if (str == "socks4")
return Socks4Proxy;
if (str == "socks5")
diff --git a/src/vidalia/config/ServerPage.cpp b/src/vidalia/config/ServerPage.cpp
index eb23c0b..52d311a 100644
--- a/src/vidalia/config/ServerPage.cpp
+++ b/src/vidalia/config/ServerPage.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -48,8 +48,8 @@
#define HIGHBW_MAX_RATE (10240*1024)
/** Minimum allowed bandwidth rate (20KB) */
#define MIN_BANDWIDTH_RATE 20
-/** Maximum bandwidth rate. This is limited to 2147483646 bytes,
- * or 2097151 kilobytes. (2147483646/1024) */
+/** Maximum bandwidth rate. This is limited to 2147483646 bytes,
+ * or 2097151 kilobytes. (2147483646/1024) */
#define MAX_BANDWIDTH_RATE 2097151
/** Ports represented by the "Websites" checkbox. (80) */
@@ -62,7 +62,7 @@
* (703,1863,5050,5190,5222,8300,8888) */
#define PORTS_IM (QStringList() << "706" << "1863" << "5050" << "5190" \
<< "5222" << "5223" << "8300" << "8888")
-/** Ports represented by the "Internet Relay Chat" checkbox.
+/** Ports represented by the "Internet Relay Chat" checkbox.
* (6660-6669,6697,7000-7001) */
#define PORTS_IRC (QStringList() << "6660-6669" << "6697" << "7000-7001")
@@ -73,7 +73,7 @@ ServerPage::ServerPage(QWidget *parent)
{
/* Invoke the Qt Designer generated object setup routine */
ui.setupUi(this);
-
+
/* Create ServerSettings object */
_settings = new ServerSettings(Vidalia::torControl());
@@ -83,9 +83,9 @@ ServerPage::ServerPage(QWidget *parent)
connect(ui.btnUpnpHelp, SIGNAL(clicked()), this, SLOT(upnpHelp()));
connect(ui.cmboRate, SIGNAL(currentIndexChanged(int)),
this, SLOT(rateChanged(int)));
- connect(ui.lineAvgRateLimit, SIGNAL(editingFinished()),
+ connect(ui.lineAvgRateLimit, SIGNAL(editingFinished()),
this, SLOT(customRateChanged()));
- connect(ui.lineMaxRateLimit, SIGNAL(editingFinished()),
+ connect(ui.lineMaxRateLimit, SIGNAL(editingFinished()),
this, SLOT(customRateChanged()));
connect(ui.rdoClientMode, SIGNAL(toggled(bool)),
this, SLOT(serverModeChanged(bool)));
@@ -204,7 +204,7 @@ ServerPage::loadBridgeIdentity()
tc->getInfo("address", address);
tc->getInfo("fingerprint", fingerprint);
tc->getConf("ORPort", orPort);
-
+
if (!address.isEmpty() && !orPort.isEmpty() && orPort != "0")
bridge = address + ":" + orPort + " ";
if (!fingerprint.isEmpty())
@@ -229,11 +229,11 @@ ServerPage::serverModeChanged(bool 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(relayEnabled || bridgeEnabled);
-
+
/* Display the widgets that show the user their bridge identity if bridge
* relay mode is selected. */
ui.lblYourBridgeRelayIs->setVisible(bridgeEnabled);
@@ -260,7 +260,7 @@ ServerPage::serverModeChanged(bool enabled)
ui.chkMirrorDirectory->setEnabled(!bridgeEnabled);
- /* Disable the Exit Policies tab when bridge or non-exit relay mode is
+ /* Disable the Exit Policies tab when bridge or non-exit relay mode is
* selected */
ui.tabsMenu->setTabEnabled(2, !bridgeEnabled and !ui.rdoNonExitMode->isChecked());
@@ -301,8 +301,8 @@ ServerPage::save(QString &errmsg)
{
/* Force the bandwidth rate limits to validate */
customRateChanged();
-
- if (ui.rdoServerMode->isChecked() ||
+
+ if (ui.rdoServerMode->isChecked() ||
ui.rdoNonExitMode->isChecked() ||
ui.rdoBridgeMode->isChecked()) {
/* A server must have an ORPort and a nickname */
@@ -319,7 +319,7 @@ ServerPage::save(QString &errmsg)
ui.lineMaxRateLimit->setText(QString::number(5242880/1024) /* 5MB */);
}
}
-
+
/* "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()
@@ -346,7 +346,7 @@ ServerPage::save(QString &errmsg)
if(ui.chkAccounting->checkState() != Qt::Checked)
_settings->disableAccounting();
else {
- _settings->setAccountingMax(ui.spnAmount->value(),
+ _settings->setAccountingMax(ui.spnAmount->value(),
ui.cmbUnit->currentText());
_settings->setAccountingStart(ui.cmbTime->currentText(),
ui.spnDay->value(),
@@ -431,23 +431,23 @@ ServerPage::loadBandwidthLimits()
quint32 avgRate = _settings->getBandwidthAvgRate();
quint32 maxRate = _settings->getBandwidthBurstRate();
- if (avgRate == CABLE256_AVG_RATE &&
+ if (avgRate == CABLE256_AVG_RATE &&
maxRate == CABLE256_MAX_RATE) {
/* Cable/DSL 256 Kbps */
- ui.cmboRate->setCurrentIndex(CableDsl256);
- } else if (avgRate == CABLE512_AVG_RATE &&
+ ui.cmboRate->setCurrentIndex(CableDsl256);
+ } else if (avgRate == CABLE512_AVG_RATE &&
maxRate == CABLE512_MAX_RATE) {
/* Cable/DSL 512 Kbps */
ui.cmboRate->setCurrentIndex(CableDsl512);
- } else if (avgRate == CABLE768_AVG_RATE &&
+ } else if (avgRate == CABLE768_AVG_RATE &&
maxRate == CABLE768_MAX_RATE) {
/* Cable/DSL 768 Kbps */
ui.cmboRate->setCurrentIndex(CableDsl768);
- } else if (avgRate == T1_AVG_RATE &&
+ } else if (avgRate == T1_AVG_RATE &&
maxRate == T1_MAX_RATE) {
/* T1/Cable/DSL 1.5 Mbps */
ui.cmboRate->setCurrentIndex(T1CableDsl1500);
- } else if (avgRate == HIGHBW_AVG_RATE &&
+ } else if (avgRate == HIGHBW_AVG_RATE &&
maxRate == HIGHBW_MAX_RATE) {
/* > 1.5 Mbps */
ui.cmboRate->setCurrentIndex(GreaterThan1500);
@@ -501,7 +501,7 @@ void
ServerPage::loadExitPolicies()
{
ExitPolicy exitPolicy = _settings->getExitPolicy();
-
+
if (exitPolicy.contains(Policy(Policy::RejectAll))) {
/* If the policy ends with reject *:*, check if the policy explicitly
* accepts these ports */
@@ -533,7 +533,7 @@ ServerPage::saveExitPolicies()
} 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. */
@@ -573,12 +573,12 @@ ServerPage::saveExitPolicies()
void
ServerPage::rateChanged(int index)
{
- /* If the "Custom" option is selected, show the custom bandwidth
+ /* If the "Custom" option is selected, show the custom bandwidth
* limits form. */
ui.frmCustomRate->setVisible(index == CustomBwLimits);
}
-/** Called when the user edits the long-term average or maximum bandwidth limit.
+/** Called when the user edits the long-term average or maximum bandwidth limit.
* This ensures that the average bandwidth rate is greater than MIN_RATE
* (20KB/s) and that the max rate is greater than the average rate. */
void
@@ -587,7 +587,7 @@ ServerPage::customRateChanged()
/* Make sure the average rate isn't too low or too high */
quint32 avgRate = (quint32)ui.lineAvgRateLimit->text().toUInt();
if (avgRate < MIN_BANDWIDTH_RATE) {
- ui.lineAvgRateLimit->setText(QString::number(MIN_BANDWIDTH_RATE));
+ ui.lineAvgRateLimit->setText(QString::number(MIN_BANDWIDTH_RATE));
}
if (avgRate > MAX_BANDWIDTH_RATE) {
ui.lineAvgRateLimit->setText(QString::number(MAX_BANDWIDTH_RATE));
@@ -610,7 +610,7 @@ ServerPage::testUpnp()
#if defined(USE_MINIUPNPC)
UPNPTestDialog dlg(ui.lineServerPort->text().toUInt(),
ui.lineDirPort->text().toUInt(), this);
-
+
connect(&dlg, SIGNAL(help()), this, SLOT(upnpHelp()));
dlg.exec();
@@ -653,11 +653,11 @@ ServerPage::displayBridgeUsage()
bool ok;
keyvals = string_parse_keyvals(info, &ok);
- if (!ok || !keyvals.contains("TimeStarted")
+ if (!ok || !keyvals.contains("TimeStarted")
|| !keyvals.contains("CountrySummary"))
goto err;
- timeStarted = QDateTime::fromString(keyvals.value("TimeStarted"),
+ timeStarted = QDateTime::fromString(keyvals.value("TimeStarted"),
"yyyy-MM-dd HH:mm:ss");
if (!timeStarted.isValid())
goto err;
diff --git a/src/vidalia/config/ServerSettings.cpp b/src/vidalia/config/ServerSettings.cpp
index 2593dda..25c7a80 100644
--- a/src/vidalia/config/ServerSettings.cpp
+++ b/src/vidalia/config/ServerSettings.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -75,13 +75,13 @@ ServerSettings::ServerSettings(TorControl *torControl)
setDefault(SETTING_RELAY_BANDWIDTH_BURST, 10485760);
setDefault(SETTING_EXITPOLICY,
ExitPolicy(ExitPolicy::Middleman).toString());
- setDefault(SETTING_ENABLE_UPNP, false);
+ setDefault(SETTING_ENABLE_UPNP, false);
setDefault(SETTING_BRIDGE_RELAY, false);
setDefault(SETTING_PUBLISH_SERVER_DESCRIPTOR, "1");
}
/** Applies the current server configuration settings to Tor. If <b>errmsg</b>
- * is specified and an error occurs while applying the settings, it will be
+ * is specified and an error occurs while applying the settings, it will be
* set to a string describing the error. */
bool
ServerSettings::apply(QString *errmsg)
@@ -100,26 +100,26 @@ ServerSettings::apply(QString *errmsg)
torrc->setValue(SETTING_ORPORT,
volatileValue(SETTING_ORPORT).toString());
/* Server DirPort */
- torrc->setValue(SETTING_DIRPORT,
+ torrc->setValue(SETTING_DIRPORT,
volatileValue(SETTING_DIRPORT).toString());
/* Server Exit Policy */
torrc->clear(QStringList() << SETTING_EXITPOLICY);
- if(volatileValue(SETTING_BRIDGE_RELAY).toBool() ||
+ if(volatileValue(SETTING_BRIDGE_RELAY).toBool() ||
volatileValue(SETTING_NONEXIT_RELAY).toBool()) {
torrc->setValue(SETTING_EXITPOLICY, "reject *:*");
} else {
torrc->setValue(SETTING_EXITPOLICY, volatileValue(SETTING_EXITPOLICY).toString());
}
/* Server bandwidth settings */
- torrc->setValue((torVersion >= 0x020001 ? SETTING_RELAY_BANDWIDTH_RATE
+ torrc->setValue((torVersion >= 0x020001 ? SETTING_RELAY_BANDWIDTH_RATE
: SETTING_BANDWIDTH_RATE),
QString::number(volatileValue(SETTING_BANDWIDTH_RATE).toUInt()) + " bytes");
torrc->setValue((torVersion >= 0x020001 ? SETTING_RELAY_BANDWIDTH_BURST
: SETTING_BANDWIDTH_BURST),
QString::number(volatileValue(SETTING_BANDWIDTH_BURST).toUInt()) + " bytes");
-
+
/* Server Contact Information */
- QString contact =
+ QString contact =
volatileValue(SETTING_CONTACT).toString().trimmed();
QString defaultContact = defaultValue(SETTING_CONTACT).toString();
if ((contact == defaultContact) ||
@@ -128,7 +128,7 @@ ServerSettings::apply(QString *errmsg)
contact = "";
}
torrc->setValue(SETTING_CONTACT, scrub_email_addr(contact));
-
+
/* Set if we're a bridge relay */
if (volatileValue(SETTING_BRIDGE_RELAY).toBool()) {
torrc->setValue(SETTING_BRIDGE_RELAY, "1");
@@ -144,8 +144,8 @@ ServerSettings::apply(QString *errmsg)
} else {
QStringList resetKeys;
quint32 torVersion = torControl()->getTorVersion();
- resetKeys << SETTING_ORPORT
- << SETTING_NICKNAME
+ resetKeys << SETTING_ORPORT
+ << SETTING_NICKNAME
<< SETTING_DIRPORT
<< SETTING_CONTACT
<< SETTING_EXITPOLICY
@@ -216,8 +216,8 @@ ServerSettings::torValue(const QString &key) const
return AbstractTorSettings::torValue(key);
}
-/** Enables or disables running Tor as a server.
- * \param enable Whether to enable or disable the Tor server.
+/** Enables or disables running Tor as a server.
+ * \param enable Whether to enable or disable the Tor server.
*/
void
ServerSettings::setServerEnabled(bool enable)
@@ -338,7 +338,7 @@ ServerSettings::getNickname()
nickname = defaultValue(SETTING_NICKNAME).toString();
}
/* Ensure the nickname contains only valid characters and is not too long. */
- return ensure_valid_chars(nickname,
+ return ensure_valid_chars(nickname,
VALID_NICKNAME_CHARS).left(MAX_NICKNAME_LEN);
}
@@ -528,7 +528,7 @@ ServerSettings::accountingMaxAmount()
return 0;
return parts.at(0).trimmed().toInt();
}
-
+
return 0;
}
@@ -541,7 +541,7 @@ ServerSettings::accountingMaxUnit()
return QString();
return parts.at(1).trimmed();
}
-
+
return QString();
}
@@ -554,7 +554,7 @@ ServerSettings::accountingStartDwm()
return QString();
return parts.at(0).trimmed();
}
-
+
return QString();
}
@@ -567,7 +567,7 @@ ServerSettings::accountingStartDay()
return 1;
return parts.at(1).trimmed().toInt();
}
-
+
return 1;
}
@@ -582,6 +582,6 @@ ServerSettings::accountingStartTime()
return parts.at(2).trimmed();
return parts.at(1).trimmed();
}
-
+
return QString();
}
diff --git a/src/vidalia/config/TorSettings.cpp b/src/vidalia/config/TorSettings.cpp
index 85164d0..0a7b2d1 100644
--- a/src/vidalia/config/TorSettings.cpp
+++ b/src/vidalia/config/TorSettings.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -32,6 +32,7 @@
#define SETTING_DEFAULTS_TORRC "DefaultsTorrc"
#define SETTING_CONTROL_ADDR "ControlListenAddress"
#define SETTING_CONTROL_PORT "ControlPort"
+#define SETTING_SOCKS_PORT "SocksPort"
#define SETTING_SOCKET_PATH "ControlSocket"
#define SETTING_CONTROL_METHOD "ControlMethod"
#define SETTING_AUTH_TOKEN "AuthToken"
@@ -86,6 +87,7 @@ TorSettings::TorSettings(TorControl *torControl)
setDefault(SETTING_DEFAULTS_TORRC,Vidalia::dataDirectory() + "/defaults_torrc");
setDefault(SETTING_CONTROL_ADDR, "127.0.0.1");
setDefault(SETTING_CONTROL_PORT, 9051);
+ setDefault(SETTING_SOCKS_PORT, 9050);
setDefault(SETTING_AUTH_METHOD, toString(DEFAULT_AUTH_METHOD));
setDefault(SETTING_CONTROL_METHOD, DEFAULT_CONTROL_METHOD);
setDefault(SETTING_SOCKET_PATH, DEFAULT_SOCKET_PATH);
@@ -102,9 +104,6 @@ bool
TorSettings::apply(QString *errmsg)
{
Torrc *torrc = Vidalia::torrc();
-
- torrc->setValue(SETTING_CONTROL_PORT,
- QString::number(volatileValue(SETTING_CONTROL_PORT).toInt()));
torrc->clear(QStringList()
<< TOR_ARG_SOCKSPORT
@@ -114,24 +113,25 @@ TorSettings::apply(QString *errmsg)
if(volatileValue(SETTING_AUTOCONTROL).toBool()) {
torrc->setValue(SETTING_CONTROL_PORT, "auto");
- torrc->setValue(TOR_ARG_SOCKSPORT, "auto");
+ torrc->setValue(SETTING_SOCKS_PORT, "auto");
torrc->setValue(TOR_ARG_CONTROLFILE, QString("%1/port.conf").arg(getDataDirectory()));
} else {
- QString socks = "9050", control = "9051";
+ QString socks = volatileValue(SETTING_SOCKS_PORT).toString();
+ QString control = volatileValue(SETTING_CONTROL_PORT).toString();
{
- with_torrc_value(TOR_ARG_SOCKSPORT)
+ with_torrc_value(SETTING_SOCKS_PORT)
socks = ret.at(0);
}
{
- with_torrc_value(TOR_ARG_SOCKSPORT)
+ with_torrc_value(SETTING_CONTROL_PORT)
control = ret.at(0);
}
- torrc->setValue(TOR_ARG_SOCKSPORT, socks);
+ torrc->setValue(SETTING_SOCKS_PORT, socks);
torrc->setValue(SETTING_CONTROL_PORT, control);
}
QString hashedPassword;
- AuthenticationMethod authMethod =
+ AuthenticationMethod authMethod =
toAuthenticationMethod(localValue(SETTING_AUTH_METHOD).toString());
switch (authMethod) {
case CookieAuth:
@@ -139,7 +139,7 @@ TorSettings::apply(QString *errmsg)
torrc->setValue(TOR_ARG_HASHED_PASSWORD, "");
break;
case PasswordAuth:
- hashedPassword = useRandomPassword()
+ hashedPassword = useRandomPassword()
? hashPassword(randomPassword())
: hashPassword(getControlPassword());
if (hashedPassword.isEmpty()) {
@@ -161,7 +161,7 @@ TorSettings::apply(QString *errmsg)
/** Gets the location of Tor's data directory. */
QString
-TorSettings::getDataDirectory()
+TorSettings::getDataDirectory() const
{
with_torrc_value(SETTING_DATA_DIRECTORY) {
return ret.at(0);
@@ -206,7 +206,7 @@ TorSettings::getTorrc() const
}
/** Sets the torrc that will be used when starting Tor.
- * \param torrc The torrc to use.
+ * \param torrc The torrc to use.
*/
void
TorSettings::setTorrc(const QString &torrc)
@@ -226,7 +226,7 @@ TorSettings::getDefaultsTorrc() const
}
/** Sets the defaults torrc that will be used when starting Tor.
- * \param torrc The defaults torrc to use.
+ * \param torrc The defaults torrc to use.
*/
void
TorSettings::setDefaultsTorrc(const QString &torrc)
@@ -241,7 +241,7 @@ TorSettings::getControlAddress() const
QString addr = defaultValue(SETTING_CONTROL_ADDR).toString();
with_torrc_value(SETTING_CONTROL_ADDR) {
addr = ret.at(0);
- }
+ }
return QHostAddress(addr);
}
@@ -263,6 +263,17 @@ TorSettings::getControlPort() const
return port;
}
+/** Get the socks port used to connect to Tor */
+quint16
+TorSettings::getSocksPort() const
+{
+ quint16 port = defaultValue(SETTING_SOCKS_PORT).toInt();
+ with_torrc_value(SETTING_SOCKS_PORT) {
+ port = (quint16)ret.at(0).toUInt();
+ }
+ return port;
+}
+
/** Set the control port used to connect to Tor */
void
TorSettings::setControlPort(quint16 port)
@@ -270,8 +281,15 @@ TorSettings::setControlPort(quint16 port)
setVolatileValue(SETTING_CONTROL_PORT, port);
}
+/** Set the socks port used to connect to Tor */
+void
+TorSettings::setSocksPort(quint16 port)
+{
+ setVolatileValue(SETTING_SOCKS_PORT, port);
+}
+
/** Get the path for ControlSocket */
-QString
+QString
TorSettings::getSocketPath() const
{
with_torrc_value(SETTING_SOCKET_PATH) {
@@ -281,7 +299,7 @@ TorSettings::getSocketPath() const
}
/** Set the path for ControlSocket */
-void
+void
TorSettings::setSocketPath(const QString &path)
{
setVolatileValue(SETTING_SOCKET_PATH, path);
@@ -295,7 +313,7 @@ TorSettings::getControlMethod() const
}
/** Set the control method */
-void
+void
TorSettings::setControlMethod(ControlMethod::Method method)
{
setValue(SETTING_CONTROL_METHOD, ControlMethod::toString(method));
@@ -439,7 +457,7 @@ TorSettings::toString(AuthenticationMethod method) const
* description of the authentication method given in <b>authMethod</b>. */
TorSettings::AuthenticationMethod
TorSettings::toAuthenticationMethod(const QString &authMethod) const
-{
+{
QString str = authMethod.toLower();
if (str == toString(NullAuth))
return NullAuth;
@@ -463,7 +481,7 @@ QString
TorSettings::hashPassword(const QString &password)
{
QByteArray salt;
-
+
/* Generate an 8 octet salt value. Bail if we fail to generate enough
* random bytes (unlikely). */
while (salt.size() < 8) {
@@ -510,13 +528,13 @@ TorSettings::bootstrapFrom() const
return QDir::convertSeparators(value(SETTING_BOOTSTRAP_FROM).toString());
}
-bool
+bool
TorSettings::autoControlPort() const
{
return getControlPort() == 0;
}
-void
+void
TorSettings::setAutoControlPort(const bool autoControl)
{
setVolatileValue(SETTING_AUTOCONTROL, autoControl);
diff --git a/src/vidalia/config/TorSettings.h b/src/vidalia/config/TorSettings.h
index 2fdf1e5..1352518 100644
--- a/src/vidalia/config/TorSettings.h
+++ b/src/vidalia/config/TorSettings.h
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -35,22 +35,22 @@ public:
PasswordAuth, /**< Use a hashed password for authentication. */
UnknownAuth /**< Unknown authentication method. */
};
-
+
/** Default constructor. */
TorSettings(TorControl *torControl = 0);
- /** Applies any changes to Tor's control port or authentication settings. */
+ /** Applies any changes to Tor's control port or authentication settings. */
bool apply(QString *errmsg = 0);
/** Gets the name and path of Tor's executable. */
QString getExecutable() const;
/** Sets the name and path of Tor's executable. */
void setExecutable(const QString &torExecutable);
-
+
/** Gets the location of Tor's data directory. */
- QString getDataDirectory();
+ QString getDataDirectory() const;
/** Sets the location to use for Tor's data directory. */
void setDataDirectory(const QString &dataDir);
-
+
/** Gets the torrc to use when starting Tor. */
QString getTorrc() const;
/** Sets the torrc to use when starting Tor. */
@@ -60,16 +60,20 @@ public:
QString getDefaultsTorrc() const;
/** Sets the defaults torrc to use when starting Tor. */
void setDefaultsTorrc(const QString &torrc);
-
+
/** Get Tor's control interface address. */
QHostAddress getControlAddress() const;
/** Set Tor's control interface address. */
void setControlAddress(const QHostAddress &addr);
-
+
/** Get the control port. */
quint16 getControlPort() const;
+ /** Get the socks port. */
+ quint16 getSocksPort() const;
/** Set the control port. */
void setControlPort(quint16 port);
+ /** Set the socks port. */
+ void setSocksPort(quint16 port);
/** Get the path for ControlSocket */
QString getSocketPath() const;
@@ -89,7 +93,7 @@ public:
/** Set the path for ControlSocket */
void setSocketPath(const QString &path);
-
+
/** Returns the plaintext (i.e., not hashed) control password used when
* authenticating to Tor. */
QString getControlPassword() const;
@@ -126,7 +130,7 @@ public:
/** Generates a random control password consisting of PASSWORD_LEN
* characters. */
static QString randomPassword();
- /** Returns the hash of <b>password</b> as given by the command
+ /** Returns the hash of <b>password</b> as given by the command
* "tor --hash-password foo". */
static QString hashPassword(const QString &password);
diff --git a/src/vidalia/config/VSettings.cpp b/src/vidalia/config/VSettings.cpp
index 020485b..c1e2dfc 100644
--- a/src/vidalia/config/VSettings.cpp
+++ b/src/vidalia/config/VSettings.cpp
@@ -3,14 +3,14 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
/*
** \file VSettings.cpp
-** \brief Stores and retrieves settings from Vidalia's configuration file.
+** \brief Stores and retrieves settings from Vidalia's configuration file.
*/
#include "VSettings.h"
@@ -114,7 +114,7 @@ VSettings::allSettings() const
QVariant
VSettings::volatileValue(const QString &key,
- const QVariant &defaultVal)
+ const QVariant &defaultVal) const
{
if(_volatileSettings.count(key) == 0)
return defaultVal;
diff --git a/src/vidalia/config/VSettings.h b/src/vidalia/config/VSettings.h
index 539f9a8..9aaf1dc 100644
--- a/src/vidalia/config/VSettings.h
+++ b/src/vidalia/config/VSettings.h
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -31,7 +31,7 @@ public:
VSettings(const QString group = QString());
/** Default destructor */
~VSettings();
-
+
/** Returns the location of Vidalia's configuration settings file. */
static QString settingsFile();
/** Returns true if Vidalia's configuration settings file already exists. */
@@ -60,7 +60,7 @@ protected:
QMap<QString, QVariant> allSettings() const;
virtual QVariant volatileValue(const QString &key,
- const QVariant &defaultVal = QVariant());
+ const QVariant &defaultVal = QVariant()) const;
virtual void setVolatileValue(const QString &key, const QVariant &val);
private:
diff --git a/src/vidalia/config/torrc/Torrc.cpp b/src/vidalia/config/torrc/Torrc.cpp
index 7d2ad6c..d1589b9 100644
--- a/src/vidalia/config/torrc/Torrc.cpp
+++ b/src/vidalia/config/torrc/Torrc.cpp
@@ -3,12 +3,12 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
-/*
+/*
** \file Torrc.cpp
** \brief Handles the interaction with the torrc file
*/
@@ -27,6 +27,9 @@ Torrc::Torrc(const QString &torrcPath, const QString &defaultsPath) :
void
Torrc::load(const QString &torrcPath, const QString &defaultsPath)
{
+ _torrcMap.clear();
+ _defaultsMap.clear();
+
_lines = _parser.parse(torrcPath, _torrcMap);
if(not defaultsPath.isEmpty())
@@ -46,7 +49,7 @@ Torrc::apply(TorControl *tc, QString *errmsg)
*errmsg = "Couldn't open torrc file";
return false;
}
-
+
QString torrc_contents = "";
QString current_line;
@@ -59,11 +62,14 @@ Torrc::apply(TorControl *tc, QString *errmsg)
if(torrc_info.isWritable())
torrc.write(torrc_contents.trimmed().toLatin1());
+ else
+ vWarn("Torrc is not writable!");
+
torrc.close();
clearAll();
load(_torrcPath);
-
+
changed = false;
bool ret = true;
@@ -160,17 +166,17 @@ Torrc::setValue(const QString &key, const QString &value, const QString &comment
changed = true;
- TorOpt opt(_parser.getTorOpt(key));
TorrcLine *line = new TorrcLine(QString("%1 %2")
.arg(key)
.arg(value).trimmed(),
comment.trimmed());
-
if(key.isEmpty()) {
_lines << line;
return;
}
+ TorOpt opt(_parser.getTorOpt(key));
+
if(opt.isMultivalued()) {
bool found = false;
QPair<QString,TorOpt> val;
@@ -180,7 +186,7 @@ Torrc::setValue(const QString &key, const QString &value, const QString &comment
break;
}
}
-
+
opt.setLine(line);
if(!found)
@@ -241,7 +247,5 @@ Torrc::setRawContents(const QString &contents, QString *errmsg, TorControl *tc)
load(_torrcPath);
- if(tc && tc->isConnected())
- return tc->signal(TorSignal::Reload, errmsg);
- return true;
+ return apply(tc, errmsg);
}
diff --git a/src/vidalia/config/torrc/TorrcParser.cpp b/src/vidalia/config/torrc/TorrcParser.cpp
index ed21e8e..2c5c679 100644
--- a/src/vidalia/config/torrc/TorrcParser.cpp
+++ b/src/vidalia/config/torrc/TorrcParser.cpp
@@ -3,8 +3,8 @@
** LICENSE file, found in the top level directory of this distribution. If you
** did not receive the LICENSE file with this file, you may obtain it from the
** Vidalia source package distributed by the Vidalia Project at
-** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
-** including this file, may be copied, modified, propagated, or distributed
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
** except according to the terms described in the LICENSE file.
*/
@@ -237,7 +237,7 @@ TorrcParser::TorrcParser()
_torOpts << TorOpt("MinUptimeHidServDirectoryV2", TorOpt::TimeInterval, "25 hours");
_torOpts << TorOpt("VoteOnHidServDirectoriesV2", TorOpt::Boolean, "1");
_torOpts << TorOpt("_UsingTestNetworkDefaults", TorOpt::Boolean, "0");
-
+
_regexp = createRegExp();
}
@@ -278,7 +278,7 @@ TorrcParser::parse(const QString &path,
vWarn("Can't read torrc file, aborting parsing.");
return lines;
}
-
+
if(not torrc.open(QIODevice::ReadOnly)) {
vWarn("Can't open torrc file, aborting parsing.");
return lines;
@@ -288,7 +288,7 @@ TorrcParser::parse(const QString &path,
torrc.close();
lines = toTorrcLines(raw_contents);
-
+
QString key, value;
int sp_pos = -1;
@@ -317,12 +317,13 @@ TorrcParser::parse(const QString &path,
TorOpt opt(getTorOpt(key));
opt.setLine(line);
+
if(map.contains(key) and opt.isMultivalued())
map.insertMulti(key, QPair<QString, TorOpt>(value, opt));
else
map.insert(key, QPair<QString, TorOpt>(value, opt));
}
-
+
return lines;
}
@@ -339,7 +340,7 @@ TorrcParser::stripContents(QString contents)
stripped_contents += "\n";
continue;
}
-
+
current_line = line.mid(0, comment_pos).trimmed();
if(current_line.size() == 0)
continue;
@@ -363,7 +364,7 @@ TorrcParser::toTorrcLines(QString contents)
lines << new TorrcLine(line.trimmed());
continue;
}
-
+
current_line = line.mid(0, comment_pos).trimmed().replace("\t", " ");
if(current_line.size() == 0) {
// The line is just a comment
@@ -375,9 +376,9 @@ TorrcParser::toTorrcLines(QString contents)
return lines;
}
-
+
QList<TorrcLine *>
-TorrcParser::findValueLines(TorrcLine *line,
+TorrcParser::findValueLines(TorrcLine *line,
const QList<TorrcLine *> &lines) const
{
QList<TorrcLine *> collected;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits