← Back to team overview

linuxdcpp-team team mailing list archive

[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 &amp; 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();