X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fsockets.h;h=45490b01e46c8cb3e9328db18b5fa4c42d4020c7;hb=5f5bed4643181a26ab8b7a529f032ee1e3c7cb96;hp=64f6db178982a7e65b0df0abb1ab1ba6e38ad6cd;hpb=aedc931dceca226e1e8e3865f385c4b315d305e0;p=mono.git diff --git a/mono/io-layer/sockets.h b/mono/io-layer/sockets.h index 64f6db17898..45490b01e46 100644 --- a/mono/io-layer/sockets.h +++ b/mono/io-layer/sockets.h @@ -10,24 +10,10 @@ #ifndef _WAPI_SOCKETS_H_ #define _WAPI_SOCKETS_H_ -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_SYS_FILIO_H -#include /* defines FIONBIO and FIONREAD */ -#endif -#ifdef HAVE_SYS_SOCKIO_H -#include /* defines SIOCATMARK */ -#endif - #include "mono/io-layer/wapi.h" +G_BEGIN_DECLS + #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 @@ -45,84 +31,73 @@ typedef struct #define INVALID_SOCKET (guint32)(~0) #define SOCKET_ERROR -1 +#define WSAID_DISCONNECTEX {0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}} +#define WSAID_TRANSMITFILE {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} + +typedef struct +{ + guint32 Data1; + guint16 Data2; + guint16 Data3; + guint8 Data4[8]; +} WapiGuid; + +typedef struct +{ + gpointer Head; + guint32 HeadLength; + gpointer Tail; + guint32 TailLength; +} WapiTransmitFileBuffers; + +typedef enum { + TF_USE_DEFAULT_WORKER = 0, + TF_DISCONNECT = 0x01, + TF_REUSE_SOCKET = 0x02, + TF_WRITE_BEHIND = 0x04, + TF_USE_SYSTEM_THREAD = 0x10, + TF_USE_KERNEL_APC = 0x20 +} WapiTransmitFileFlags; + +typedef struct +{ + guint32 len; + gpointer buf; +} WapiWSABuf; + +/* If we need to support more WSAIoctl commands then define these + * using the bitfield flags method + */ +#define SIO_GET_EXTENSION_FUNCTION_POINTER 0xC8000006 +#define SIO_KEEPALIVE_VALS 0x98000004 + +typedef gboolean (*WapiDisconnectExFn)(guint32, WapiOverlapped *, guint32, + WapiTransmitFileFlags); +typedef gboolean (*WapiTransmitFileFn)(guint32, gpointer, guint32, guint32, + WapiOverlapped *, + WapiTransmitFileBuffers *, + WapiTransmitFileFlags); + + extern int WSAStartup(guint32 requested, WapiWSAData *data); extern int WSACleanup(void); extern void WSASetLastError(int error); extern int WSAGetLastError(void); extern int closesocket(guint32 handle); -#ifndef _WAPI_BUILDING -#define accept _wapi_accept -#define bind _wapi_bind -#define connect _wapi_connect -#define getpeername _wapi_getpeername -#define getsockname _wapi_getsockname -#define getsockopt _wapi_getsockopt -#define listen _wapi_listen -#define recv _wapi_recv -#define recvfrom _wapi_recvfrom -#define send _wapi_send -#define sendto _wapi_sendto -#define setsockopt _wapi_setsockopt -#define shutdown _wapi_shutdown -#define socket _wapi_socket -#define gethostbyname _wapi_gethostbyname -#define select _wapi_select - -#ifdef FD_CLR -#undef FD_CLR -#endif - -#ifdef FD_ISSET -#undef FD_ISSET -#endif - -#ifdef FD_SET -#undef FD_SET -#endif - -/* No need to wrap FD_ZERO because it doesnt involve file - * descriptors -*/ -#define FD_CLR _wapi_FD_CLR -#define FD_ISSET _wapi_FD_ISSET -#define FD_SET _wapi_FD_SET - -#endif /* _WAPI_BUILDING */ - -extern guint32 _wapi_accept(guint32 handle, struct sockaddr *addr, - socklen_t *addrlen); -extern int _wapi_bind(guint32 handle, struct sockaddr *my_addr, - socklen_t addrlen); -extern int _wapi_connect(guint32 handle, const struct sockaddr *serv_addr, - socklen_t addrlen); -extern int _wapi_getpeername(guint32 handle, struct sockaddr *name, - socklen_t *namelen); -extern int _wapi_getsockname(guint32 handle, struct sockaddr *name, - socklen_t *namelen); -extern int _wapi_getsockopt(guint32 handle, int level, int optname, - void *optval, socklen_t *optlen); -extern int _wapi_listen(guint32 handle, int backlog); -extern int _wapi_recv(guint32 handle, void *buf, size_t len, int recv_flags); -extern int _wapi_recvfrom(guint32 handle, void *buf, size_t len, - int recv_flags, struct sockaddr *from, - socklen_t *fromlen); -extern int _wapi_send(guint32 handle, const void *msg, size_t len, - int send_flags); -extern int _wapi_sendto(guint32 handle, const void *msg, size_t len, - int send_flags, const struct sockaddr *to, - socklen_t tolen); -extern int _wapi_setsockopt(guint32 handle, int level, int optname, - const void *optval, socklen_t optlen); -extern int _wapi_shutdown(guint32 handle, int how); -extern guint32 _wapi_socket(int domain, int type, int protocol);; -extern struct hostent *_wapi_gethostbyname(const char *hostname); -extern int _wapi_select(int nfds, fd_set *readfds, fd_set *writefds, - fd_set *exceptfds, struct timeval *timeout); -extern void _wapi_FD_CLR(guint32 handle, fd_set *set); -extern int _wapi_FD_ISSET(guint32 handle, fd_set *set); -extern void _wapi_FD_SET(guint32 handle, fd_set *set); - extern int ioctlsocket(guint32 handle, gint32 command, gpointer arg); - +extern int WSAIoctl (guint32 handle, gint32 command, + gchar *input, gint i_len, + gchar *output, gint o_len, glong *written, + void *unused1, void *unused2); +extern int WSARecv (guint32 handle, WapiWSABuf *buffers, guint32 count, + guint32 *received, guint32 *flags, + WapiOverlapped *overlapped, WapiOverlappedCB *complete); +extern int WSASend (guint32 handle, WapiWSABuf *buffers, guint32 count, + guint32 *sent, guint32 flags, + WapiOverlapped *overlapped, WapiOverlappedCB *complete); + +gboolean TransmitFile (guint32 socket, gpointer file, guint32 bytes_to_write, guint32 bytes_per_send, WapiOverlapped *ol, + WapiTransmitFileBuffers *tb, guint32 flags); +G_END_DECLS #endif /* _WAPI_SOCKETS_H_ */