public static int ConnectEndPoint(int hostId, EndPoint endPoint, int exceptionConnectionId, out byte error)
{
error = 0;
byte[] array = new byte[]
{
95,
36,
19,
246
};
if (endPoint == null)
{
throw new NullReferenceException("Null EndPoint provided");
}
if (endPoint.GetType().FullName != "UnityEngine.XboxOne.XboxOneEndPoint" && endPoint.GetType().FullName != "UnityEngine.PS4.SceEndPoint")
{
throw new ArgumentException("Endpoint of type XboxOneEndPoint or SceEndPoint required");
}
if (endPoint.GetType().FullName == "UnityEngine.XboxOne.XboxOneEndPoint")
{
if (endPoint.AddressFamily != AddressFamily.InterNetworkV6)
{
throw new ArgumentException("XboxOneEndPoint has an invalid family");
}
SocketAddress socketAddress = endPoint.Serialize();
if (socketAddress.Size != 14)
{
throw new ArgumentException("XboxOneEndPoint has an invalid size");
}
if (socketAddress[0] != 0 || socketAddress[1] != 0)
{
throw new ArgumentException("XboxOneEndPoint has an invalid family signature");
}
if (socketAddress[2] != array[0] || socketAddress[3] != array[1] || socketAddress[4] != array[2] || socketAddress[5] != array[3])
{
throw new ArgumentException("XboxOneEndPoint has an invalid signature");
}
byte[] array2 = new byte[8];
for (int i = 0; i < array2.Length; i++)
{
array2[i] = socketAddress[6 + i];
}
IntPtr intPtr = new IntPtr(BitConverter.ToInt64(array2, 0));
if (intPtr == IntPtr.Zero)
{
throw new ArgumentException("XboxOneEndPoint has an invalid SOCKET_STORAGE pointer");
}
byte[] array3 = new byte[2];
Marshal.Copy(intPtr, array3, 0, array3.Length);
AddressFamily addressFamily = (AddressFamily)(((int)array3[1] << 8) + (int)array3[0]);
if (addressFamily != AddressFamily.InterNetworkV6)
{
throw new ArgumentException("XboxOneEndPoint has corrupt or invalid SOCKET_STORAGE pointer");
}
return(NetworkTransport.Internal_ConnectEndPoint(hostId, intPtr, 128, exceptionConnectionId, out error));
}
else
{
SocketAddress socketAddress2 = endPoint.Serialize();
if (socketAddress2.Size != 16)
{
throw new ArgumentException("EndPoint has an invalid size");
}
if ((int)socketAddress2[0] != socketAddress2.Size)
{
throw new ArgumentException("EndPoint has an invalid size value");
}
if (socketAddress2[1] != 2)
{
throw new ArgumentException("EndPoint has an invalid family value");
}
byte[] array4 = new byte[16];
for (int j = 0; j < array4.Length; j++)
{
array4[j] = socketAddress2[j];
}
IntPtr intPtr2 = Marshal.AllocHGlobal(array4.Length);
Marshal.Copy(array4, 0, intPtr2, array4.Length);
int result = NetworkTransport.Internal_ConnectEndPoint(hostId, intPtr2, 16, exceptionConnectionId, out error);
Marshal.FreeHGlobal(intPtr2);
return(result);
}
}