public IPEndPoint GetAddressForClient(IPAddress clientAddr) { IPAddress realmIp; // Attempt to send best address for client if (IPAddress.IsLoopback(clientAddr)) { // Try guessing if realm is also connected locally if (IPAddress.IsLoopback(LocalAddress) || IPAddress.IsLoopback(ExternalAddress)) { realmIp = clientAddr; } else { // Assume that user connecting from the machine that authserver is located on // has all realms available in his local network realmIp = LocalAddress; } } else { if (clientAddr.AddressFamily == AddressFamily.InterNetwork && clientAddr.GetNetworkAddress(LocalSubnetMask).Equals(LocalAddress.GetNetworkAddress(LocalSubnetMask))) { realmIp = LocalAddress; } else { realmIp = ExternalAddress; } } IPEndPoint endpoint = new IPEndPoint(realmIp, Port); // Return external IP return(endpoint); }