Socket.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #pragma once
  2. #include <stdint.h>
  3. #include "il2cpp-config.h"
  4. #include "il2cpp-object-internals.h"
  5. struct Il2CppArray;
  6. struct Il2CppObject;
  7. struct Il2CppString;
  8. namespace il2cpp
  9. {
  10. namespace os
  11. {
  12. struct WSABuf;
  13. }
  14. }
  15. namespace il2cpp
  16. {
  17. namespace icalls
  18. {
  19. namespace System
  20. {
  21. namespace System
  22. {
  23. namespace Net
  24. {
  25. namespace Sockets
  26. {
  27. enum AddressFamily
  28. {
  29. kAddressFamilyUnknown = -1,
  30. kAddressFamilyUnspecified = 0,
  31. kAddressFamilyUnix = 1,
  32. kAddressFamilyInterNetwork = 2,
  33. kAddressFamilyImpLink = 3,
  34. kAddressFamilyPup = 4,
  35. kAddressFamilyChaos = 5,
  36. kAddressFamilyNS = 6,
  37. kAddressFamilyIpx = 6,
  38. kAddressFamilyIso = 7,
  39. kAddressFamilyOsi = 7,
  40. kAddressFamilyEcma = 8,
  41. kAddressFamilyDataKit = 9,
  42. kAddressFamilyCcitt = 10,
  43. kAddressFamilySna = 11,
  44. kAddressFamilyDecNet = 12,
  45. kAddressFamilyDataLink = 13,
  46. kAddressFamilyLat = 14,
  47. kAddressFamilyHyperChannel = 15,
  48. kAddressFamilyAppleTalk = 16,
  49. kAddressFamilyNetBios = 17,
  50. kAddressFamilyVoiceView = 18,
  51. kAddressFamilyFireFox = 19,
  52. kAddressFamilyBanyan = 21,
  53. kAddressFamilyAtm = 22,
  54. kAddressFamilyInterNetworkV6 = 23,
  55. kAddressFamilyCluster = 24,
  56. kAddressFamilyIeee12844 = 25,
  57. kAddressFamilyIrda = 26,
  58. kAddressFamilyNetworkDesigners = 28,
  59. kAddressFamilyMax = 29,
  60. };
  61. enum SocketType
  62. {
  63. kSocketTypeUnknown = -1,
  64. kSocketTypeStream = 1,
  65. kSocketTypeDgram = 2,
  66. kSocketTypeRaw = 3,
  67. kSocketTypeRdm = 4,
  68. kSocketTypeSeqpacket = 5,
  69. };
  70. enum ProtocolType
  71. {
  72. kProtocolTypeUnknown = -1,
  73. kProtocolTypeIP = 0,
  74. kProtocolTypeIcmp = 1,
  75. kProtocolTypeIgmp = 2,
  76. kProtocolTypeGgp = 3,
  77. kProtocolTypeTcp = 6,
  78. kProtocolTypePup = 12,
  79. kProtocolTypeUdp = 17,
  80. kProtocolTypeIdp = 22,
  81. kProtocolTypeND = 77,
  82. kProtocolTypeRaw = 255,
  83. kProtocolTypeUnspecified = 0,
  84. kProtocolTypeIpx = 1000,
  85. kProtocolTypeSpx = 1256,
  86. kProtocolTypeSpxII = 1257,
  87. // #if NET_1_1
  88. kProtocolTypeIPv6 = 41,
  89. // #endif
  90. // #if NET_2_0
  91. kProtocolTypeIPv4 = 4,
  92. kProtocolTypeIPv6RoutingHeader = 43,
  93. kProtocolTypeIPv6FragmentHeader = 44,
  94. kProtocolTypeIPSecEncapsulatingSecurityPayload = 50,
  95. kProtocolTypeIPSecAuthenticationHeader = 51,
  96. kProtocolTypeIcmpV6 = 58,
  97. kProtocolTypeIPv6NoNextHeader = 59,
  98. kProtocolTypeIPv6DestinationOptions = 60,
  99. kProtocolTypeIPv6HopByHopOptions = 0,
  100. // #endif
  101. };
  102. enum SocketOptionLevel
  103. {
  104. kSocketOptionLevelSocket = 65535,
  105. kSocketOptionLevelIP = 0,
  106. kSocketOptionLevelTcp = 6,
  107. kSocketOptionLevelUdp = 17,
  108. //#if NET_1_1
  109. kSocketOptionLevelIPv6 = 41,
  110. //#endif
  111. };
  112. enum SocketOptionName
  113. {
  114. kSocketOptionNameDebug = 1,
  115. kSocketOptionNameAcceptConnection = 2,
  116. kSocketOptionNameReuseAddress = 4,
  117. kSocketOptionNameKeepAlive = 8,
  118. kSocketOptionNameDontRoute = 16,
  119. kSocketOptionNameBroadcast = 32,
  120. kSocketOptionNameUseLoopback = 64,
  121. kSocketOptionNameLinger = 128,
  122. kSocketOptionNameOutOfBandInline = 256,
  123. kSocketOptionNameDontLinger = -129,
  124. kSocketOptionNameExclusiveAddressUse = -5,
  125. kSocketOptionNameSendBuffer = 4097,
  126. kSocketOptionNameReceiveBuffer = 4098,
  127. kSocketOptionNameSendLowWater = 4099,
  128. kSocketOptionNameReceiveLowWater = 4100,
  129. kSocketOptionNameSendTimeout = 4101,
  130. kSocketOptionNameReceiveTimeout = 4102,
  131. kSocketOptionNameError = 4103,
  132. kSocketOptionNameType = 4104,
  133. kSocketOptionNameMaxConnections = 2147483647,
  134. kSocketOptionNameIPOptions = 1,
  135. kSocketOptionNameHeaderIncluded = 2,
  136. kSocketOptionNameTypeOfService = 3,
  137. kSocketOptionNameIpTimeToLive = 4,
  138. kSocketOptionNameMulticastInterface = 9,
  139. kSocketOptionNameMulticastTimeToLive = 10,
  140. kSocketOptionNameMulticastLoopback = 11,
  141. kSocketOptionNameAddMembership = 12,
  142. kSocketOptionNameDropMembership = 13,
  143. kSocketOptionNameDontFragment = 14,
  144. kSocketOptionNameAddSourceMembership = 15,
  145. kSocketOptionNameDropSourceMembership = 16,
  146. kSocketOptionNameBlockSource = 17,
  147. kSocketOptionNameUnblockSource = 18,
  148. kSocketOptionNamePacketInformation = 19,
  149. kSocketOptionNameNoDelay = 1,
  150. kSocketOptionNameBsdUrgent = 2,
  151. kSocketOptionNameExpedited = 2,
  152. kSocketOptionNameNoChecksum = 1,
  153. kSocketOptionNameChecksumCoverage = 20,
  154. // #if NET_2_0
  155. kSocketOptionNameHopLimit = 21,
  156. kSocketOptionNameUpdateAcceptContext = 28683,
  157. kSocketOptionNameUpdateConnectContext = 28688,
  158. // #endif
  159. };
  160. enum SelectMode
  161. {
  162. kSelectModeSelectRead = 0,
  163. kSelectModeSelectWrite = 1,
  164. kSelectModeSelectError = 2,
  165. };
  166. enum SocketFlags
  167. {
  168. kSocketFlagsNone = 0x00000000,
  169. kSocketFlagsOutOfBand = 0x00000001,
  170. kSocketFlagsPeek = 0x00000002,
  171. kSocketFlagsDontRoute = 0x00000004,
  172. kSocketFlagsMaxIOVectorLength = 0x00000010,
  173. // #if NET_2_0
  174. kSocketFlagsTruncated = 0x00000100,
  175. kSocketFlagsControlDataTruncated = 0x00000200,
  176. kSocketFlagsBroadcast = 0x00000400,
  177. kSocketFlagsMulticast = 0x00000800,
  178. // #endif
  179. kSocketFlagsPartial = 0x00008000,
  180. };
  181. enum TransmitFileOptions
  182. {
  183. kTransmitFileOptionsUseDefaultWorkerThread = 0x00000000,
  184. kTransmitFileOptionsDisconnect = 0x00000001,
  185. kTransmitFileOptionsReuseSocket = 0x00000002,
  186. kTransmitFileOptionsWriteBehind = 0x00000004,
  187. kTransmitFileOptionsUseSystemThread = 0x00000010,
  188. kTransmitFileOptionsUseKernelApc = 0x00000020,
  189. };
  190. enum SocketShutdown
  191. {
  192. kSocketShutdownReceive = 0,
  193. kSocketShutdownSend = 1,
  194. kSocketShutdownBoth = 2,
  195. };
  196. class LIBIL2CPP_CODEGEN_API Socket
  197. {
  198. public:
  199. static bool Duplicate_icall(intptr_t handle, int32_t targetProcessId, intptr_t* duplicateHandle, int32_t* error);
  200. static bool IsProtocolSupported_internal(int32_t networkInterface);
  201. static bool Poll_icall(intptr_t socket, SelectMode mode, int32_t timeout, int32_t* error);
  202. static bool SendFile_icall(intptr_t socket, Il2CppString* filename, Il2CppArray* pre_buffer, Il2CppArray* post_buffer, TransmitFileOptions flags, int32_t* error, bool blocking);
  203. static bool SupportsPortReuse(int32_t proto);
  204. static int32_t Available_icall(intptr_t socket, int32_t* error);
  205. static int32_t IOControl_icall(intptr_t socket, int32_t ioctl_code, Il2CppArray* input, Il2CppArray* output, int32_t* error);
  206. static int32_t Receive_array_icall(intptr_t socket, os::WSABuf* bufarray, int32_t count, SocketFlags flags, int32_t *error, bool blocking);
  207. static int32_t Receive_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
  208. static int32_t ReceiveFrom_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, Il2CppSocketAddress** socket_address, int32_t* error, bool blocking);
  209. static int32_t Send_array_icall(intptr_t socket, os::WSABuf* bufarray, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
  210. static int32_t Send_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, int32_t* error, bool blocking);
  211. static int32_t SendTo_icall(intptr_t socket, uint8_t* buffer, int32_t count, SocketFlags flags, Il2CppSocketAddress* socket_address, int32_t* error, bool blocking);
  212. static intptr_t Accept_icall(intptr_t socket, int32_t* error, bool blocking);
  213. static intptr_t Socket_icall(AddressFamily family, SocketType type, ProtocolType proto, int32_t* error);
  214. static Il2CppSocketAddress* LocalEndPoint_icall(intptr_t socket, int32_t family, int32_t* error);
  215. static Il2CppSocketAddress* RemoteEndPoint_icall(intptr_t socket, int32_t family, int32_t* error);
  216. static void Bind_icall(intptr_t socket, Il2CppSocketAddress* socket_address, int32_t* error);
  217. static void Blocking_icall(intptr_t socket, bool block, int32_t* error);
  218. static void cancel_blocking_socket_operation(Il2CppObject* thread);
  219. static void Close_icall(intptr_t socket, int32_t* error);
  220. static void Connect_icall(intptr_t socket, Il2CppSocketAddress* sa, int32_t* error, bool blocking);
  221. static void Disconnect_icall(intptr_t socket, bool reuse, int32_t* error);
  222. static void GetSocketOption_arr_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppArray** byte_val, int32_t *error);
  223. static void GetSocketOption_obj_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppObject** obj_val, int32_t *error);
  224. static void Listen_icall(intptr_t socket, int32_t backlog, int32_t* error);
  225. static void Select_icall(Il2CppArray** sockets, int32_t microSeconds, int32_t* error);
  226. static void SetSocketOption_icall(intptr_t socket, SocketOptionLevel level, SocketOptionName name, Il2CppObject* obj_val, Il2CppArray* byte_val, int32_t int_val, int32_t* error);
  227. static void Shutdown_icall(intptr_t socket, SocketShutdown how, int32_t* error);
  228. };
  229. } /* namespace Sockets */
  230. } /* namespace Net */
  231. } /* namespace System */
  232. } /* namespace System */
  233. } /* namespace icalls */
  234. } /* namespace il2cpp */