30#if defined(USE_MINIUPNPC)
39#define CABLE256_AVG_RATE (32*1024)
40#define CABLE256_MAX_RATE (64*1024)
41#define CABLE512_AVG_RATE (64*1024)
42#define CABLE512_MAX_RATE (128*1024)
43#define CABLE768_AVG_RATE (96*1024)
44#define CABLE768_MAX_RATE (192*1024)
45#define T1_AVG_RATE (192*1024)
46#define T1_MAX_RATE (384*1024)
47#define HIGHBW_AVG_RATE (5120*1024)
48#define HIGHBW_MAX_RATE (10240*1024)
50#define MIN_BANDWIDTH_RATE 20
53#define MAX_BANDWIDTH_RATE 2097151
56#define PORTS_HTTP (QStringList() << "80")
58#define PORTS_HTTPS (QStringList() << "443")
60#define PORTS_MAIL (QStringList() << "110" << "143" << "993" << "995")
63#define PORTS_IM (QStringList() << "706" << "1863" << "5050" << "5190" \
64 << "5222" << "5223" << "8300" << "8888")
67#define PORTS_IRC (QStringList() << "6660-6669" << "6697" << "7000-7001")
84 connect(
ui.cmboRate, SIGNAL(currentIndexChanged(
int)),
86 connect(
ui.lineAvgRateLimit, SIGNAL(editingFinished()),
88 connect(
ui.lineMaxRateLimit, SIGNAL(editingFinished()),
90 connect(
ui.rdoClientMode, SIGNAL(toggled(
bool)),
92 connect(
ui.rdoNonExitMode, SIGNAL(toggled(
bool)),
94 connect(
ui.rdoServerMode, SIGNAL(toggled(
bool)),
96 connect(
ui.rdoBridgeMode, SIGNAL(toggled(
bool)),
102 connect(
ui.btnCopyBridgeIdentity, SIGNAL(clicked()),
111 ui.lineServerPort->setValidator(
new QIntValidator(1, 65535,
this));
112 ui.lineDirPort->setValidator(
new QIntValidator(1, 65535,
this));
113 ui.lineAvgRateLimit->setValidator(
115 ui.lineMaxRateLimit->setValidator(
118#if defined(USE_MINIUPNPC)
121 ui.chkEnableUpnp->setVisible(
false);
122 ui.btnTestUpnp->setVisible(
false);
139 ui.retranslateUi(
this);
149 if (torVersion < 0x020008) {
150 ui.rdoBridgeMode->setEnabled(
false);
151 if (
ui.rdoBridgeMode->isChecked()) {
153 tr(
"Bridge Support Unavailable"),
154 p(tr(
"You have configured Tor to act as a bridge relay "
155 "for censored users, but your version of Tor does not "
156 "support bridges.")) +
157 p(tr(
"Please upgrade your Tor software or configure Tor to "
158 "act as a normal Tor relay.")),
175 ui.rdoBridgeMode->setEnabled(
true);
182 QString bridge =
ui.lblBridgeIdentity->text();
183 if (!bridge.isEmpty())
184 vApp->clipboard()->setText(bridge);
196 QString bridge, address, orPort, fingerprint;
198 if (
tc->isConnected()) {
199 tc->getInfo(
"address", address);
200 tc->getInfo(
"fingerprint", fingerprint);
201 tc->getConf(
"ORPort", orPort);
203 if (!address.isEmpty() && !orPort.isEmpty() && orPort !=
"0")
204 bridge = address +
":" + orPort +
" ";
205 if (!fingerprint.isEmpty())
206 bridge += fingerprint;
207 bridge = bridge.trimmed();
210 ui.lblBridgeIdentity->setText(bridge.isEmpty()
211 ? tr(
"Your bridge relay is not running.")
213 ui.lblYourBridgeRelayIs->setEnabled(!bridge.isEmpty());
214 ui.lblBridgeIdentity->setEnabled(!bridge.isEmpty());
215 ui.btnCopyBridgeIdentity->setEnabled(!bridge.isEmpty());
224 bool bridgeEnabled =
ui.rdoBridgeMode->isChecked();
225 bool relayEnabled =
ui.rdoServerMode->isChecked() ||
226 ui.rdoNonExitMode->isChecked();
230 ui.tabsMenu->setVisible(relayEnabled || bridgeEnabled);
234 ui.lblYourBridgeRelayIs->setVisible(bridgeEnabled);
235 ui.lblBridgeIdentity->setVisible(bridgeEnabled);
236 ui.btnCopyBridgeIdentity->setVisible(bridgeEnabled);
237 ui.chkPublishBridgeAddress->setVisible(bridgeEnabled);
238 ui.lblBridgeUsage->setVisible(bridgeEnabled
242 if(
ui.lineDirPort->text().length() != 0) {
246 ui.lineDirPort->clear();
247 ui.chkMirrorDirectory->setChecked(
false);
253 ui.lineDirPort->setEnabled(!bridgeEnabled);
254 ui.lblDirPort->setEnabled(!bridgeEnabled);
256 ui.chkMirrorDirectory->setEnabled(!bridgeEnabled);
260 ui.tabsMenu->setTabEnabled(2, !bridgeEnabled and !
ui.rdoNonExitMode->isChecked());
262 if(
ui.chkMirrorDirectory->isChecked()) {
263 ui.lblDirPort->setEnabled(!bridgeEnabled);
264 ui.lineDirPort->setEnabled(!bridgeEnabled);
300 if (
ui.rdoServerMode->isChecked() ||
301 ui.rdoNonExitMode->isChecked() ||
302 ui.rdoBridgeMode->isChecked()) {
304 if (
ui.lineServerPort->text().isEmpty() ||
305 ui.lineServerNickname->text().isEmpty()) {
306 errmsg = tr(
"You must specify at least a relay nickname and port.");
310 if (
ui.lineAvgRateLimit->text().isEmpty()) {
311 ui.lineAvgRateLimit->setText(QString::number(2097152/1024) );
313 if (
ui.lineMaxRateLimit->text().isEmpty()) {
314 ui.lineMaxRateLimit->setText(QString::number(5242880/1024) );
321 ||
ui.rdoNonExitMode->isChecked()
322 ||
ui.rdoBridgeMode->isChecked());
325 if (
ui.rdoBridgeMode->isChecked())
331 if (!
ui.rdoBridgeMode->isChecked()) {
341#if defined(USE_MINIUPNPC)
353 ui.rdoBridgeMode->setChecked(
true);
356 ui.rdoServerMode->setChecked(
true);
358 ui.rdoNonExitMode->setChecked(
true);
361 ui.rdoNonExitMode->setChecked(
true);
363 ui.rdoServerMode->setChecked(
true);
365 ui.rdoClientMode->setChecked(
true);
380#if defined(USE_MINIUPNPC)
431 ui.lineAvgRateLimit->setText(QString::number(avgRate/1024));
432 ui.lineMaxRateLimit->setText(QString::number(maxRate/1024));
441 switch (
ui.cmboRate->currentIndex()) {
463 avgRate = (
quint32)(
ui.lineAvgRateLimit->text().toUInt()*1024);
464 maxRate = (
quint32)(
ui.lineMaxRateLimit->text().toUInt()*1024);
485 ui.chkMisc->setChecked(
false);
494 ui.chkMisc->setChecked(
true);
503 if(
ui.rdoNonExitMode->isChecked()) {
507 bool rejectUnchecked =
ui.chkMisc->isChecked();
512 if (
ui.chkWebsites->isChecked() && !rejectUnchecked) {
514 }
else if (!
ui.chkWebsites->isChecked() && rejectUnchecked) {
517 if (
ui.chkSecWebsites->isChecked() && !rejectUnchecked) {
519 }
else if (!
ui.chkSecWebsites->isChecked() && rejectUnchecked) {
522 if (
ui.chkMail->isChecked() && !rejectUnchecked) {
524 }
else if (!
ui.chkMail->isChecked() && rejectUnchecked) {
527 if (
ui.chkIRC->isChecked() && !rejectUnchecked) {
529 }
else if (!
ui.chkIRC->isChecked() && rejectUnchecked) {
532 if (
ui.chkIM->isChecked() && !rejectUnchecked) {
534 }
else if (!
ui.chkIM->isChecked() && rejectUnchecked) {
537 if (!
ui.chkMisc->isChecked()) {
570 if (avgRate > burstRate) {
571 ui.lineMaxRateLimit->setText(QString::number(avgRate));
582#if defined(USE_MINIUPNPC)
584 ui.lineDirPort->text().toUInt(),
this);
603 if (!url.compare(
"#bridgeUsage"))
605 else if(!url.compare(
"#bridgeHelp"))
615 QMessageBox dlg(
this);
618 if (info.isEmpty()) {
621 QDateTime timeStarted;
622 QHash<QString,int> countrySummary;
623 QHash<QString,QString> keyvals;
628 if (!ok || !keyvals.contains(
"TimeStarted")
629 || !keyvals.contains(
"CountrySummary"))
632 timeStarted = QDateTime::fromString(keyvals.value(
"TimeStarted"),
633 "yyyy-MM-dd HH:mm:ss");
634 if (!timeStarted.isValid())
638 timeStarted.setTimeSpec(Qt::UTC);
640 QStringList summary = keyvals.value(
"CountrySummary")
641 .split(
",", QString::SkipEmptyParts);
642 if (summary.isEmpty()) {
645 foreach (QString pair, summary) {
646 QStringList parts = pair.split(
"=");
647 if (parts.size() != 2)
650 countrySummary.insert(parts.at(0).toUpper(), parts.at(1).toInt(&ok));
655 dlg.
update(timeStarted, countrySummary);
662 dlg.setIcon(QMessageBox::Information);
663 dlg.setWindowTitle(tr(
"No Recent Usage"));
664 dlg.setText(tr(
"No clients have used your relay recently."));
665 dlg.setInformativeText(tr(
"Leave your relay running so clients have "
666 "a better chance of finding and using it."));
667 dlg.setStandardButtons(QMessageBox::Ok);
672 dlg.setIcon(QMessageBox::Warning);
673 dlg.setWindowTitle(tr(
"Bridge History"));
674 dlg.setText(tr(
"Vidalia was unable to retrieve your bridge's usage "
676 dlg.setInformativeText(tr(
"Tor returned an improperly formatted "
677 "response when Vidalia requested your "
678 "bridge's usage history."));
679 dlg.setDetailedText(tr(
"The returned response was: %1").arg(info));
680 dlg.setStandardButtons(QMessageBox::Ok);
#define CABLE256_AVG_RATE
#define CABLE512_AVG_RATE
#define MAX_BANDWIDTH_RATE
#define MIN_BANDWIDTH_RATE
#define CABLE768_AVG_RATE
#define CABLE256_MAX_RATE
#define CABLE512_MAX_RATE
#define CABLE768_MAX_RATE
stop errmsg connect(const QHostAddress &address, quint16 port)
stop errmsg isConnected()
virtual bool changedSinceLastApply() const
void update(const QDateTime &timeStarted, const QHash< QString, int > &countrySummary)
void showWindow(Page page=General)
void helpRequested(const QString &topic)
bool contains(Policy policy)
void addRejectedPorts(QStringList portList)
void addPolicy(Policy policy)
bool rejectsPorts(QStringList portList)
bool acceptsPorts(QStringList portList)
void addAcceptedPorts(QStringList portList)
void loadBandwidthLimits()
bool changedSinceLastApply()
void displayBridgeUsage()
bool apply(QString &errmsg)
ServerSettings * _settings
virtual void retranslateUi()
void loadBridgeIdentity()
void copyBridgeIdentity()
void linkActivated(const QString &url)
void rateChanged(int rate)
void serverModeChanged(bool enabled)
ServerPage(QWidget *parent=0)
void saveBandwidthLimits()
bool save(QString &errmsg)
bool apply(QString *errmsg=0)
void setBridgeEnabled(bool enable)
void setORPort(quint16 orPort)
void setNonExitEnabled(bool enable)
void setPublishServerDescriptor(bool publish)
quint32 getBandwidthBurstRate()
bool publishServerDescriptor() const
void setUpnpEnabled(bool enabled)
quint32 getBandwidthAvgRate()
void setNickname(QString nickname)
void setDirectoryMirror(bool mirror)
ExitPolicy getExitPolicy()
void setBandwidthBurstRate(quint32 rate)
void setServerEnabled(bool enable)
void setExitPolicy(ExitPolicy &policy)
void setContactInfo(QString info)
void setDirPort(quint16 dirPort)
void setBandwidthAvgRate(quint32 rate)
bool getInfo(QHash< QString, QString > &map, QString *errmsg=0)
static int warning(QWidget *parent, QString caption, QString text, int button0, int button1=NoButton, int button2=NoButton)
static TorControl * torControl()
bool err(QString *str, const QString &errmsg)
QHash< QString, QString > string_parse_keyvals(const QString &str, bool *ok)