2023-02-10 15:13:26 +08:00

252 lines
11 KiB
C++

#pragma once
#include <stdint.h>
#include "il2cpp-config.h"
#include "il2cpp-object-internals.h"
struct Il2CppArray;
struct Il2CppObject;
struct Il2CppString;
namespace il2cpp
{
namespace os
{
struct WSABuf;
}
}
namespace il2cpp
{
namespace icalls
{
namespace System
{
namespace System
{
namespace Net
{
namespace Sockets
{
enum AddressFamily
{
kAddressFamilyUnknown = -1,
kAddressFamilyUnspecified = 0,
kAddressFamilyUnix = 1,
kAddressFamilyInterNetwork = 2,
kAddressFamilyImpLink = 3,
kAddressFamilyPup = 4,
kAddressFamilyChaos = 5,
kAddressFamilyNS = 6,
kAddressFamilyIpx = 6,
kAddressFamilyIso = 7,
kAddressFamilyOsi = 7,
kAddressFamilyEcma = 8,
kAddressFamilyDataKit = 9,
kAddressFamilyCcitt = 10,
kAddressFamilySna = 11,
kAddressFamilyDecNet = 12,
kAddressFamilyDataLink = 13,
kAddressFamilyLat = 14,
kAddressFamilyHyperChannel = 15,
kAddressFamilyAppleTalk = 16,
kAddressFamilyNetBios = 17,
kAddressFamilyVoiceView = 18,
kAddressFamilyFireFox = 19,
kAddressFamilyBanyan = 21,
kAddressFamilyAtm = 22,
kAddressFamilyInterNetworkV6 = 23,
kAddressFamilyCluster = 24,
kAddressFamilyIeee12844 = 25,
kAddressFamilyIrda = 26,
kAddressFamilyNetworkDesigners = 28,
kAddressFamilyMax = 29,
};
enum SocketType
{
kSocketTypeUnknown = -1,
kSocketTypeStream = 1,
kSocketTypeDgram = 2,
kSocketTypeRaw = 3,
kSocketTypeRdm = 4,
kSocketTypeSeqpacket = 5,
};
enum ProtocolType
{
kProtocolTypeUnknown = -1,
kProtocolTypeIP = 0,
kProtocolTypeIcmp = 1,
kProtocolTypeIgmp = 2,
kProtocolTypeGgp = 3,
kProtocolTypeTcp = 6,
kProtocolTypePup = 12,
kProtocolTypeUdp = 17,
kProtocolTypeIdp = 22,
kProtocolTypeND = 77,
kProtocolTypeRaw = 255,
kProtocolTypeUnspecified = 0,
kProtocolTypeIpx = 1000,
kProtocolTypeSpx = 1256,
kProtocolTypeSpxII = 1257,
// #if NET_1_1
kProtocolTypeIPv6 = 41,
// #endif
// #if NET_2_0
kProtocolTypeIPv4 = 4,
kProtocolTypeIPv6RoutingHeader = 43,
kProtocolTypeIPv6FragmentHeader = 44,
kProtocolTypeIPSecEncapsulatingSecurityPayload = 50,
kProtocolTypeIPSecAuthenticationHeader = 51,
kProtocolTypeIcmpV6 = 58,
kProtocolTypeIPv6NoNextHeader = 59,
kProtocolTypeIPv6DestinationOptions = 60,
kProtocolTypeIPv6HopByHopOptions = 0,
// #endif
};
enum SocketOptionLevel
{
kSocketOptionLevelSocket = 65535,
kSocketOptionLevelIP = 0,
kSocketOptionLevelTcp = 6,
kSocketOptionLevelUdp = 17,
//#if NET_1_1
kSocketOptionLevelIPv6 = 41,
//#endif
};
enum SocketOptionName
{
kSocketOptionNameDebug = 1,
kSocketOptionNameAcceptConnection = 2,
kSocketOptionNameReuseAddress = 4,
kSocketOptionNameKeepAlive = 8,
kSocketOptionNameDontRoute = 16,
kSocketOptionNameBroadcast = 32,
kSocketOptionNameUseLoopback = 64,
kSocketOptionNameLinger = 128,
kSocketOptionNameOutOfBandInline = 256,
kSocketOptionNameDontLinger = -129,
kSocketOptionNameExclusiveAddressUse = -5,
kSocketOptionNameSendBuffer = 4097,
kSocketOptionNameReceiveBuffer = 4098,
kSocketOptionNameSendLowWater = 4099,
kSocketOptionNameReceiveLowWater = 4100,
kSocketOptionNameSendTimeout = 4101,
kSocketOptionNameReceiveTimeout = 4102,
kSocketOptionNameError = 4103,
kSocketOptionNameType = 4104,
kSocketOptionNameMaxConnections = 2147483647,
kSocketOptionNameIPOptions = 1,
kSocketOptionNameHeaderIncluded = 2,
kSocketOptionNameTypeOfService = 3,
kSocketOptionNameIpTimeToLive = 4,
kSocketOptionNameMulticastInterface = 9,
kSocketOptionNameMulticastTimeToLive = 10,
kSocketOptionNameMulticastLoopback = 11,
kSocketOptionNameAddMembership = 12,
kSocketOptionNameDropMembership = 13,
kSocketOptionNameDontFragment = 14,
kSocketOptionNameAddSourceMembership = 15,
kSocketOptionNameDropSourceMembership = 16,
kSocketOptionNameBlockSource = 17,
kSocketOptionNameUnblockSource = 18,
kSocketOptionNamePacketInformation = 19,
kSocketOptionNameNoDelay = 1,
kSocketOptionNameBsdUrgent = 2,
kSocketOptionNameExpedited = 2,
kSocketOptionNameNoChecksum = 1,
kSocketOptionNameChecksumCoverage = 20,
// #if NET_2_0
kSocketOptionNameHopLimit = 21,
kSocketOptionNameUpdateAcceptContext = 28683,
kSocketOptionNameUpdateConnectContext = 28688,
// #endif
};
enum SelectMode
{
kSelectModeSelectRead = 0,
kSelectModeSelectWrite = 1,
kSelectModeSelectError = 2,
};
enum SocketFlags
{
kSocketFlagsNone = 0x00000000,
kSocketFlagsOutOfBand = 0x00000001,
kSocketFlagsPeek = 0x00000002,
kSocketFlagsDontRoute = 0x00000004,
kSocketFlagsMaxIOVectorLength = 0x00000010,
// #if NET_2_0
kSocketFlagsTruncated = 0x00000100,
kSocketFlagsControlDataTruncated = 0x00000200,
kSocketFlagsBroadcast = 0x00000400,
kSocketFlagsMulticast = 0x00000800,
// #endif
kSocketFlagsPartial = 0x00008000,
};
enum TransmitFileOptions
{
kTransmitFileOptionsUseDefaultWorkerThread = 0x00000000,
kTransmitFileOptionsDisconnect = 0x00000001,
kTransmitFileOptionsReuseSocket = 0x00000002,
kTransmitFileOptionsWriteBehind = 0x00000004,
kTransmitFileOptionsUseSystemThread = 0x00000010,
kTransmitFileOptionsUseKernelApc = 0x00000020,
};
enum SocketShutdown
{
kSocketShutdownReceive = 0,
kSocketShutdownSend = 1,
kSocketShutdownBoth = 2,
};
class LIBIL2CPP_CODEGEN_API Socket
{
public:
static bool Duplicate_icall(intptr_t handle, int32_t targetProcessId, intptr_t* duplicateHandle, int32_t* error);
static bool IsProtocolSupported_internal(int32_t networkInterface);
static bool Poll_icall(intptr_t socket, SelectMode mode, int32_t timeout, int32_t* error);
static bool SendFile_icall(intptr_t socket, Il2CppString* filename, Il2CppArray* pre_buffer, Il2CppArray* post_buffer, TransmitFileOptions flags, int32_t* error, bool blocking);
static bool SupportsPortReuse(int32_t proto);
static int32_t Available_icall(intptr_t socket, int32_t* error);
static int32_t IOControl_icall(intptr_t socket, int32_t ioctl_code, Il2CppArray* input, Il2CppArray* output, int32_t* error);
static int32_t Receive_array_icall(intptr_t socket, os::WSABuf* bufarray, int32_t count, SocketFlags flags, int32_t *error, bool blocking);
static int32_t Receive_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
static int32_t ReceiveFrom_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, Il2CppSocketAddress** socket_address, int32_t* error, bool blocking);
static int32_t Send_array_icall(intptr_t socket, os::WSABuf* bufarray, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
static int32_t Send_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
static int32_t SendTo_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, Il2CppSocketAddress* socket_address, int32_t* error, bool blocking);
static intptr_t Accept_icall(intptr_t socket, int32_t* error, bool blocking);
static intptr_t Socket_icall(AddressFamily family, SocketType type, ProtocolType proto, int32_t* error);
static Il2CppSocketAddress* LocalEndPoint_icall(intptr_t socket, int32_t family, int32_t* error);
static Il2CppSocketAddress* RemoteEndPoint_icall(intptr_t socket, int32_t family, int32_t* error);
static void Bind_icall(intptr_t socket, Il2CppSocketAddress* socket_address, int32_t* error);
static void Blocking_icall(intptr_t socket, bool block, int32_t* error);
static void cancel_blocking_socket_operation(Il2CppObject* thread);
static void Close_icall(intptr_t socket, int32_t* error);
static void Connect_icall(intptr_t socket, Il2CppSocketAddress* sa, int32_t* error, bool blocking);
static void Disconnect_icall(intptr_t socket, bool reuse, int32_t* error);
static void GetSocketOption_arr_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppArray** byte_val, int32_t *error);
static void GetSocketOption_obj_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppObject** obj_val, int32_t *error);
static void Listen_icall(intptr_t socket, int32_t backlog, int32_t* error);
static void Select_icall(Il2CppArray** sockets, int32_t microSeconds, int32_t* error);
static void SetSocketOption_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppObject* obj_val, Il2CppArray* byte_val, int32_t int_val, int32_t* error);
static void Shutdown_icall(intptr_t socket, SocketShutdown how, int32_t* error);
};
} /* namespace Sockets */
} /* namespace Net */
} /* namespace System */
} /* namespace System */
} /* namespace icalls */
} /* namespace il2cpp */