From d5885dd6774afb598a69009efa576a908e6fce18 Mon Sep 17 00:00:00 2001 From: diafero Date: Wed, 3 Aug 2011 01:18:08 +0200 Subject: [PATCH] if no auth server is set, ask the gate keeper about it (does NOT really add a new message, just enables it. DS already supports it in master) this makes the setup even easier... just one server to be configured in the server.ini. --- .../plNetClientComm/plNetClientComm.cpp | 53 ++++++++++++++++--- .../plNetGameLib/Private/plNglGateKeeper.cpp | 12 ++++- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/Sources/Plasma/PubUtilLib/plNetClientComm/plNetClientComm.cpp b/Sources/Plasma/PubUtilLib/plNetClientComm/plNetClientComm.cpp index 29a003a8..6ebcc363 100644 --- a/Sources/Plasma/PubUtilLib/plNetClientComm/plNetClientComm.cpp +++ b/Sources/Plasma/PubUtilLib/plNetClientComm/plNetClientComm.cpp @@ -91,8 +91,10 @@ static NetCommAge s_age; static NetCommAge s_startupAge; static bool s_needAvatarLoad = true; static bool s_loginComplete = false; +static bool s_hasAuthSrvIpAddress = false; static bool s_hasFileSrvIpAddress = false; static ENetError s_authResult = kNetErrAuthenticationFailed; +static wchar s_authSrvAddr[256]; static wchar s_fileSrvAddr[256]; static wchar s_iniServerAddr[256]; @@ -829,6 +831,16 @@ static void IReadNetIni() { IniClose(ini); } +//============================================================================ +static void AuthSrvIpAddressCallback ( + ENetError result, + void * param, + const wchar addr[] +) { + StrCopy(s_authSrvAddr, addr, arrsize(s_authSrvAddr)); + s_hasAuthSrvIpAddress = true; +} + //============================================================================ static void FileSrvIpAddressCallback ( ENetError result, @@ -979,21 +991,47 @@ void NetCommConnect () { const wchar ** addrs; unsigned count; - - count = GetAuthSrvHostnames(&addrs); - NetCliAuthStartConnect(addrs, count); + hsBool connectedToKeeper = false; + + // if a console override was specified for a authserv, connect directly to the authserver rather than going through the gatekeeper + if((count = GetAuthSrvHostnames(&addrs)) && wcslen(addrs[0])) + { + NetCliAuthStartConnect(addrs, count); + } + else + { + count = GetGateKeeperSrvHostnames(&addrs); + NetCliGateKeeperStartConnect(addrs, count); + connectedToKeeper = true; + + // request an auth server ip address + NetCliGateKeeperAuthSrvIpAddressRequest(AuthSrvIpAddressCallback, nil); + + while(!s_hasAuthSrvIpAddress && !s_netError) { + NetClientUpdate(); + AsyncSleep(10); + } + + const wchar * authSrv[] = { + s_authSrvAddr + }; + NetCliAuthStartConnect(authSrv, 1); + } if (!gDataServerLocal) { // if a console override was specified for a filesrv, connect directly to the fileserver rather than going through the gatekeeper - if(GetFileSrvHostnames(&addrs) && wcslen(addrs[0])) + if((count = GetFileSrvHostnames(&addrs)) && wcslen(addrs[0])) { NetCliFileStartConnect(addrs, count); } else { - count = GetGateKeeperSrvHostnames(&addrs); - NetCliGateKeeperStartConnect(addrs, count); + if (!connectedToKeeper) { + count = GetGateKeeperSrvHostnames(&addrs); + NetCliGateKeeperStartConnect(addrs, count); + connectedToKeeper = true; + } // request a file server ip address NetCliGateKeeperFileSrvIpAddressRequest(FileSrvIpAddressCallback, nil, false); @@ -1009,6 +1047,9 @@ void NetCommConnect () { NetCliFileStartConnect(fileSrv, 1); } } + + if (connectedToKeeper) + NetCliGateKeeperDisconnect(); } //============================================================================ diff --git a/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp b/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp index 92c7af4b..11b4669b 100644 --- a/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp +++ b/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp @@ -735,6 +735,7 @@ static NetMsgInitSend s_send[] = { static NetMsgInitRecv s_recv[] = { { MSG(PingReply) }, { MSG(FileSrvIpAddressReply) }, + { MSG(AuthSrvIpAddressReply) }, }; #undef MSG @@ -1115,4 +1116,13 @@ void NetCliGateKeeperFileSrvIpAddressRequest ( ) { FileSrvIpAddressRequestTrans * trans = NEW(FileSrvIpAddressRequestTrans)(callback, param, isPatcher); NetTransSend(trans); -} \ No newline at end of file +} + +//============================================================================ +void NetCliGateKeeperAuthSrvIpAddressRequest ( + FNetCliGateKeeperAuthSrvIpAddressRequestCallback callback, + void * param +) { + AuthSrvIpAddressRequestTrans * trans = NEW(AuthSrvIpAddressRequestTrans)(callback, param); + NetTransSend(trans); +}