linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #05045
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2753: ignore proxy settings when auto-detecting connectivity settings
------------------------------------------------------------
revno: 2753
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Mon 2011-12-26 15:03:56 +0100
message:
ignore proxy settings when auto-detecting connectivity settings
modified:
dcpp/BufferedSocket.cpp
dcpp/ConnectivityManager.cpp
dcpp/ConnectivityManager.h
dcpp/NmdcHub.cpp
dcpp/Socket.cpp
win32/MainWindow.cpp
win32/ProxyPage.cpp
win32/ProxyPage.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dcpp/BufferedSocket.cpp'
--- dcpp/BufferedSocket.cpp 2011-12-23 14:58:25 +0000
+++ dcpp/BufferedSocket.cpp 2011-12-26 14:03:56 +0000
@@ -114,7 +114,7 @@
setSocket(move(s));
Lock l(cs);
- addTask(CONNECT, new ConnectInfo(aAddress, aPort, localPort, natRole, proxy && (SETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5)));
+ addTask(CONNECT, new ConnectInfo(aAddress, aPort, localPort, natRole, proxy && (CONNSETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5)));
}
#define LONG_TIMEOUT 30000
=== modified file 'dcpp/ConnectivityManager.cpp'
--- dcpp/ConnectivityManager.cpp 2011-12-04 22:17:45 +0000
+++ dcpp/ConnectivityManager.cpp 2011-12-26 14:03:56 +0000
@@ -81,7 +81,8 @@
// restore auto settings to their default value.
int settings[] = { SettingsManager::TCP_PORT, SettingsManager::TLS_PORT, SettingsManager::UDP_PORT,
SettingsManager::EXTERNAL_IP, SettingsManager::EXTERNAL_IP6, SettingsManager::NO_IP_OVERRIDE,
- SettingsManager::BIND_ADDRESS, SettingsManager::BIND_ADDRESS6, SettingsManager::INCOMING_CONNECTIONS };
+ SettingsManager::BIND_ADDRESS, SettingsManager::BIND_ADDRESS6,
+ SettingsManager::INCOMING_CONNECTIONS, SettingsManager::OUTGOING_CONNECTIONS };
std::for_each(settings, settings + sizeof(settings) / sizeof(settings[0]), [this](int setting) {
if(setting >= SettingsManager::STR_FIRST && setting < SettingsManager::STR_LAST) {
autoSettings[setting] = SettingsManager::getInstance()->getDefault(static_cast<SettingsManager::StrSetting>(setting));
=== modified file 'dcpp/ConnectivityManager.h'
--- dcpp/ConnectivityManager.h 2011-12-04 22:17:45 +0000
+++ dcpp/ConnectivityManager.h 2011-12-26 14:03:56 +0000
@@ -19,9 +19,10 @@
#ifndef DCPLUSPLUS_DCPP_CONNECTIVITY_MANAGER_H
#define DCPLUSPLUS_DCPP_CONNECTIVITY_MANAGER_H
+#include "noexcept.h"
#include "SettingsManager.h"
+#include "Singleton.h"
#include "Speaker.h"
-#include "Singleton.h"
#include <string>
#include <unordered_map>
=== modified file 'dcpp/NmdcHub.cpp'
--- dcpp/NmdcHub.cpp 2011-12-22 22:14:45 +0000
+++ dcpp/NmdcHub.cpp 2011-12-26 14:03:56 +0000
@@ -21,18 +21,18 @@
#include "ChatMessage.h"
#include "ClientManager.h"
+#include "ConnectionManager.h"
+#include "ConnectivityManager.h"
+#include "CryptoManager.h"
+#include "format.h"
#include "SearchManager.h"
#include "ShareManager.h"
-#include "CryptoManager.h"
-#include "ConnectionManager.h"
+#include "Socket.h"
+#include "StringTokenizer.h"
#include "ThrottleManager.h"
+#include "UserCommand.h"
#include "version.h"
-#include "Socket.h"
-#include "UserCommand.h"
-#include "StringTokenizer.h"
-#include "format.h"
-
namespace dcpp {
NmdcHub::NmdcHub(const string& aHubURL) :
@@ -803,7 +803,7 @@
tmp2[i]++; tmp3[i]++; tmp4[i]++; tmp5[i]++;
}
char modeChar = '?';
- if(SETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5)
+ if(CONNSETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5)
modeChar = '5';
else if(ClientManager::getInstance()->isActive())
modeChar = 'A';
=== modified file 'dcpp/Socket.cpp'
--- dcpp/Socket.cpp 2011-12-08 17:17:49 +0000
+++ dcpp/Socket.cpp 2011-12-26 14:03:56 +0000
@@ -19,6 +19,7 @@
#include "stdinc.h"
#include "Socket.h"
+#include "ConnectivityManager.h"
#include "format.h"
#include "SettingsManager.h"
#include "TimerManager.h"
@@ -588,7 +589,7 @@
auto buf = (const uint8_t*)aBuffer;
int sent;
- if(SETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5 && proxy) {
+ if(proxy && CONNSETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5) {
if(udpAddr.sa.sa_family == 0) {
throw SocketException(_("Failed to set up the socks server for UDP relay (check socks address and port)"));
}
@@ -821,7 +822,7 @@
memset(&udpAddr, 0, sizeof(udpAddr));
udpAddrLen = sizeof(udpAddr);
- if(SETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5) {
+ if(CONNSETTING(OUTGOING_CONNECTIONS) == SettingsManager::OUTGOING_SOCKS5) {
try {
Socket s(TYPE_TCP);
s.setBlocking(false);
=== modified file 'win32/MainWindow.cpp'
--- win32/MainWindow.cpp 2011-12-25 18:48:06 +0000
+++ win32/MainWindow.cpp 2011-12-26 14:03:56 +0000
@@ -1078,6 +1078,7 @@
auto prevMapper = SETTING(MAPPER);
auto prevBind = SETTING(BIND_ADDRESS);
auto prevBind6 = SETTING(BIND_ADDRESS6);
+ auto prevProxy = CONNSETTING(OUTGOING_CONNECTIONS);
auto prevGeo = BOOLSETTING(GET_USER_COUNTRY);
auto prevGeoFormat = SETTING(COUNTRY_FORMAT);
@@ -1103,6 +1104,10 @@
showPortsError(e.getError());
}
+ if(CONNSETTING(OUTGOING_CONNECTIONS) != prevProxy) {
+ Socket::socksUpdated();
+ }
+
ClientManager::getInstance()->infoUpdated();
bool rebuildGeo = prevGeo && SETTING(COUNTRY_FORMAT) != prevGeoFormat;
=== modified file 'win32/ProxyPage.cpp'
--- win32/ProxyPage.cpp 2011-05-04 19:32:00 +0000
+++ win32/ProxyPage.cpp 2011-12-26 14:03:56 +0000
@@ -19,13 +19,14 @@
#include "stdafx.h"
#include "ProxyPage.h"
+#include <boost/range/algorithm/for_each.hpp>
+
#include <dcpp/SettingsManager.h>
#include <dcpp/Socket.h>
+#include <dwt/widgets/Label.h>
+#include <dwt/widgets/Grid.h>
#include <dwt/widgets/RadioButton.h>
-#include <dwt/widgets/Grid.h>
-#include <dwt/widgets/Label.h>
-#include <dwt/util/win32/Version.h>
#include "resource.h"
#include "WinUtil.h"
@@ -36,7 +37,9 @@
using dwt::RadioButton;
ProxyPage::ProxyPage(dwt::Widget* parent) :
-PropPage(parent, 1, 1),
+PropPage(parent, 2, 1),
+autoGroup(0),
+autoDetect(0),
directOut(0),
socks5(0),
socksSettings(0),
@@ -45,8 +48,16 @@
setHelpId(IDH_PROXYPAGE);
grid->column(0).mode = GridInfo::FILL;
- grid->row(0).mode = GridInfo::FILL;
- grid->row(0).align = GridInfo::STRETCH;
+ grid->row(1).mode = GridInfo::FILL;
+ grid->row(1).align = GridInfo::STRETCH;
+
+ {
+ autoGroup = grid->addChild(GroupBox::Seed(T_("Automatic connectivity setup")));
+ autoGroup->setHelpId(IDH_SETTINGS_CONNECTIVITY_AUTODETECT);
+
+ autoDetect = autoGroup->addChild(CheckBox::Seed(T_("Let DC++ determine the best connectivity settings")));
+ autoDetect->onClicked([this] { handleAutoClicked(); });
+ }
{
GridPtr cur = grid->addChild(GroupBox::Seed(T_("Proxy settings for outgoing connections")))->addChild(Grid::Seed(1, 2));
@@ -92,23 +103,22 @@
socksResolve->setHelpId(IDH_SETTINGS_PROXY_SOCKS_RESOLVE);
}
- switch(SETTING(OUTGOING_CONNECTIONS)) {
- case SettingsManager::OUTGOING_SOCKS5: socks5->setChecked(); break;
- default: directOut->setChecked(); break;
- }
+ read();
- PropPage::read(items);
+ updateAuto();
fixControlsOut();
directOut->onClicked([this] { fixControlsOut(); });
socks5->onClicked([this] { fixControlsOut(); });
+
+ ConnectivityManager::getInstance()->addListener(this);
}
ProxyPage::~ProxyPage() {
+ ConnectivityManager::getInstance()->removeListener(this);
}
-void ProxyPage::write()
-{
+void ProxyPage::write() {
tstring x = socksServer->getText();
tstring::size_type i;
@@ -118,17 +128,51 @@
PropPage::write(items);
- int ct = SettingsManager::OUTGOING_DIRECT;
-
- if(socks5->getChecked())
- ct = SettingsManager::OUTGOING_SOCKS5;
-
- if(SETTING(OUTGOING_CONNECTIONS) != ct) {
- SettingsManager::getInstance()->set(SettingsManager::OUTGOING_CONNECTIONS, ct);
- Socket::socksUpdated();
+ SettingsManager::getInstance()->set(SettingsManager::OUTGOING_CONNECTIONS,
+ socks5->getChecked() ? SettingsManager::OUTGOING_SOCKS5 : SettingsManager::OUTGOING_DIRECT);
+}
+
+void ProxyPage::read() {
+ switch(SETTING(OUTGOING_CONNECTIONS)) {
+ case SettingsManager::OUTGOING_SOCKS5: socks5->setChecked(); break;
+ default: directOut->setChecked(); break;
}
+
+ PropPage::read(items);
+}
+
+void ProxyPage::handleAutoClicked() {
+ // apply immediately so that ConnectivityManager updates.
+ SettingsManager::getInstance()->set(SettingsManager::AUTO_DETECT_CONNECTION, autoDetect->getChecked());
+ ConnectivityManager::getInstance()->fire(ConnectivityManagerListener::SettingChanged());
+}
+
+void ProxyPage::updateAuto() {
+ bool setting = BOOLSETTING(AUTO_DETECT_CONNECTION);
+ autoDetect->setChecked(setting);
+
+ auto controls = grid->getChildren<Control>();
+ boost::for_each(controls, [this, setting](Control* control) {
+ if(control != autoGroup) {
+ control->setEnabled(!setting);
+ }
+ });
}
void ProxyPage::fixControlsOut() {
- socksSettings->setEnabled(socks5->getChecked());
+ socksSettings->setEnabled(socks5->getEnabled() && socks5->getChecked());
+}
+
+void ProxyPage::on(SettingChanged) noexcept {
+ callAsync([this] {
+ updateAuto();
+
+ // reload settings in case they have been changed (eg by the "Edit detected settings" feature).
+
+ directOut->setChecked(false);
+ socks5->setChecked(false);
+
+ read();
+ fixControlsOut();
+ });
}
=== modified file 'win32/ProxyPage.h'
--- win32/ProxyPage.h 2011-03-15 19:52:17 +0000
+++ win32/ProxyPage.h 2011-12-26 14:03:56 +0000
@@ -19,9 +19,11 @@
#ifndef DCPLUSPLUS_WIN32_PROXY_PAGE_H
#define DCPLUSPLUS_WIN32_PROXY_PAGE_H
+#include <dcpp/ConnectivityManager.h>
+
#include "PropPage.h"
-class ProxyPage : public PropPage
+class ProxyPage : public PropPage, private ConnectivityManagerListener
{
public:
ProxyPage(dwt::Widget* parent);
@@ -32,6 +34,9 @@
private:
ItemList items;
+ GroupBoxPtr autoGroup;
+ CheckBoxPtr autoDetect;
+
RadioButtonPtr directOut;
RadioButtonPtr socks5;
@@ -39,7 +44,14 @@
TextBoxPtr socksServer;
CheckBoxPtr socksResolve;
+ void handleAutoClicked();
+
+ void read();
+ void updateAuto();
void fixControlsOut();
+
+ // ConnectivityManagerListener
+ void on(SettingChanged) noexcept;
};
#endif // !defined(DCPLUSPLUS_WIN32_PROXY_PAGE_H)