Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MsQuicAddressHelpers.cs
Go to the documentation of this file.
3
5
6internal static class MsQuicAddressHelpers
7{
8 internal unsafe static IPEndPoint INetToIPEndPoint(ref MsQuicNativeMethods.SOCKADDR_INET inetAddress)
9 {
10 if (inetAddress.si_family == 2)
11 {
12 return new IPEndPoint(new IPAddress(MemoryMarshal.CreateReadOnlySpan(ref inetAddress.Ipv4.sin_addr[0], 4)), (ushort)IPAddress.NetworkToHostOrder((short)inetAddress.Ipv4.sin_port));
13 }
14 return new IPEndPoint(new IPAddress(MemoryMarshal.CreateReadOnlySpan(ref inetAddress.Ipv6.sin6_addr[0], 16)), (ushort)IPAddress.NetworkToHostOrder((short)inetAddress.Ipv6.sin6_port));
15 }
16
18 {
20 if (!endpoint.Address.Equals(IPAddress.Any) && !endpoint.Address.Equals(IPAddress.IPv6Any))
21 {
22 int bytesWritten;
23 switch (endpoint.Address.AddressFamily)
24 {
25 case AddressFamily.InterNetwork:
26 endpoint.Address.TryWriteBytes(MemoryMarshal.CreateSpan(ref socketAddrInet.Ipv4.sin_addr[0], 4), out bytesWritten);
27 socketAddrInet.Ipv4.sin_family = 2;
28 break;
29 case AddressFamily.InterNetworkV6:
30 endpoint.Address.TryWriteBytes(MemoryMarshal.CreateSpan(ref socketAddrInet.Ipv6.sin6_addr[0], 16), out bytesWritten);
31 socketAddrInet.Ipv6.sin6_family = 23;
32 break;
33 default:
35 }
36 }
37 SetPort(endpoint.Address.AddressFamily, ref socketAddrInet, endpoint.Port);
38 return socketAddrInet;
39 }
40
41 private static void SetPort(AddressFamily addressFamily, ref MsQuicNativeMethods.SOCKADDR_INET socketAddrInet, int originalPort)
42 {
43 ushort sin_port = (ushort)IPAddress.HostToNetworkOrder((short)originalPort);
44 socketAddrInet.Ipv4.sin_port = sin_port;
45 }
46}
static long HostToNetworkOrder(long host)
Definition IPAddress.cs:408
static long NetworkToHostOrder(long network)
Definition IPAddress.cs:435
bool TryWriteBytes(Span< byte > destination, out int bytesWritten)
Definition IPAddress.cs:334
override bool Equals([NotNullWhen(true)] object? comparand)
Definition IPAddress.cs:468
static readonly IPAddress Any
Definition IPAddress.cs:19
static readonly IPAddress IPv6Any
Definition IPAddress.cs:27
AddressFamily AddressFamily
Definition IPAddress.cs:88
static void SetPort(AddressFamily addressFamily, ref MsQuicNativeMethods.SOCKADDR_INET socketAddrInet, int originalPort)
static unsafe IPEndPoint INetToIPEndPoint(ref MsQuicNativeMethods.SOCKADDR_INET inetAddress)
static unsafe MsQuicNativeMethods.SOCKADDR_INET IPEndPointToINet(IPEndPoint endpoint)
static string net_quic_addressfamily_notsupported
Definition SR.cs:14
Definition SR.cs:7