diff --git a/src/net/clientcontext.h b/src/net/clientcontext.h index 5dbaf784..ea5c8ccd 100644 --- a/src/net/clientcontext.h +++ b/src/net/clientcontext.h @@ -47,6 +47,10 @@ public: {return m_serverAddr;} void SetServerAddr(const std::string &serverAddr) {m_serverAddr = serverAddr;} + const std::string &GetAlternateServerAddr() const + {return m_alternateServerAddr;} + void SetAlternateServerAddr(const std::string &serverAddr) + {m_alternateServerAddr = serverAddr;} unsigned GetServerPort() const {return m_serverPort;} void SetServerPort(unsigned serverPort) @@ -79,6 +83,7 @@ private: int m_protocol; int m_addrFamily; std::string m_serverAddr; + std::string m_alternateServerAddr; unsigned m_serverPort; std::string m_password; sockaddr_storage m_clientSockaddr; diff --git a/src/net/clientthread.h b/src/net/clientthread.h index b27d2942..dbb3cc3a 100644 --- a/src/net/clientthread.h +++ b/src/net/clientthread.h @@ -48,6 +48,7 @@ public: // (i.e. after starting the thread). void Init( const std::string &serverAddress, + const std::string &alternateServerAddress, unsigned serverPort, bool ipv6, bool sctp, diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index cd94179c..9efe24e0 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -70,7 +70,8 @@ ClientThread::~ClientThread() void ClientThread::Init( - const string &serverAddress, unsigned serverPort, bool ipv6, bool sctp, + const string &serverAddress, const string &alternateServerAddress, + unsigned serverPort, bool ipv6, bool sctp, const string &pwd, const string &playerName, const string &avatarFile) { if (IsRunning()) @@ -84,6 +85,7 @@ ClientThread::Init( context.SetProtocol(sctp ? SOCKET_IPPROTO_SCTP : 0); context.SetAddrFamily(ipv6 ? AF_INET6 : AF_INET); context.SetServerAddr(serverAddress); + context.SetAlternateServerAddr(alternateServerAddress); context.SetServerPort(serverPort); context.SetPassword(pwd); context.SetPlayerName(playerName); diff --git a/src/net/common/resolverthread.cpp b/src/net/common/resolverthread.cpp index a19e78c3..5501e1e0 100644 --- a/src/net/common/resolverthread.cpp +++ b/src/net/common/resolverthread.cpp @@ -45,6 +45,7 @@ ResolverThread::Init(const ClientContext &context) GetContext().SetAddrFamily(context.GetAddrFamily()); GetContext().SetServerAddr(context.GetServerAddr()); + GetContext().SetAlternateServerAddr(context.GetAlternateServerAddr()); GetContext().SetServerPort(context.GetServerPort()); } @@ -78,6 +79,19 @@ ResolverThread::Main() context.GetProtocol(), (struct sockaddr *)context.GetClientSockaddr(), context.GetClientSockaddrSize()); + + if (!m_retVal && !context.GetAlternateServerAddr().empty()) + { + // Try alternate name. + m_retVal = socket_resolve( + context.GetAlternateServerAddr().c_str(), + tmpStr.str().c_str(), + context.GetAddrFamily(), + SOCK_STREAM, + context.GetProtocol(), + (struct sockaddr *)context.GetClientSockaddr(), + context.GetClientSockaddrSize()); + } } const ClientContext & diff --git a/src/session.cpp b/src/session.cpp index 48c6522e..ad92b242 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -162,8 +162,13 @@ void Session::startInternetClient() } myNetClient = new ClientThread(*myGui, *myAvatarManager); + string internetServerAddr(myConfig->readConfigString("InternetServerAddress")); + string alternateServerAddr; + if (internetServerAddr == "pokerth.6dns.org") + alternateServerAddr = "pokerth.dyndns.org"; myNetClient->Init( - myConfig->readConfigString("InternetServerAddress"), + internetServerAddr, + alternateServerAddr, myConfig->readConfigInt("InternetServerPort"), myConfig->readConfigInt("InternetServerUseIpv6") == 1, myConfig->readConfigInt("InternetServerUseSctp") == 1, @@ -185,6 +190,7 @@ void Session::startNetworkClient(const string &serverAddress, unsigned serverPor myNetClient = new ClientThread(*myGui, *myAvatarManager); myNetClient->Init( serverAddress, + "", serverPort, ipv6, sctp, @@ -209,6 +215,7 @@ void Session::startNetworkClientForLocalServer(const GameData &gameData) const char *loopbackAddr = useIpv6 ? "::1" : "127.0.0.1"; myNetClient->Init( loopbackAddr, + "", myConfig->readConfigInt("ServerPort"), useIpv6, myConfig->readConfigInt("ServerUseSctp") == 1,