2006-09-27 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / socket-io.h
index e256127db80095173fa760431831f6f2cadf6694..1a16fba421dbe0b9cc6f1eaf371c0d314d409b77 100644 (file)
@@ -13,7 +13,7 @@
 #include <config.h>
 #include <glib.h>
 
-#include <mono/metadata/object.h>
+#include <mono/metadata/object-internals.h>
 #include <mono/io-layer/io-layer.h>
 
 /* This is a copy of System.Net.Sockets.SocketType */
@@ -23,7 +23,7 @@ typedef enum {
        SocketType_Raw=3,
        SocketType_Rdm=4,
        SocketType_Seqpacket=5,
-       SocketType_Unknown=-1,
+       SocketType_Unknown=-1
 } MonoSocketType;
 
 /* This is a copy of System.Net.Sockets.AddressFamily */
@@ -57,7 +57,7 @@ typedef enum {
        AddressFamily_Cluster=24,
        AddressFamily_Ieee12844=25,
        AddressFamily_Irda=26,
-       AddressFamily_NetworkDesigners=28,
+       AddressFamily_NetworkDesigners=28
 } MonoAddressFamily;
 
 /* This is a copy of System.Net.Sockets.ProtocolType */
@@ -70,21 +70,23 @@ typedef enum {
        ProtocolType_Pup=12,
        ProtocolType_Udp=17,
        ProtocolType_Idp=22,
+       ProtocolType_IPv6=41,
        ProtocolType_ND=77,
        ProtocolType_Raw=255,
        ProtocolType_Unspecified=0,
        ProtocolType_Ipx=1000,
        ProtocolType_Spx=1256,
        ProtocolType_SpxII=1257,
-       ProtocolType_Unknown=-1,
+       ProtocolType_Unknown=-1
 } MonoProtocolType;
 
 /* This is a copy of System.Net.Sockets.SocketOptionLevel */
 typedef enum {
        SocketOptionLevel_Socket=65535,
        SocketOptionLevel_IP=0,
+       SocketOptionLevel_IPv6=41,
        SocketOptionLevel_Tcp=6,
-       SocketOptionLevel_Udp=17,
+       SocketOptionLevel_Udp=17
 } MonoSocketOptionLevel;
 
 /* This is a copy of System.Net.Sockets.SocketOptionName */
@@ -129,30 +131,79 @@ typedef enum {
        SocketOptionName_Expedited=2,
        SocketOptionName_NoChecksum=1,
        SocketOptionName_ChecksumCoverage=20,
+
+       /* This is Mono-specific, keep it in sync with
+        * Mono.Posix/PeerCred.cs
+        */
+       SocketOptionName_PeerCred=10001
 } MonoSocketOptionName;
 
-extern SOCKET ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, gint32 family, gint32 type, gint32 proto);
-extern void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock);
+/* This is a copy of System.Net.Sockets.SocketFlags */
+typedef enum {
+       SocketFlags_None = 0x0000,
+       SocketFlags_OutOfBand = 0x0001,
+       SocketFlags_MaxIOVectorLength = 0x0010,
+       SocketFlags_Peek = 0x0002,
+       SocketFlags_DontRoute = 0x0004,
+       SocketFlags_Partial = 0x8000
+} MonoSocketFlags;
+
+typedef struct _MonoSocketAsyncResult {
+       MonoObject obj;
+       MonoObject *socket;
+       HANDLE handle;
+       MonoObject *state;
+       MonoDelegate *callback;
+       MonoWaitHandle *wait_handle;
+       MonoException *delayed_exc;
+       MonoObject *ep;
+       MonoArray *buffer;
+       gint offset;
+       gint size;
+       gint socket_flags;
+       MonoObject *acc_socket;
+       gint total;
+       MonoBoolean completed_synch;
+       MonoBoolean completed;
+       MonoBoolean blocking;
+       gint error;
+       gint operation;
+       MonoAsyncResult *ares;
+} MonoSocketAsyncResult;
+
+typedef struct
+{
+       MonoObject obj;
+       gint pid;
+       gint uid;
+       gint gid;
+} MonoPeerCredData;
+
+extern gpointer ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, gint32 family, gint32 type, gint32 proto, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock, gint32 *error);
 extern gint32 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal(void);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Available_internal(SOCKET sock);
