linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #05614
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2926: config the external IP via HubSettings
------------------------------------------------------------
revno: 2926
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2012-05-24 00:05:22 +0200
message:
config the external IP via HubSettings
modified:
dcpp/AdcHub.cpp
dcpp/Client.cpp
dcpp/Client.h
dcpp/HubSettings.cpp
dcpp/HubSettings.h
dcpp/NmdcHub.cpp
dcpp/NmdcHub.h
dcpp/Socket.cpp
help/dialog_favorite_hub.html
win32/ConnectivityManualPage.cpp
win32/ConnectivityManualPage.h
win32/FavHubGroupsDlg.cpp
win32/FavHubGroupsDlg.h
win32/FavHubProperties.cpp
win32/FavHubProperties.h
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/AdcHub.cpp'
--- dcpp/AdcHub.cpp 2012-05-16 11:34:47 +0000
+++ dcpp/AdcHub.cpp 2012-05-23 22:05:22 +0000
@@ -594,7 +594,7 @@
// Trigger connection attempt sequence locally ...
auto localPort = Util::toString(sock->getLocalPort());
- dcdebug("triggering connecting attempt in NAT: remote port = %s, local IP = %s, local port = %d\n", port.c_str(), sock->getLocalIp().c_str(), sock->getLocalPort());
+ dcdebug("triggering connecting attempt in NAT: remote port = %s, local port = %d\n", port.c_str(), sock->getLocalPort());
ConnectionManager::getInstance()->adcConnect(*u, port, localPort, BufferedSocket::NAT_CLIENT, token, secure);
// ... and signal other client to do likewise.
@@ -624,7 +624,7 @@
}
// Trigger connection attempt sequence locally
- dcdebug("triggering connecting attempt in RNT: remote port = %s, local IP = %s, local port = %d\n", port.c_str(), sock->getLocalIp().c_str(), sock->getLocalPort());
+ dcdebug("triggering connecting attempt in RNT: remote port = %s, local port = %d\n", port.c_str(), sock->getLocalPort());
ConnectionManager::getInstance()->adcConnect(*u, port, Util::toString(sock->getLocalPort()), BufferedSocket::NAT_SERVER, token, secure);
}
@@ -1002,8 +1002,8 @@
addParam(lastInfoMap, c, "KP", "SHA256/" + Encoder::toBase32(&kp[0], kp.size()));
}
- if(CONNSETTING(NO_IP_OVERRIDE) && !CONNSETTING(EXTERNAL_IP).empty()) {
- addParam(lastInfoMap, c, "I4", Socket::resolve(CONNSETTING(EXTERNAL_IP), AF_INET));
+ if(CONNSETTING(NO_IP_OVERRIDE) && !getUserIp().empty()) {
+ addParam(lastInfoMap, c, "I4", Socket::resolve(getUserIp(), AF_INET));
} else {
addParam(lastInfoMap, c, "I4", "0.0.0.0");
}
=== modified file 'dcpp/Client.cpp'
--- dcpp/Client.cpp 2012-05-15 23:26:22 +0000
+++ dcpp/Client.cpp 2012-05-23 22:05:22 +0000
@@ -89,6 +89,13 @@
settings.setNick(prevNick);
}
+const string& Client::getUserIp() const {
+ if(!settings.getUserIp().empty()) {
+ return settings.getUserIp();
+ }
+ return CONNSETTING(EXTERNAL_IP);
+}
+
void Client::connect() {
if(sock) {
BufferedSocket::putSocket(sock);
@@ -128,7 +135,6 @@
void Client::on(Connected) noexcept {
updateActivity();
ip = sock->getIp();
- localIp = sock->getLocalIp();
if(sock->isSecure() && keyprint.compare(0, 7, "SHA256/") == 0) {
auto kp = sock->getKeyprint();
@@ -194,23 +200,6 @@
}
}
-string Client::getLocalIp() const {
- // Best case - the server detected it
- if((!CONNSETTING(NO_IP_OVERRIDE) || CONNSETTING(EXTERNAL_IP).empty()) && !getMyIdentity().getIp().empty()) {
- return getMyIdentity().getIp();
- }
-
- if(!CONNSETTING(EXTERNAL_IP).empty()) {
- return Socket::resolve(CONNSETTING(EXTERNAL_IP), AF_INET);
- }
-
- if(localIp.empty()) {
- return Util::getLocalIp();
- }
-
- return localIp;
-}
-
string Client::getCounts() {
char buf[128];
return string(buf, snprintf(buf, sizeof(buf), "%ld/%ld/%ld",
=== modified file 'dcpp/Client.h'
--- dcpp/Client.h 2012-05-15 23:26:22 +0000
+++ dcpp/Client.h 2012-05-23 22:05:22 +0000
@@ -65,7 +65,6 @@
const string& getIp() const { return ip; }
string getIpPort() const { return getIp() + ':' + port; }
- string getLocalIp() const;
void updated(OnlineUser& user);
void updated(OnlineUserList& users);
@@ -128,6 +127,8 @@
/** Reload details from favmanager or settings */
void reloadSettings(bool updateNick);
+ /// Get the external IP the user has defined for this hub, if any.
+ const string& getUserIp() const;
virtual void checkNick(string& nick) = 0;
@@ -148,7 +149,6 @@
string hubUrl;
string address;
string ip;
- string localIp;
string keyprint;
string port;
char separator;
=== modified file 'dcpp/HubSettings.cpp'
--- dcpp/HubSettings.cpp 2012-05-16 11:34:47 +0000
+++ dcpp/HubSettings.cpp 2012-05-23 22:05:22 +0000
@@ -25,6 +25,7 @@
if(!sub.nick.empty()) { nick = sub.nick; }
if(!sub.description.empty()) { description = sub.description; }
if(!sub.email.empty()) { email = sub.email; }
+ if(!sub.userIp.empty()) { userIp = sub.userIp; }
if(!indeterminate(sub.showJoins)) { showJoins = sub.showJoins; }
if(!indeterminate(sub.favShowJoins)) { favShowJoins = sub.favShowJoins; }
}
@@ -33,16 +34,18 @@
nick = xml.getChildAttrib("Nick");
description = xml.getChildAttrib("UserDescription"); // not "Description" for compat with prev fav hub lists
email = xml.getChildAttrib("Email");
+ userIp = xml.getChildAttrib("UserIp");
showJoins = to3bool(xml.getIntChildAttrib("ShowJoins"));
favShowJoins = to3bool(xml.getIntChildAttrib("FavShowJoins"));
}
void HubSettings::save(SimpleXML& xml) const {
- xml.addChildAttrib("Nick", nick);
- xml.addChildAttrib("UserDescription", description);
- xml.addChildAttrib("Email", email);
- xml.addChildAttrib("ShowJoins", toInt(showJoins));
- xml.addChildAttrib("FavShowJoins", toInt(favShowJoins));
+ if(!nick.empty()) { xml.addChildAttrib("Nick", nick); }
+ if(!description.empty()) { xml.addChildAttrib("UserDescription", description); }
+ if(!email.empty()) { xml.addChildAttrib("Email", email); }
+ if(!userIp.empty()) { xml.addChildAttrib("UserIp", userIp); }
+ if(!indeterminate(showJoins)) { xml.addChildAttrib("ShowJoins", toInt(showJoins)); }
+ if(!indeterminate(favShowJoins)) { xml.addChildAttrib("FavShowJoins", toInt(favShowJoins)); }
}
} // namespace dcpp
=== modified file 'dcpp/HubSettings.h'
--- dcpp/HubSettings.h 2012-05-16 11:34:47 +0000
+++ dcpp/HubSettings.h 2012-05-23 22:05:22 +0000
@@ -45,6 +45,7 @@
GETSET(string, nick, Nick);
GETSET(string, description, Description);
GETSET(string, email, Email);
+ GETSET(string, userIp, UserIp);
/* don't forget to init new tribools to indeterminate in the constructor! they default to false
otherwise. */
=== modified file 'dcpp/NmdcHub.cpp'
--- dcpp/NmdcHub.cpp 2012-05-16 11:34:47 +0000
+++ dcpp/NmdcHub.cpp 2012-05-23 22:05:22 +0000
@@ -252,7 +252,7 @@
// Filter own searches
if(ClientManager::getInstance()->isActive()) {
- if(seeker == getLocalIp() + ":" + SearchManager::getInstance()->getPort()) {
+ if(seeker == localIp + ":" + SearchManager::getInstance()->getPort()) {
return;
}
} else {
@@ -608,6 +608,7 @@
u->getIdentity().setIp4(it.substr(j+1));
if(u->getUser() == getMyIdentity().getUser()) {
setMyIdentity(u->getIdentity());
+ refreshLocalIp();
}
v.push_back(u);
}
@@ -756,7 +757,7 @@
dcdebug("NmdcHub::connectToMe %s\n", aUser.getIdentity().getNick().c_str());
string nick = fromUtf8(aUser.getIdentity().getNick());
ConnectionManager::getInstance()->nmdcExpect(nick, getMyNick(), getHubUrl());
- send("$ConnectToMe " + nick + " " + getLocalIp() + ":" + ConnectionManager::getInstance()->getPort() + "|");
+ send("$ConnectToMe " + nick + " " + localIp + ":" + ConnectionManager::getInstance()->getPort() + "|");
}
void NmdcHub::revConnectToMe(const OnlineUser& aUser) {
@@ -836,7 +837,7 @@
}
string tmp2;
if(ClientManager::getInstance()->isActive()) {
- tmp2 = getLocalIp() + ':' + SearchManager::getInstance()->getPort();
+ tmp2 = localIp + ':' + SearchManager::getInstance()->getPort();
} else {
tmp2 = "Hub:" + fromUtf8(getMyNick());
}
@@ -939,6 +940,27 @@
return false;
}
+void NmdcHub::refreshLocalIp() noexcept {
+ if((!CONNSETTING(NO_IP_OVERRIDE) || getUserIp().empty()) && !getMyIdentity().getIp().empty()) {
+ // Best case - the server detected it
+ localIp = getMyIdentity().getIp();
+ } else {
+ localIp.clear();
+ }
+ if(localIp.empty()) {
+ localIp = getUserIp();
+ if(!localIp.empty()) {
+ localIp = Socket::resolve(localIp, AF_INET);
+ }
+ if(localIp.empty()) {
+ localIp = sock->getLocalIp();
+ if(localIp.empty()) {
+ localIp = Util::getLocalIp();
+ }
+ }
+ }
+}
+
void NmdcHub::on(Connected) noexcept {
Client::on(Connected());
@@ -952,6 +974,7 @@
lastMyInfoC.clear();
lastMyInfoD.clear();
lastUpdate = 0;
+ refreshLocalIp();
}
void NmdcHub::on(Line, const string& aLine) noexcept {
@@ -973,6 +996,8 @@
}
void NmdcHub::on(Minute, uint64_t aTick) noexcept {
+ refreshLocalIp();
+
if(aTick > (lastProtectedIPsUpdate + 24*3600*1000)) {
protectedIPs.clear();
=== modified file 'dcpp/NmdcHub.h'
--- dcpp/NmdcHub.h 2012-05-15 23:26:22 +0000
+++ dcpp/NmdcHub.h 2012-05-23 22:05:22 +0000
@@ -79,6 +79,7 @@
string lastMyInfoB;
string lastMyInfoC;
string lastMyInfoD;
+ string localIp;
typedef list<pair<string, uint32_t> > FloodMap;
typedef FloodMap::iterator FloodIter;
@@ -118,6 +119,7 @@
bool isProtectedIP(const string& ip);
void updateFromTag(Identity& id, const string& tag);
+ void refreshLocalIp() noexcept;
virtual void checkNick(string& nick);
virtual bool v4only() const { return true; }
=== modified file 'dcpp/Socket.cpp'
--- dcpp/Socket.cpp 2012-03-03 19:33:45 +0000
+++ dcpp/Socket.cpp 2012-05-23 22:05:22 +0000
@@ -796,7 +796,8 @@
addr sock_addr;
socklen_t len = sizeof(sock_addr);
if(::getsockname(getSock(), &sock_addr.sa, &len) == 0) {
- return resolveName(&sock_addr.sa, len);
+ try { return resolveName(&sock_addr.sa, len); }
+ catch(const SocketException&) { }
}
return Util::emptyString;
=== modified file 'help/dialog_favorite_hub.html'
--- help/dialog_favorite_hub.html 2012-05-15 23:26:22 +0000
+++ help/dialog_favorite_hub.html 2012-05-23 22:05:22 +0000
@@ -26,6 +26,8 @@
<dd cshelp="IDH_FAVORITE_HUB_USER_DESC">If you would like to use a special user description (shown in the user list) for a specific hub. Leave this blank for default.</dd>
<dt>Email</dt>
<dd cshelp="IDH_FAVORITE_HUB_EMAIL">If you would like to use a special email (shown in the user list) for a specific hub. Leave this blank for default.</dd>
+ <dt>External / WAN IP</dt>
+ <dd cshelp="IDH_FAVORITE_HUB_USER_IP">If you would like to use a special external IP for a specific hub. Useful to log to local & remote hubs at the same time. Leave this blank for default.</dd>
<dt>Group</dt>
<dd cshelp="IDH_FAVORITE_HUB_GROUP">
<div>Select a favorite hub group to be associated to the hub.</div>
=== modified file 'win32/ConnectivityManualPage.cpp'
--- win32/ConnectivityManualPage.cpp 2012-03-03 19:33:45 +0000
+++ win32/ConnectivityManualPage.cpp 2012-05-23 22:05:22 +0000
@@ -44,7 +44,6 @@
upnp(0),
manual(0),
passive(0),
-externalIP(0),
mapper(0)
{
setHelpId(IDH_CONNECTIVITYMANUALPAGE);
@@ -84,8 +83,9 @@
auto cur = group->addChild(Grid::Seed(2, 1));
cur->column(0).mode = GridInfo::FILL;
- externalIP = cur->addChild(WinUtil::Seeds::Dialog::textBox);
+ auto externalIP = cur->addChild(WinUtil::Seeds::Dialog::textBox);
items.emplace_back(externalIP, SettingsManager::EXTERNAL_IP, PropPage::T_STR);
+ WinUtil::preventSpaces(externalIP);
auto overrideIP = cur->addChild(CheckBox::Seed(T_("Don't allow hubs/NAT-PMP/UPnP to override")));
items.emplace_back(overrideIP, SettingsManager::NO_IP_OVERRIDE, PropPage::T_BOOL);
@@ -139,12 +139,6 @@
}
void ConnectivityManualPage::write() {
- tstring x = externalIP->getText();
- tstring::size_type i;
- while((i = x.find(' ')) != string::npos)
- x.erase(i, 1);
- externalIP->setText(x);
-
PropPage::write(items);
// Set the connection mode
=== modified file 'win32/ConnectivityManualPage.h'
--- win32/ConnectivityManualPage.h 2012-01-23 17:56:18 +0000
+++ win32/ConnectivityManualPage.h 2012-05-23 22:05:22 +0000
@@ -42,8 +42,6 @@
RadioButtonPtr manual;
RadioButtonPtr passive;
- TextBoxPtr externalIP;
-
ComboBoxPtr mapper;
void handleAutoClicked();
=== modified file 'win32/FavHubGroupsDlg.cpp'
--- win32/FavHubGroupsDlg.cpp 2012-05-16 11:34:47 +0000
+++ win32/FavHubGroupsDlg.cpp 2012-05-23 22:05:22 +0000
@@ -50,6 +50,7 @@
nick(0),
description(0),
email(0),
+userIp(0),
showJoins(0),
favShowJoins(0),
parentEntry(parentEntry_)
@@ -126,7 +127,7 @@
{
auto group = cur->addChild(GroupBox::Seed(T_("Identification (leave blank for defaults)")));
- auto cur2 = group->addChild(Grid::Seed(3, 2));
+ auto cur2 = group->addChild(Grid::Seed(4, 2));
cur2->column(0).align = GridInfo::BOTTOM_RIGHT;
cur2->column(1).mode = GridInfo::FILL;
@@ -142,6 +143,11 @@
cur2->addChild(Label::Seed(T_("Email")))->setHelpId(IDH_FAVORITE_HUB_EMAIL);
email = cur2->addChild(WinUtil::Seeds::Dialog::textBox);
email->setHelpId(IDH_FAVORITE_HUB_EMAIL);
+
+ cur2->addChild(Label::Seed(T_("External / WAN IP")))->setHelpId(IDH_FAVORITE_HUB_USER_IP);
+ userIp = cur2->addChild(WinUtil::Seeds::Dialog::textBox);
+ userIp->setHelpId(IDH_FAVORITE_HUB_USER_IP);
+ WinUtil::preventSpaces(userIp);
}
{
@@ -222,6 +228,7 @@
nick->setText(Text::toT(settings.getNick()));
description->setText(Text::toT(settings.getDescription()));
email->setText(Text::toT(settings.getEmail()));
+ userIp->setText(Text::toT(settings.getUserIp()));
showJoins->setSelected(toInt(settings.showJoins));
favShowJoins->setSelected(toInt(settings.favShowJoins));
}
@@ -282,6 +289,7 @@
settings.setNick(Text::fromT(nick->getText()));
settings.setDescription(Text::fromT(description->getText()));
settings.setEmail(Text::fromT(email->getText()));
+ settings.setUserIp(Text::fromT(userIp->getText()));
settings.showJoins = to3bool(showJoins->getSelected());
settings.favShowJoins = to3bool(favShowJoins->getSelected());
return settings;
=== modified file 'win32/FavHubGroupsDlg.h'
--- win32/FavHubGroupsDlg.h 2012-05-16 11:34:47 +0000
+++ win32/FavHubGroupsDlg.h 2012-05-23 22:05:22 +0000
@@ -77,6 +77,7 @@
TextBoxPtr nick;
TextBoxPtr description;
TextBoxPtr email;
+ TextBoxPtr userIp;
ComboBoxPtr showJoins;
ComboBoxPtr favShowJoins;
=== modified file 'win32/FavHubProperties.cpp'
--- win32/FavHubProperties.cpp 2012-05-16 11:34:47 +0000
+++ win32/FavHubProperties.cpp 2012-05-23 22:05:22 +0000
@@ -45,6 +45,9 @@
password(0),
description(0),
email(0),
+userIp(0),
+showJoins(0),
+favShowJoins(0),
groups(0),
entry(_entry)
{
@@ -90,7 +93,7 @@
auto group = grid->addChild(GroupBox::Seed(T_("Identification (leave blank for defaults)")));
grid->setWidget(group, 1, 0, 1, 2);
- auto cur = group->addChild(Grid::Seed(4, 2));
+ auto cur = group->addChild(Grid::Seed(5, 2));
cur->column(0).align = GridInfo::BOTTOM_RIGHT;
cur->column(1).mode = GridInfo::FILL;
@@ -116,6 +119,12 @@
email = cur->addChild(WinUtil::Seeds::Dialog::textBox);
email->setText(Text::toT(entry->getEmail()));
email->setHelpId(IDH_FAVORITE_HUB_EMAIL);
+
+ cur->addChild(Label::Seed(T_("External / WAN IP")))->setHelpId(IDH_FAVORITE_HUB_USER_IP);
+ userIp = cur->addChild(WinUtil::Seeds::Dialog::textBox);
+ userIp->setText(Text::toT(entry->getUserIp()));
+ userIp->setHelpId(IDH_FAVORITE_HUB_USER_IP);
+ WinUtil::preventSpaces(userIp);
}
{
@@ -179,6 +188,7 @@
entry->setPassword(Text::fromT(password->getText()));
entry->setDescription(Text::fromT(description->getText()));
entry->setEmail(Text::fromT(email->getText()));
+ entry->setUserIp(Text::fromT(userIp->getText()));
entry->showJoins = to3bool(showJoins->getSelected());
entry->favShowJoins = to3bool(favShowJoins->getSelected());
entry->setGroup(Text::fromT(groups->getText()));
=== modified file 'win32/FavHubProperties.h'
--- win32/FavHubProperties.h 2012-05-16 11:34:47 +0000
+++ win32/FavHubProperties.h 2012-05-23 22:05:22 +0000
@@ -37,6 +37,7 @@
TextBoxPtr password;
TextBoxPtr description;
TextBoxPtr email;
+ TextBoxPtr userIp;
ComboBoxPtr showJoins;
ComboBoxPtr favShowJoins;
ComboBoxPtr groups;
=== modified file 'win32/ProxyPage.cpp'
--- win32/ProxyPage.cpp 2012-01-23 20:18:58 +0000
+++ win32/ProxyPage.cpp 2012-05-23 22:05:22 +0000
@@ -42,8 +42,7 @@
autoDetect(0),
directOut(0),
socks5(0),
-socksSettings(0),
-socksServer(0)
+socksSettings(0)
{
setHelpId(IDH_PROXYPAGE);
@@ -77,27 +76,37 @@
socksSettings = cur->addChild(GroupBox::Seed(T_("SOCKS5")));
cur = socksSettings->addChild(Grid::Seed(5, 2));
+
cur->addChild(Label::Seed(T_("IP")))->setHelpId(IDH_SETTINGS_PROXY_SOCKS_SERVER);
+
cur->addChild(Label::Seed(T_("Port")))->setHelpId(IDH_SETTINGS_PROXY_SOCKS_PORT);
- socksServer = cur->addChild(WinUtil::Seeds::Dialog::textBox);
- items.emplace_back(socksServer, SettingsManager::SOCKS_SERVER, PropPage::T_STR);
- socksServer->setHelpId(IDH_SETTINGS_PROXY_SOCKS_SERVER);
- socksServer->setTextLimit(250);
- TextBoxPtr box = cur->addChild(WinUtil::Seeds::Dialog::intTextBox);
+
+ auto box = cur->addChild(WinUtil::Seeds::Dialog::textBox);
+ items.emplace_back(box, SettingsManager::SOCKS_SERVER, PropPage::T_STR);
+ box->setHelpId(IDH_SETTINGS_PROXY_SOCKS_SERVER);
+ box->setTextLimit(250);
+ WinUtil::preventSpaces(box);
+
+ box = cur->addChild(WinUtil::Seeds::Dialog::intTextBox);
items.emplace_back(box, SettingsManager::SOCKS_PORT, PropPage::T_INT);
box->setHelpId(IDH_SETTINGS_PROXY_SOCKS_PORT);
box->setTextLimit(250);
+
cur->addChild(Label::Seed(T_("Login")))->setHelpId(IDH_SETTINGS_PROXY_SOCKS_USER);
+
cur->addChild(Label::Seed(T_("Password")))->setHelpId(IDH_SETTINGS_PROXY_SOCKS_PASSWORD);
+
box = cur->addChild(WinUtil::Seeds::Dialog::textBox);
items.emplace_back(box, SettingsManager::SOCKS_USER, PropPage::T_STR);
box->setHelpId(IDH_SETTINGS_PROXY_SOCKS_USER);
box->setTextLimit(250);
+
box = cur->addChild(WinUtil::Seeds::Dialog::textBox);
items.emplace_back(box, SettingsManager::SOCKS_PASSWORD, PropPage::T_STR);
box->setHelpId(IDH_SETTINGS_PROXY_SOCKS_PASSWORD);
box->setTextLimit(250);
- CheckBoxPtr socksResolve = cur->addChild(CheckBox::Seed(T_("Use SOCKS5 server to resolve host names")));
+
+ auto socksResolve = cur->addChild(CheckBox::Seed(T_("Use SOCKS5 server to resolve host names")));
cur->setWidget(socksResolve, 4, 0, 1, 2);
items.emplace_back(socksResolve, SettingsManager::SOCKS_RESOLVE, PropPage::T_BOOL);
socksResolve->setHelpId(IDH_SETTINGS_PROXY_SOCKS_RESOLVE);
@@ -119,13 +128,6 @@
}
void ProxyPage::write() {
- tstring x = socksServer->getText();
- tstring::size_type i;
-
- while((i = x.find(' ')) != string::npos)
- x.erase(i, 1);
- socksServer->setText(x);
-
PropPage::write(items);
SettingsManager::getInstance()->set(SettingsManager::OUTGOING_CONNECTIONS,
=== modified file 'win32/ProxyPage.h'
--- win32/ProxyPage.h 2012-01-13 20:55:20 +0000
+++ win32/ProxyPage.h 2012-05-23 22:05:22 +0000
@@ -41,7 +41,6 @@
RadioButtonPtr socks5;
GroupBoxPtr socksSettings;
- TextBoxPtr socksServer;
CheckBoxPtr socksResolve;
void handleAutoClicked();