summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-06-01 19:35:16 +0300
committerAndrei Karas <akaras@inbox.ru>2013-06-01 19:35:16 +0300
commitcce216b983ed4e36869046e7c537f47d34734340 (patch)
treea2fc63de315aa5d835357fb353c7cde5ad991a48 /src/net
parent49f27fffbe07e66a3047812a838f03d7636cc4a9 (diff)
downloadManaVerse-cce216b983ed4e36869046e7c537f47d34734340.tar.gz
ManaVerse-cce216b983ed4e36869046e7c537f47d34734340.tar.bz2
ManaVerse-cce216b983ed4e36869046e7c537f47d34734340.tar.xz
ManaVerse-cce216b983ed4e36869046e7c537f47d34734340.zip
Add alternate host name to servers list.
First try will be by hostname, if it failed in name resolution will be used alt host name This allow connect to server with static ip address even if dns is broken.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/ea/network.cpp20
-rw-r--r--src/net/serverinfo.h4
2 files changed, 17 insertions, 7 deletions
diff --git a/src/net/ea/network.cpp b/src/net/ea/network.cpp
index 2b9c048f7..085901743 100644
--- a/src/net/ea/network.cpp
+++ b/src/net/ea/network.cpp
@@ -105,6 +105,7 @@ bool Network::connect(ServerInfo server)
server.hostname.c_str(), server.port);
mServer.hostname = server.hostname;
+ mServer.althostname = server.althostname;
mServer.port = server.port;
// Reset to sane values
@@ -190,13 +191,18 @@ bool Network::realConnect()
if (TcpNet::resolveHost(&ipAddress, mServer.hostname.c_str(),
mServer.port) == -1)
{
- const std::string errorMessage = std::string(
- // TRANSLATORS: error message
- _("Unable to resolve host \"")).append(
- mServer.hostname).append("\"");
- setError(errorMessage);
- logger->log("TcpNet::ResolveHost: %s", errorMessage.c_str());
- return false;
+ if (mServer.althostname.empty() || TcpNet::resolveHost(&ipAddress,
+ mServer.althostname.c_str(), mServer.port) == -1)
+ {
+ const std::string errorMessage = std::string(
+ // TRANSLATORS: error message
+ _("Unable to resolve host \"")).append(
+ mServer.hostname).append("\"");
+ setError(errorMessage);
+ logger->log("TcpNet::ResolveHost: %s", errorMessage.c_str());
+ return false;
+ }
+ logger->log("using alt host name: %s", mServer.althostname.c_str());
}
mState = CONNECTING;
diff --git a/src/net/serverinfo.h b/src/net/serverinfo.h
index df7a854e7..515595f1f 100644
--- a/src/net/serverinfo.h
+++ b/src/net/serverinfo.h
@@ -49,6 +49,7 @@ public:
Type type;
std::string name;
std::string hostname;
+ std::string althostname;
uint16_t port;
std::string description;
@@ -62,6 +63,7 @@ public:
type(TMWATHENA),
name(),
hostname(),
+ althostname(),
port(6901),
description(),
registerUrl(),
@@ -76,6 +78,7 @@ public:
type(info.type),
name(info.name),
hostname(info.hostname),
+ althostname(info.althostname),
port(info.port),
description(info.description),
registerUrl(info.registerUrl),
@@ -97,6 +100,7 @@ public:
type = UNKNOWN;
name.clear();
hostname.clear();
+ althostname.clear();
port = 0;
description.clear();
registerUrl.clear();