Core/Network: Refactor local/remote ip address selection code and allow using hostnames in LoginREST bnetserver config options

Port From (https://github.com/TrinityCore/TrinityCore/commit/6be536a73bc8a6e331ce20e7d19e2ea56b99b4d0)
This commit is contained in:
hondacrx
2023-08-28 11:15:57 -04:00
parent 0e3b271db3
commit c9ab9e4635
7 changed files with 49 additions and 51 deletions
@@ -18,17 +18,15 @@ namespace BNetServer
{
public class LoginServiceManager : Singleton<LoginServiceManager>
{
ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler> serviceHandlers;
FormInputs formInputs;
IPEndPoint externalAddress;
IPEndPoint localAddress;
ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler> serviceHandlers = new();
FormInputs formInputs = new();
string _externalHostname;
IPEndPoint _externalEndpoint;
string _localHostname;
IPEndPoint _localEndpoint;
X509Certificate2 certificate;
LoginServiceManager()
{
serviceHandlers = new ConcurrentDictionary<(uint ServiceHash, uint MethodId), BnetServiceHandler>();
formInputs = new FormInputs();
}
LoginServiceManager() { }
public void Initialize()
{
@@ -46,7 +44,9 @@ namespace BNetServer
Log.outError(LogFilter.Network, $"Could not resolve LoginREST.ExternalAddress {configuredAddress}");
return;
}
externalAddress = new IPEndPoint(address, port);
_externalEndpoint = new IPEndPoint(address, port);
_externalHostname = $"{configuredAddress}:{port}";
configuredAddress = ConfigMgr.GetDefaultValue("LoginREST.LocalAddress", "127.0.0.1");
if (!IPAddress.TryParse(configuredAddress, out address))
@@ -55,7 +55,8 @@ namespace BNetServer
return;
}
localAddress = new IPEndPoint(address, port);
_localEndpoint = new IPEndPoint(address, port);
_localHostname = $"{configuredAddress}:{port}";
// set up form inputs
formInputs.Type = "LOGIN_FORM";
@@ -117,14 +118,22 @@ namespace BNetServer
return serviceHandlers.LookupByKey((serviceHash, methodId));
}
public IPEndPoint GetAddressForClient(IPAddress address)
public IPEndPoint GetEndpointForClient(IPAddress address)
{
if (IPAddress.IsLoopback(address))
return localAddress;
return _localEndpoint;
return externalAddress;
return _externalEndpoint;
}
public string GetHostnameForClient(IPEndPoint address)
{
if (IPAddress.IsLoopback(address.Address))
return _localHostname;
return _externalHostname;
}
public FormInputs GetFormInput()
{
return formInputs;