-extern void ves_icall_System_Net_Sockets_Socket_Blocking_internal(SOCKET sock, gboolean block);
-extern SOCKET ves_icall_System_Net_Sockets_Socket_Accept_internal(SOCKET sock);
-extern void ves_icall_System_Net_Sockets_Socket_Listen_internal(SOCKET sock, guint32 backlog);
-extern MonoObject *ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal(SOCKET sock);
-extern MonoObject *ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal(SOCKET sock);
-extern void ves_icall_System_Net_Sockets_Socket_Bind_internal(SOCKET sock, MonoObject *sockaddr);
-extern void ves_icall_System_Net_Sockets_Socket_Connect_internal(SOCKET sock, MonoObject *sockaddr);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Receive_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags);
-extern gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject **sockaddr);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Send_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags);
-extern gint32 ves_icall_System_Net_Sockets_Socket_SendTo_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject *sockaddr);
-extern void ves_icall_System_Net_Sockets_Socket_Select_internal(MonoArray **read_socks, MonoArray **write_socks, MonoArray **err_socks, gint32 timeout);
-extern void ves_icall_System_Net_Sockets_Socket_Shutdown_internal(SOCKET sock, gint32 how);
-extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET sock, gint32 level, gint32 name, MonoObject **obj_val);
-extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal(SOCKET sock, gint32 level, gint32 name, MonoArray **byte_val);
-extern void ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal(SOCKET sock, gint32 level, gint32 name, MonoObject *obj_val, MonoArray *byte_val, gint32 int_val);
-extern gboolean ves_icall_System_Net_Dns_GetHostByName_internal(MonoString *host, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
-extern gboolean ves_icall_System_Net_Dns_GetHostByAddr_internal(MonoString *addr, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
+extern gint32 ves_icall_System_Net_Sockets_Socket_Available_internal(SOCKET sock, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Blocking_internal(SOCKET sock, gboolean block, gint32 *error);
+extern gpointer ves_icall_System_Net_Sockets_Socket_Accept_internal(SOCKET sock, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Listen_internal(SOCKET sock, guint32 backlog, gint32 *error);
+extern MonoObject *ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal(SOCKET sock, gint32 *error);
+extern MonoObject *ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal(SOCKET sock, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Bind_internal(SOCKET sock, MonoObject *sockaddr, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Connect_internal(SOCKET sock, MonoObject *sockaddr, gint32 *error);
+extern gint32 ves_icall_System_Net_Sockets_Socket_Receive_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, gint32 *error);
+extern gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject **sockaddr, gint32 *error);
+extern gint32 ves_icall_System_Net_Sockets_Socket_Send_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, gint32 *error);
+extern gint32 ves_icall_System_Net_Sockets_Socket_SendTo_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject *sockaddr, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Select_internal(MonoArray **sockets, gint32 timeout, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_Shutdown_internal(SOCKET sock, gint32 how, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET sock, gint32 level, gint32 name, MonoObject **obj_val, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal(SOCKET sock, gint32 level, gint32 name, MonoArray **byte_val, gint32 *error);
+extern void ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal(SOCKET sock, gint32 level, gint32 name, MonoObject *obj_val, MonoArray *byte_val, gint32 int_val, gint32 *error);
+extern int ves_icall_System_Net_Sockets_Socket_WSAIoctl (SOCKET sock, gint32 code, MonoArray *input, MonoArray *output, gint32 *error);
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostByName_internal(MonoString *host, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostByAddr_internal(MonoString *addr, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostName_internal(MonoString **h_name);
+extern MonoBoolean ves_icall_System_Net_Sockets_Socket_Poll_internal (SOCKET sock, gint mode, gint timeout, gint32 *error);
 
 extern void mono_network_init(void);
 extern void mono_network_cleanup(void);