## Breaking Change * IP Matching no longer supports `?` (e.g. you cannot do: "192.16?.0.1") * IP Matching no longer supports `*` and other values in the same section (e.g. you cannot do "192.1\*.0.1") * To do "192.1\*.0.1", you should use the range option with three separate entries: "192.100-199.0.1", "192.1.0.1", "192.10-19.0.1" ## Non-Breaking Changes - [X] Adds IPv6 support (not for servers though, just clients) - [X] Adds interning support for IPv4 mapped to IPv6 - [X] Updates IPv4ToAddress (don't use this unless you know it is IPv4 or IPv4 mapped to IPv6) ## Note: UO Does not support IPv6 for the server. To support an IPv6 server IP you will need to use CUO or some kind of custom client and probably modify it accordingly. Bumps release version
60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
/*************************************************************************
|
|
* ModernUO *
|
|
* Copyright 2019-2020 - ModernUO Development Team *
|
|
* Email: hi@modernuo.com *
|
|
* File: ServerInfo.cs *
|
|
* *
|
|
* This program is free software: you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation, either version 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
*************************************************************************/
|
|
|
|
using System;
|
|
using System.Buffers.Binary;
|
|
using System.Net;
|
|
|
|
namespace Server.Network
|
|
{
|
|
public sealed class ServerInfo
|
|
{
|
|
private IPEndPoint m_Address;
|
|
|
|
public ServerInfo(string name, int fullPercent, TimeZoneInfo tz, IPEndPoint address)
|
|
{
|
|
Name = name;
|
|
FullPercent = fullPercent;
|
|
TimeZone = tz.GetUtcOffset(DateTime.Now).Hours;
|
|
Address = address;
|
|
}
|
|
|
|
public string Name { get; set; }
|
|
|
|
public int FullPercent { get; set; }
|
|
|
|
public int TimeZone { get; set; }
|
|
|
|
public IPEndPoint Address
|
|
{
|
|
get => m_Address;
|
|
set
|
|
{
|
|
m_Address = value;
|
|
Span<byte> integer = stackalloc byte[4];
|
|
value.Address.MapToIPv4().TryWriteBytes(integer, out var bytesWritten);
|
|
if (bytesWritten != 4)
|
|
{
|
|
throw new InvalidOperationException("IP Address could not be serialized to an integer");
|
|
}
|
|
|
|
RawAddress = BinaryPrimitives.ReadUInt32LittleEndian(integer);
|
|
}
|
|
}
|
|
|
|
// UO doesn't support IPv6 servers
|
|
public uint RawAddress { get; private set; }
|
|
}
|
|
}
|