/* * Winsock 2 definitions - used for ws2_32.dll * * FIXME: Still missing required Winsock 2 definitions. */ #ifndef __WINSOCK2API__ #define __WINSOCK2API__ #include "winsock.h" #include "wtypes.h" /* proper 4-byte packing */ #include "pshpack4.h" #define WS_SO_GROUP_ID 0x2001 #define WS_SO_GROUP_PRIORITY 0x2002 #define WS_SO_MAX_MSG_SIZE 0x2003 #define WS_SO_PROTOCOL_INFOA 0x2004 #define WS_SO_PROTOCOL_INFOW 0x2005 #define WS_SO_PROTOCOL_INFO WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO) #define PVD_CONFIG 0x3001 #define SO_CONDITIONAL_ACCEPT 0x3002 /* option flags per socket */ #define FD_MAX_EVENTS 10 #define FD_READ_BIT 0 #define FD_WRITE_BIT 1 #define FD_OOB_BIT 2 #define FD_ACCEPT_BIT 3 #define FD_CONNECT_BIT 4 #define FD_CLOSE_BIT 5 /* * Constants for WSAIoctl() */ #define IOC_UNIX 0x00000000 #define IOC_WS2 0x08000000 #define IOC_PROTOCOL 0x10000000 #define IOC_VENDOR 0x18000000 #define _WSAIO(x,y) (IOC_VOID|(x)|(y)) #define _WSAIOR(x,y) (IOC_OUT|(x)|(y)) #define _WSAIOW(x,y) (IOC_IN|(x)|(y)) #define _WSAIORW(x,y) (IOC_INOUT|(x)|(y)) #define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1) #define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2) #define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3) #define SIO_FLUSH _WSAIO(IOC_WS2,4) #define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5) #define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6) #define SIO_GET_QOS _WSAIORW(IOC_WS2,7) #define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8) #define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9) #define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10) #define SIO_SET_QOS _WSAIOW(IOC_WS2,11) #define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12) #define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13) #define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20) #define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21) #define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22) #define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23) #define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_W32,24) #define SIO_GET_INTERFACE_LIST WS_IOR ('t', 127, u_long) /* Unfortunately the sockaddr_in6 structure doesn't seem to be defined in a standard place, even across different Linux distributions. Until IPv6 support settles down, let's do our own here so the sockaddr_gen union is the correct size.*/ #ifdef s6_addr #undef s6_addr #endif struct ws_in_addr6 { unsigned char s6_addr[16]; /* IPv6 address */ }; struct ws_sockaddr_in6 { short sin6_family; /* AF_INET6 */ u_short sin6_port; /* Transport level port number */ u_long sin6_flowinfo; /* IPv6 flow information */ struct ws_in_addr6 sin6_addr; /* IPv6 address */ }; typedef union sockaddr_gen { struct sockaddr Address; struct ws_sockaddr_in AddressIn; struct ws_sockaddr_in6 AddressIn6; } sockaddr_gen; /* ws_hostent, ws_protoent, ws_servent, ws_netent are 4-byte aligned here ! */ typedef struct ws_hostent32 { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ short h_addrtype; /* host address type */ short h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server */ } _ws_hostent32; typedef struct ws_protoent32 { char *p_name; /* official protocol name */ char **p_aliases; /* alias list */ short p_proto; /* protocol # */ } _ws_protoent32; typedef struct ws_servent32 { char *s_name; /* official service name */ char **s_aliases; /* alias list */ short s_port; /* port # */ char *s_proto; /* protocol to use */ } _ws_servent32; typedef struct ws_netent32 { char *n_name; /* official name of net */ char **n_aliases; /* alias list */ short n_addrtype; /* net address type */ u_long n_net; /* network # */ } _ws_netent32; /* Structure to keep interface specific information */ typedef struct _INTERFACE_INFO { u_long iiFlags; /* Interface flags */ sockaddr_gen iiAddress; /* Interface address */ sockaddr_gen iiBroadcastAddress; /* Broadcast address */ sockaddr_gen iiNetmask; /* Network mask */ } INTERFACE_INFO, * LPINTERFACE_INFO; /* Possible flags for the iiFlags - bitmask */ #ifndef HAVE_NET_IF_H # define IFF_UP 0x00000001 /* Interface is up */ # define IFF_BROADCAST 0x00000002 /* Broadcast is supported */ # define IFF_LOOPBACK 0x00000004 /* this is loopback interface */ # define IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */ # define IFF_MULTICAST 0x00000010 /* multicast is supported */ #endif #define MAX_PROTOCOL_CHAIN 7 #define BASE_PROTOCOL 1 #define LAYERED_PROTOCOL 0 typedef struct _WSAPROTOCOLCHAIN { int ChainLen; /* the length of the chain, */ /* length = 0 means layered protocol, */ /* length = 1 means base protocol, */ /* length > 1 means protocol chain */ DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */ } WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN; #define WSAPROTOCOL_LEN 255 typedef struct _WSAPROTOCOL_INFOA { DWORD dwServiceFlags1; DWORD dwServiceFlags2; DWORD dwServiceFlags3; DWORD dwServiceFlags4; DWORD dwProviderFlags; GUID ProviderId; DWORD dwCatalogEntryId; WSAPROTOCOLCHAIN ProtocolChain; int iVersion; int iAddressFamily; int iMaxSockAddr; int iMinSockAddr; int iSocketType; int iProtocol; int iProtocolMaxOffset; int iNetworkByteOrder; int iSecurityScheme; DWORD dwMessageSize; DWORD dwProviderReserved; CHAR szProtocol[WSAPROTOCOL_LEN+1]; } WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA; typedef struct _WSANETWORKEVENTS { long lNetworkEvents; int iErrorCode[FD_MAX_EVENTS]; } WSANETWORKEVENTS, *LPWSANETWORKEVENTS; typedef struct _OVERLAPPED * LPWSAOVERLAPPED; typedef HANDLE WSAEVENT; typedef unsigned int GROUP; typedef void (CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE) ( DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags ); /* Function declarations */ int WINAPI WSAEnumNetworkEvents(SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents); int WINAPI WSAEventSelect(SOCKET s, WSAEVENT hEventObject, long lNetworkEvents); WSAEVENT WINAPI WSACreateEvent(void); BOOL WINAPI WSACloseEvent(WSAEVENT event); SOCKET WINAPI WSASocketA(int af, int type, int protocol, LPWSAPROTOCOL_INFOA lpProtocolInfo, GROUP g, DWORD dwFlags); #include "poppack.h" #endif