[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [vidalia/alpha] Add accounting options to ServerPage and ServerSettings
commit ae18cd4f362b5a215ef76f8e8953552cdc5bde35
Author: Tomás Touceda <chiiph@xxxxxxxxxxxxxx>
Date: Wed Mar 7 16:44:23 2012 -0300
Add accounting options to ServerPage and ServerSettings
---
changes/bug2944 | 2 +
src/vidalia/config/ServerPage.cpp | 69 ++++++++
src/vidalia/config/ServerPage.h | 5 +
src/vidalia/config/ServerPage.ui | 281 ++++++++++++++++++++++++++++-----
src/vidalia/config/ServerSettings.cpp | 108 +++++++++++++-
src/vidalia/config/ServerSettings.h | 20 +++
6 files changed, 445 insertions(+), 40 deletions(-)
diff --git a/changes/bug2944 b/changes/bug2944
new file mode 100644
index 0000000..968befb
--- /dev/null
+++ b/changes/bug2944
@@ -0,0 +1,2 @@
+ o Add accounting options to the relay configuration panel. Fixes bug
+ 2944.
\ No newline at end of file
diff --git a/src/vidalia/config/ServerPage.cpp b/src/vidalia/config/ServerPage.cpp
index 51514ca..eb23c0b 100644
--- a/src/vidalia/config/ServerPage.cpp
+++ b/src/vidalia/config/ServerPage.cpp
@@ -106,6 +106,11 @@ ServerPage::ServerPage(QWidget *parent)
connect(ui.lblWhatsThis, SIGNAL(linkActivated(QString)),
this, SLOT(linkActivated(QString)));
+ connect(ui.chkAccounting, SIGNAL(stateChanged(int)),
+ this, SLOT(toggleAccounting(int)));
+ connect(ui.cmbTime, SIGNAL(currentIndexChanged(const QString &)),
+ this, SLOT(toggleDisplayDay(const QString &)));
+
/* Set validators for address, mask and various port number fields */
ui.lineServerNickname->setValidator(new NicknameValidator(this));
ui.lineServerPort->setValidator(new QIntValidator(1, 65535, this));
@@ -338,6 +343,16 @@ ServerPage::save(QString &errmsg)
saveBandwidthLimits();
saveExitPolicies();
+ if(ui.chkAccounting->checkState() != Qt::Checked)
+ _settings->disableAccounting();
+ else {
+ _settings->setAccountingMax(ui.spnAmount->value(),
+ ui.cmbUnit->currentText());
+ _settings->setAccountingStart(ui.cmbTime->currentText(),
+ ui.spnDay->value(),
+ ui.spnTime->text());
+ }
+
#if defined(USE_MINIUPNPC)
_settings->setUpnpEnabled(ui.chkEnableUpnp->isChecked());
#endif
@@ -377,6 +392,19 @@ ServerPage::load()
loadExitPolicies();
loadBridgeIdentity();
+ ui.chkAccounting->setCheckState(Qt::Unchecked);
+ toggleAccounting(Qt::Unchecked);
+
+ if(_settings->isAccountingEnabled()) {
+ ui.chkAccounting->setCheckState(Qt::Checked);
+ ui.spnAmount->setValue(_settings->accountingMaxAmount());
+ ui.cmbUnit->setCurrentIndex(ui.cmbUnit->findText(_settings->accountingMaxUnit()));
+ ui.cmbTime->setCurrentIndex(ui.cmbTime->findText(_settings->accountingStartDwm()));
+ if(ui.spnDay->isVisible())
+ ui.spnDay->setValue(_settings->accountingStartDay());
+ ui.spnTime->setTime(QTime::fromString(_settings->accountingStartTime(), "h:mm"));
+ }
+
#if defined(USE_MINIUPNPC)
ui.chkEnableUpnp->setChecked(_settings->isUpnpEnabled());
#endif
@@ -681,3 +709,44 @@ err:
dlg.exec();
}
+void
+ServerPage::toggleAccounting(int state)
+{
+ if(state == Qt::Checked) {
+ ui.lblPush->setVisible(true);
+ ui.spnAmount->setVisible(true);
+ ui.cmbUnit->setVisible(true);
+ ui.lblPer->setVisible(true);
+ ui.cmbTime->setVisible(true);
+ if(ui.cmbTime->currentText() == "month" or
+ ui.cmbTime->currentText() == "week") {
+ ui.spnDay->setVisible(true);
+ ui.lblDay->setVisible(true);
+ }
+ ui.lblAt->setVisible(true);
+ ui.spnTime->setVisible(true);
+ ui.lblTime->setVisible(true);
+ } else {
+ ui.lblPush->setVisible(false);
+ ui.spnAmount->setVisible(false);
+ ui.cmbUnit->setVisible(false);
+ ui.lblPer->setVisible(false);
+ ui.cmbTime->setVisible(false);
+ ui.spnDay->setVisible(false);
+ ui.lblDay->setVisible(false);
+ ui.lblTime->setVisible(false);
+ ui.lblAt->setVisible(false);
+ ui.spnTime->setVisible(false);
+ }
+}
+
+void
+ServerPage::toggleDisplayDay(const QString &str)
+{
+ ui.spnDay->setVisible(str == "month" or str == "week");
+ ui.spnDay->setMinimum(1);
+ if(str == "month")
+ ui.spnDay->setMaximum(28);
+ else
+ ui.spnDay->setMaximum(7);
+}
diff --git a/src/vidalia/config/ServerPage.h b/src/vidalia/config/ServerPage.h
index 54549a2..46b38af 100644
--- a/src/vidalia/config/ServerPage.h
+++ b/src/vidalia/config/ServerPage.h
@@ -82,6 +82,11 @@ private slots:
/** Called when the user clicks on a QLabel containing a hyperlink. */
void linkActivated(const QString &url);
+ /** Called when the user toggles the Enable Accounting checkbox */
+ void toggleAccounting(int state);
+ /** Called when the user selects a new item from cmbTime */
+ void toggleDisplayDay(const QString &str);
+
private:
/** Index values of rate values in the bandwidth limits dropdown box. */
enum BwRateIndex {
diff --git a/src/vidalia/config/ServerPage.ui b/src/vidalia/config/ServerPage.ui
index ec277f7..f26f7e4 100644
--- a/src/vidalia/config/ServerPage.ui
+++ b/src/vidalia/config/ServerPage.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>658</width>
- <height>578</height>
+ <width>704</width>
+ <height>688</height>
</rect>
</property>
<property name="contextMenuPolicy">
@@ -547,26 +547,32 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
</widget>
</item>
<item row="1" column="0">
- <layout class="QHBoxLayout">
- <item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="2" colspan="6">
<layout class="QVBoxLayout">
<item>
- <widget class="QLabel" name="label_2">
+ <widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="maximumSize">
+ <size>
+ <width>100</width>
+ <height>20</height>
+ </size>
+ </property>
<property name="text">
- <string>Average Rate</string>
+ <string>Maximum Rate</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout">
<item>
- <widget class="QLineEdit" name="lineAvgRateLimit">
+ <widget class="QLineEdit" name="lineMaxRateLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -576,11 +582,11 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
<property name="maximumSize">
<size>
<width>60</width>
- <height>22</height>
+ <height>20</height>
</size>
</property>
<property name="toolTip">
- <string>Long-term average bandwidth limit</string>
+ <string>Peak bandwidth rate limit</string>
</property>
<property name="maxLength">
<number>12</number>
@@ -591,41 +597,51 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
</widget>
</item>
<item>
- <widget class="QLabel" name="label_6">
+ <widget class="QLabel" name="label_7">
<property name="text">
<string>KB/s</string>
</property>
</widget>
</item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>71</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</item>
</layout>
</item>
- <item>
+ <item row="0" column="0" colspan="2">
<layout class="QVBoxLayout">
<item>
- <widget class="QLabel" name="label_5">
+ <widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="maximumSize">
- <size>
- <width>100</width>
- <height>20</height>
- </size>
- </property>
<property name="text">
- <string>Maximum Rate</string>
+ <string>Average Rate</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout">
<item>
- <widget class="QLineEdit" name="lineMaxRateLimit">
+ <widget class="QLineEdit" name="lineAvgRateLimit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -635,11 +651,11 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
<property name="maximumSize">
<size>
<width>60</width>
- <height>20</height>
+ <height>22</height>
</size>
</property>
<property name="toolTip">
- <string>Peak bandwidth rate limit</string>
+ <string>Long-term average bandwidth limit</string>
</property>
<property name="maxLength">
<number>12</number>
@@ -650,28 +666,12 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
</widget>
</item>
<item>
- <widget class="QLabel" name="label_7">
+ <widget class="QLabel" name="label_6">
<property name="text">
<string>KB/s</string>
</property>
</widget>
</item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>71</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</item>
</layout>
@@ -682,6 +682,209 @@ problem with your relay. You might also include your PGP or GPG fingerprint.</st
</widget>
</item>
<item>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="1" column="4">
+ <widget class="QComboBox" name="cmbTime">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>80</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <item>
+ <property name="text">
+ <string>day</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>week</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>month</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="chkAccounting">
+ <property name="text">
+ <string>Enable accounting</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="9">
+ <widget class="QTimeEdit" name="spnTime">
+ <property name="maximumSize">
+ <size>
+ <width>60</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="displayFormat">
+ <string>h:mm</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="5">
+ <widget class="QLabel" name="lblAt">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>at</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QLabel" name="lblPer">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>40</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>per</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="7">
+ <widget class="QSpinBox" name="spnDay">
+ <property name="maximumSize">
+ <size>
+ <width>40</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>31</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QComboBox" name="cmbUnit">
+ <property name="maximumSize">
+ <size>
+ <width>80</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <item>
+ <property name="text">
+ <string>bytes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>KB</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MB</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>GB</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>TB</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="lblPush">
+ <property name="text">
+ <string>Push no more than</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="8">
+ <widget class="QLabel" name="lblTime">
+ <property name="text">
+ <string>time</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="6">
+ <widget class="QLabel" name="lblDay">
+ <property name="maximumSize">
+ <size>
+ <width>50</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>day</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="10">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="spnAmount">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/vidalia/config/ServerSettings.cpp b/src/vidalia/config/ServerSettings.cpp
index 2876d7a..2593dda 100644
--- a/src/vidalia/config/ServerSettings.cpp
+++ b/src/vidalia/config/ServerSettings.cpp
@@ -49,7 +49,8 @@
#define SETTING_RELAY_BANDWIDTH_RATE "RelayBandwidthRate"
#define SETTING_RELAY_BANDWIDTH_BURST "RelayBandwidthBurst"
#define SETTING_PUBLISH_SERVER_DESCRIPTOR "PublishServerDescriptor"
-
+#define SETTING_ACCOUNTING_MAX "AccountingMax"
+#define SETTING_ACCOUNTING_START "AccountingStart"
/** Constructor.
* \param torControl a TorControl object used to read and apply the server
@@ -137,6 +138,9 @@ ServerSettings::apply(QString *errmsg)
torrc->setValue(SETTING_BRIDGE_RELAY, "0");
torrc->setValue(SETTING_PUBLISH_SERVER_DESCRIPTOR, "1");
}
+
+ torrc->setValue(SETTING_ACCOUNTING_MAX, volatileValue(SETTING_ACCOUNTING_MAX).toString());
+ torrc->setValue(SETTING_ACCOUNTING_START, volatileValue(SETTING_ACCOUNTING_START).toString());
} else {
QStringList resetKeys;
quint32 torVersion = torControl()->getTorVersion();
@@ -479,3 +483,105 @@ ServerSettings::setUpnpEnabled(bool enabled)
#endif
}
+bool
+ServerSettings::isAccountingEnabled()
+{
+ with_torrc_value(SETTING_ACCOUNTING_MAX) {
+ return true;
+ }
+
+ return false;
+}
+
+void
+ServerSettings::disableAccounting()
+{
+ Vidalia::torrc()->clear(QStringList() << SETTING_ACCOUNTING_MAX);
+}
+
+void
+ServerSettings::setAccountingMax(int amount, const QString &unit)
+{
+ setVolatileValue(SETTING_ACCOUNTING_MAX, QString("%1 %2").arg(amount).arg(unit));
+}
+
+void
+ServerSettings::setAccountingStart(const QString &dwm,
+ int day,
+ const QString &time)
+{
+ if(dwm == "month" or dwm == "week")
+ setVolatileValue(SETTING_ACCOUNTING_START,
+ QString("%1 %2 %3").arg(dwm)
+ .arg(day).arg(time));
+ else
+ setVolatileValue(SETTING_ACCOUNTING_START,
+ QString("%1 %2").arg(dwm).arg(time));
+}
+
+int
+ServerSettings::accountingMaxAmount()
+{
+ with_torrc_value(SETTING_ACCOUNTING_MAX) {
+ QStringList parts = ret.at(0).split(" ");
+ if(parts.size() < 2)
+ return 0;
+ return parts.at(0).trimmed().toInt();
+ }
+
+ return 0;
+}
+
+const QString
+ServerSettings::accountingMaxUnit()
+{
+ with_torrc_value(SETTING_ACCOUNTING_MAX) {
+ QStringList parts = ret.at(0).split(" ");
+ if(parts.size() < 2)
+ return QString();
+ return parts.at(1).trimmed();
+ }
+
+ return QString();
+}
+
+const QString
+ServerSettings::accountingStartDwm()
+{
+ with_torrc_value(SETTING_ACCOUNTING_START) {
+ QStringList parts = ret.at(0).split(" ");
+ if(parts.size() < 2)
+ return QString();
+ return parts.at(0).trimmed();
+ }
+
+ return QString();
+}
+
+int
+ServerSettings::accountingStartDay()
+{
+ with_torrc_value(SETTING_ACCOUNTING_START) {
+ QStringList parts = ret.at(0).split(" ");
+ if(parts.size() < 3)
+ return 1;
+ return parts.at(1).trimmed().toInt();
+ }
+
+ return 1;
+}
+
+const QString
+ServerSettings::accountingStartTime()
+{
+ with_torrc_value(SETTING_ACCOUNTING_START) {
+ QStringList parts = ret.at(0).split(" ");
+ if(parts.size() < 2)
+ return QString();
+ if(parts.size() == 3)
+ return parts.at(2).trimmed();
+ return parts.at(1).trimmed();
+ }
+
+ return QString();
+}
diff --git a/src/vidalia/config/ServerSettings.h b/src/vidalia/config/ServerSettings.h
index 023d250..9f7831d 100644
--- a/src/vidalia/config/ServerSettings.h
+++ b/src/vidalia/config/ServerSettings.h
@@ -106,6 +106,26 @@ public:
/** Sets whether Vidalia should try to configure port forwarding using UPnP. */
void setUpnpEnabled(bool enabled);
+ /** Returns true if accounting is enabled */
+ bool isAccountingEnabled();
+ /** Disables accounting options */
+ void disableAccounting();
+ /** Sets AccountingMax to amount unit */
+ void setAccountingMax(int amount, const QString &unit);
+ /** Sets AccountingStart for dwm (day/week/month) day and time */
+ void setAccountingStart(const QString &dwm, int day, const QString &time);
+
+ /** Returns the max amount of bytes/KB/etc for accounting */
+ int accountingMaxAmount();
+ /** Returns the unit for the max amount */
+ const QString accountingMaxUnit();
+ /** Returns the configured AccountingStart (day/week/month) */
+ const QString accountingStartDwm();
+ /** Returns the day of the week/month for AccountingStart */
+ int accountingStartDay();
+ /** Returns the time of day for AccountingStart */
+ const QString accountingStartTime();
+
protected:
/** Virtual method called when we retrieve a server-related setting from Tor.
* Currently this just translates BandwidthFoo to RelayBandwidthFoo when
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits