30 #if defined(USE_MINIUPNPC) 36 #include <QMessageBox> 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;
199 tc->
getInfo(
"address", address);
200 tc->
getInfo(
"fingerprint", fingerprint);
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);
bool rejectsPorts(QStringList portList)
void setDirectoryMirror(bool mirror)
void rateChanged(int rate)
bool getConf(QHash< QString, QString > &map, QString *errmsg=0)
bool err(QString *str, const QString &errmsg)
QHash< QString, QString > string_parse_keyvals(const QString &str, bool *ok)
void serverModeChanged(bool enabled)
void loadBandwidthLimits()
bool save(QString &errmsg)
bool publishServerDescriptor() const
#define CABLE512_MAX_RATE
bool apply(QString &errmsg)
bool contains(Policy policy)
#define CABLE256_MAX_RATE
#define CABLE768_MAX_RATE
void helpRequested(const QString &topic)
#define MIN_BANDWIDTH_RATE
void setBridgeEnabled(bool enable)
void update(const QDateTime &timeStarted, const QHash< QString, int > &countrySummary)
void addRejectedPorts(QStringList portList)
void displayBridgeUsage()
void setContactInfo(QString info)
bool getInfo(QHash< QString, QString > &map, QString *errmsg=0)
void setUpnpEnabled(bool enabled)
#define MAX_BANDWIDTH_RATE
void setPublishServerDescriptor(bool publish)
void showWindow(Page page=General)
void setServerEnabled(bool enable)
void loadBridgeIdentity()
bool acceptsPorts(QStringList portList)
static TorControl * torControl()
#define CABLE256_AVG_RATE
stop errmsg connect(const QHostAddress &address, quint16 port)
quint32 getBandwidthBurstRate()
bool apply(QString *errmsg=0)
void setNonExitEnabled(bool enable)
void linkActivated(const QString &url)
void setNickname(QString nickname)
void addPolicy(Policy policy)
ServerSettings * _settings
static int warning(QWidget *parent, QString caption, QString text, int button0, int button1=NoButton, int button2=NoButton)
quint32 getBandwidthAvgRate()
virtual bool changedSinceLastApply() const
void copyBridgeIdentity()
virtual void retranslateUi()
bool changedSinceLastApply()
#define CABLE512_AVG_RATE
ServerPage(QWidget *parent=0)
#define CABLE768_AVG_RATE
void setBandwidthAvgRate(quint32 rate)
void setExitPolicy(ExitPolicy &policy)
void addAcceptedPorts(QStringList portList)
void saveBandwidthLimits()
ExitPolicy getExitPolicy()
void setBandwidthBurstRate(quint32 rate)
void setORPort(quint16 orPort)
stop errmsg isConnected()
void setDirPort(quint16 dirPort)