Use alternate dns name if name resolution fails for internet server (6dns.org seems to be unreliable, but is still the only one to provide both ipv4 and ipv6 name resolution for free).
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 &
|
||||
|
||||
+8
-1
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user