More stubs and better headers for mswsock.dll

Patrik Stridvall ps at leissner.se
Fri Feb 27 11:13:11 CST 2004


*** mswsock

* dlls/mswsock/mswsock.c,
  dlls/mswsock/mswsock.spec,
  dlls/winsock/async.c,
  dlls/winsock/socket.c,
  include/mswsock.h,
  include/winsock.h:
More stubs and better headers for mswsock.dll.

---8<---

Index: wine/dlls/mswsock/mswsock.c
===================================================================
RCS file: /home/wine/wine/dlls/mswsock/mswsock.c,v
retrieving revision 1.2
diff -u -u -r1.2 mswsock.c
--- wine/dlls/mswsock/mswsock.c	5 Sep 2003 23:08:35 -0000	1.2
+++ wine/dlls/mswsock/mswsock.c	27 Feb 2004 17:01:28 -0000
@@ -1,3 +1,4 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
 /*
  * MSWSOCK specific functions
  *
@@ -18,70 +19,119 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-
 #include "config.h"
+
 #include <stdarg.h>
 
 #include "windef.h"
 #include "winbase.h"
 #include "winsock2.h"
+#include "mswsock.h"
+
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(mswsock);
 
-/******************************************************************************
- * This structure is used with the TransmitFile() function.
+/***********************************************************************
+ *		AcceptEx (MSWSOCK.@)
  *
- */
-
-typedef struct _TRANSMIT_FILE_BUFFERS {
-  PVOID Head;
-  DWORD HeadLength;
-  PVOID Tail;
-  DWORD TailLength;
-} TRANSMIT_FILE_BUFFERS;
-typedef TRANSMIT_FILE_BUFFERS* LPTRANSMIT_FILE_BUFFERS;
-
-
-/******************************************************************************
- * TransmitFile (MSWSOCK.@)
- *
- * This function is used to transmit a file over socket.
+ * This function is used to accept a new connection, get the local and remote
+ * address, and receive the initial block of data sent by the client.
  *
  * TODO
  *  This function is currently implemented as a stub.
  */
 
-void WINAPI TransmitFile(SOCKET                  s,
-                         HANDLE                  f,
-                         DWORD                   size,
-                         DWORD                   numpersend,
-                         LPOVERLAPPED            overlapped,
-                         LPTRANSMIT_FILE_BUFFERS trans,
-                         DWORD                   flags)
+BOOL WINAPI AcceptEx(
+	SOCKET sListenSocket, /* [in] Descriptor identifying a socket that 
+                                 has already been called with the listen
+                                 function */
+	SOCKET sAcceptSocket, /* [in] Descriptor identifying a socket on 
+                                 which to accept an incoming connection */
+	PVOID lpOutputBuffer, /* [in]  Pointer to a buffer */
+	DWORD dwReceiveDataLength, /* [in] Number of bytes in lpOutputBuffer
+				      that will be used for actual receive data
+				      at the beginning of the buffer */
+	DWORD dwLocalAddressLength, /* [in] Number of bytes reserved for the
+				       local address information */
+	DWORD dwRemoteAddressLength, /* [in] Number of bytes reserved for the
+					remote address information */
+	LPDWORD lpdwBytesReceived, /* [out] Pointer to a DWORD that receives
+				      the count of bytes received */
+	LPOVERLAPPED lpOverlapped) /* [in] Specify in order to achieve an 
+                                      overlapped (asynchronous) I/O 
+                                      operation */
 {
-  FIXME("not implemented\n");
+    FIXME("not implemented\n");
+  
+    return FALSE;
 }
 
+/***********************************************************************
+ *		GetAcceptExSockaddrs (MSWSOCK.@)
+ */
+VOID WINAPI GetAcceptExSockaddrs(
+	PVOID lpOutputBuffer, /* [in] Pointer to a buffer */
+	DWORD dwReceiveDataLength, /* [in] Number of bytes in the buffer used
+				      for receiving the first data */
+	DWORD dwLocalAddressLength, /* [in] Number of bytes reserved for the
+				       local address information */
+	DWORD dwRemoteAddressLength, /* [in] Number of bytes reserved for the
+					remote address information */
+	struct sockaddr **LocalSockaddr, /* [out] Pointer to the sockaddr
+					    structure that receives the local
+					    address of the connection  */
+	LPINT LocalSockaddrLength, /* [out] Size in bytes of the local
+				      address */
+	struct sockaddr **RemoteSockaddr, /* [out] Pointer to the sockaddr
+					     structure that receives the remote
+					     address of the connection */
+	LPINT RemoteSockaddrLength) /* [out] Size in bytes of the remote address */
+{
+    FIXME("not implemented\n");
+}
 
-/******************************************************************************
- * AcceptEx (MSWSOCK.@)
+/***********************************************************************
+ *		TransmitFile (MSWSOCK.@)
  *
- * This function is used to accept a new connection, get the local and remote
- * address, and receive the initial block of data sent by the client.
+ * This function is used to transmit a file over socket.
  *
  * TODO
  *  This function is currently implemented as a stub.
  */
 
-void WINAPI AcceptEx(SOCKET       listener,
-                     SOCKET       acceptor,
-                     PVOID        oput,
-                     DWORD        recvlen,
-                     DWORD        locaddrlen,
-                     DWORD        remaddrlen,
-                     LPDWORD      bytesrecv,
-                     LPOVERLAPPED overlapped)
+BOOL WINAPI TransmitFile(
+        SOCKET hSocket, /* [in] Handle to a connected socket */
+	HANDLE hFile,   /* [in] Handle to the open file that should be
+                           transmited */
+	DWORD nNumberOfBytesToWrite, /* [in] Number of file bytes to 
+                                        transmit */
+	DWORD nNumberOfBytesPerSend, /* [in] Size in bytes of each block of
+                                         data sent in each send operation */
+	LPOVERLAPPED lpOverlapped, /* [in] Specify in order to achieve an 
+                                      overlapped (asynchronous) I/O 
+                                      operation */
+	LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, 
+		/* [in] Contains pointers to data to send before and after
+                   the file data is sent */
+	DWORD dwFlags) /* [in] Flags */
+{
+    FIXME("not implemented\n");
+
+    return FALSE;
+}
+
+/***********************************************************************
+ *		WSARecvEx (MSWSOCK.@)
+ */
+INT WINAPI WSARecvEx(
+	SOCKET s,   /* [in] Descriptor identifying a connected socket */
+	char *buf,  /* [out] Buffer for the incoming data */
+	INT len,    /* [in] Length of buf, in bytes */
+        INT *flags) /* [in/out] Indicator specifying whether the message is
+	               fully or partially received for datagram sockets */
 {
-  FIXME("not implemented\n");
+    FIXME("not implemented\n");
+    
+    return SOCKET_ERROR;
 }
Index: wine/dlls/mswsock/mswsock.spec
===================================================================
RCS file: /home/wine/wine/dlls/mswsock/mswsock.spec,v
retrieving revision 1.1
diff -u -u -r1.1 mswsock.spec
--- wine/dlls/mswsock/mswsock.spec	2 Aug 2003 00:52:02 -0000	1.1
+++ wine/dlls/mswsock/mswsock.spec	27 Feb 2004 17:01:28 -0000
@@ -1,2 +1,32 @@
+@ stub ServiceMain
+@ stub SvchostPushServiceGlobals
 @ stdcall AcceptEx(long long ptr long long long ptr ptr)
+@ stub EnumProtocolsA
+@ stub EnumProtocolsW
+@ stub GetAcceptExSockaddrs
+@ stub GetAddressByNameA
+@ stub GetAddressByNameW
+@ stub GetNameByTypeA
+@ stub GetNameByTypeW
+@ stub GetServiceA
+@ stub GetServiceW
+@ stub GetTypeByNameA
+@ stub GetTypeByNameW
+@ stub MigrateWinsockConfiguration
+@ stub NPLoadNameSpaces
+@ stub NSPStartup
+@ stub SetServiceA
+@ stub SetServiceW
+@ stub StartWsdpService
+@ stub StopWsdpService
 @ stdcall TransmitFile(long long long long ptr ptr long)
+@ stub WSARecvEx
+@ stub WSPStartup
+@ stub dn_expand
+@ stub getnetbyname
+@ stub inet_network
+@ stub rcmd
+@ stub rexec
+@ stub rresvport
+@ stub s_perror
+@ stub sethostname
Index: wine/dlls/winsock/async.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/async.c,v
retrieving revision 1.32
diff -u -u -r1.32 async.c
--- wine/dlls/winsock/async.c	30 Sep 2003 00:33:48 -0000	1.32
+++ wine/dlls/winsock/async.c	27 Feb 2004 17:01:32 -0000
@@ -104,6 +104,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winsock2.h"
+#include "mswsock.h"
 #include "ws2spi.h"
 #include "wownt32.h"
 #include "wine/winsock16.h"
Index: wine/dlls/winsock/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/socket.c,v
retrieving revision 1.147
diff -u -u -r1.147 socket.c
--- wine/dlls/winsock/socket.c	28 Jan 2004 20:07:24 -0000	1.147
+++ wine/dlls/winsock/socket.c	27 Feb 2004 17:01:33 -0000
@@ -119,6 +119,7 @@
 #include "winuser.h"
 #include "winerror.h"
 #include "winsock2.h"
+#include "mswsock.h"
 #include "ws2tcpip.h"
 #include "wsipx.h"
 #include "winnt.h"
Index: wine/include/mswsock.h
===================================================================
RCS file: /home/wine/wine/include/mswsock.h,v
retrieving revision 1.1
diff -u -u -r1.1 mswsock.h
--- wine/include/mswsock.h	22 May 2002 01:51:41 -0000	1.1
+++ wine/include/mswsock.h	27 Feb 2004 17:01:34 -0000
@@ -1,3 +1,4 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
 /*
  * Copyright (C) the Wine project
  *
@@ -18,26 +19,191 @@
 #ifndef _MSWSOCK_
 #define _MSWSOCK_
 
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*
+ * Options for connect and disconnect data and options.  
+ * Used only by non-TCP/IP transports such as DECNet, OSI TP4, etc.
+ */
 #ifndef USE_WS_PREFIX
+#define SO_CONNDATA        0x7000
+#define SO_CONNOPT         0x7001
+#define SO_DISCDATA        0x7002
+#define SO_DISCOPT         0x7003
+#define SO_CONNDATALEN     0x7004
+#define SO_CONNOPTLEN      0x7005
+#define SO_DISCDATALEN     0x7006
+#define SO_DISCOPTLEN      0x7007
+#else
+#define WS_SO_CONNDATA     0x7000
+#define WS_SO_CONNOPT      0x7001
+#define WS_SO_DISCDATA     0x7002
+#define WS_SO_DISCOPT      0x7003
+#define WS_SO_CONNDATALEN  0x7004
+#define WS_SO_CONNOPTLEN   0x7005
+#define WS_SO_DISCDATALEN  0x7006
+#define WS_SO_DISCOPTLEN   0x7007
+#endif
 
-#define SO_OPENTYPE                0x7008
+/* Option for opening sockets for synchronous access. */
+#ifndef USE_WS_PREFIX
+#define SO_OPENTYPE     0x7008
+#else
+#define WS_SO_OPENTYPE  0x7008
+#endif
+
+#ifndef USE_WS_PREFIX
 #define SO_SYNCHRONOUS_ALERT       0x10
 #define SO_SYNCHRONOUS_NONALERT    0x20
-
 #else
-
-#define WS_SO_OPENTYPE             0x7008
 #define WS_SO_SYNCHRONOUS_ALERT    0x10
 #define WS_SO_SYNCHRONOUS_NONALERT 0x20
+#endif
+
+/* Other NT-specific options. */
+#ifndef USE_WS_PREFIX
+#define SO_MAXDG                      0x7009
+#define SO_MAXPATHDG                  0x700A
+#define SO_UPDATE_ACCEPT_CONTEXT      0x700B
+#define SO_CONNECT_TIME               0x700C
+#define SO_UPDATE_CONNECT_CONTEXT     0x7010
+#else
+#define WS_SO_MAXDG                   0x7009
+#define WS_SO_MAXPATHDG               0x700A
+#define WS_SO_UPDATE_ACCEPT_CONTEXT   0x700B
+#define WS_SO_CONNECT_TIME            0x700C
+#define WS_SO_UPDATE_CONNECT_CONTEXT  0x7010
+#endif
+
+/* TCP options. */
+#ifndef USE_WS_PREFIX
+#define TCP_BSDURGENT              0x7000
+#else
+#define WS_TCP_BSDURGENT              0x7000
+#endif
 
+/*
+ * MS Transport Provider IOCTL to control reporting PORT_UNREACHABLE
+ * messages on UDP sockets via recv/WSARecv/etc.
+ *
+ * Path TRUE in input buffer to enable (default if supported),
+ * FALSE to disable.
+ */
+#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
+
+/***********************************************************************
+ * Microsoft extended defines.
+ */
+
+#define DE_REUSE_SOCKET TF_REUSE_SOCKET
+
+/*
+ * Definition for flags member of the WSAMSG structure.
+ * This is in addition to other MSG_xxx flags defined for
+ * recv/recvfrom/send/sendto.
+ */
+#ifndef USE_WS_PREFIX
+#define MSG_TRUNC   0x0100
+#define MSG_CTRUNC  0x0200
+#define MSG_BCAST   0x0400
+#define MSG_MCAST   0x0800
+#else
+#define WS_MSG_TRUNC   0x0100
+#define WS_MSG_CTRUNC  0x0200
+#define WS_MSG_BCAST   0x0400
+#define WS_MSG_MCAST   0x0800
 #endif
 
+#define TF_DISCONNECT          0x01
+#define TF_REUSE_SOCKET        0x02
+#define TF_WRITE_BEHIND        0x04
+#define TF_USE_DEFAULT_WORKER  0x00
+#define TF_USE_SYSTEM_THREAD   0x10
+#define TF_USE_KERNEL_APC      0x20
+
+#define TP_DISCONNECT           TF_DISCONNECT
+#define TP_REUSE_SOCKET         TF_REUSE_SOCKET
+#define TP_USE_DEFAULT_WORKER   TF_USE_DEFAULT_WORKER
+#define TP_USE_SYSTEM_THREAD    TF_USE_SYSTEM_THREAD
+#define TP_USE_KERNEL_APC       TF_USE_KERNEL_APC
+
+#define TP_ELEMENT_MEMORY   1
+#define TP_ELEMENT_FILE     2
+#define TP_ELEMENT_EOP      4
+
+#define WSAID_ACCEPTEX \
+	{0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_CONNECTEX \
+	{0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
+#define WSAID_DISCONNECTEX \
+	{0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
+#define WSAID_GETACCEPTEXSOCKADDRS \
+	{0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITFILE \
+	{0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITPACKETS \
+	{0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
+#define WSAID_WSARECVMSG \
+	{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
+/***********************************************************************
+ * Microsoft extended types.
+ */
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+    LPVOID  Head;
+    DWORD   HeadLength;
+    LPVOID  Tail;
+    DWORD   TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
+
+typedef struct _TRANSMIT_PACKETS_ELEMENT {
+    ULONG  dwElFlags;
+    ULONG  cLength;
+    union {
+      struct {
+	LARGE_INTEGER  nFileOffset;
+	HANDLE         hFile;
+      } DUMMYSTRUCTNAME;
+      PVOID  pBuffer;
+    } DUMMYUNIONNAME;
+} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT;
+
+typedef struct _WSAMSG {
+    LPSOCKADDR  name;           /* Remote address */
+    INT         namelen;        /* Remote address length */
+    LPWSABUF    lpBuffers;      /* Data buffer array */
+    DWORD       dwBufferCount;  /* Number of elements in the array */
+    WSABUF      Control;        /* Control buffer */
+    DWORD       dwFlags;        /* Flags */
+} WSAMSG, *PWSAMSG, *LPWSAMSG;
+
+/* Layout of ancillary data objects in the control buffer */
+typedef struct _WSACMSGHDR {
+    SIZE_T      cmsg_len;
+    INT         cmsg_level;
+    INT         cmsg_type;
+    /* followed by UCHAR cmsg_data[] */
+} WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR;
+
+typedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct sockaddr *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);
+typedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct sockaddr **, LPINT, struct sockaddr **, LPINT);
+typedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+typedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD);
+typedef INT  (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+
+/***********************************************************************
+ * Microsoft extended functions.
+ */
 
-int WINAPI WSARecvEx(SOCKET,char*,int,int*);
+BOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+VOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct sockaddr **, LPINT, struct sockaddr **, LPINT);
+BOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+INT  WINAPI WSARecvEx(SOCKET, char *, INT, INT *);
 
 #ifdef __cplusplus
 }
Index: wine/include/winsock.h
===================================================================
RCS file: /home/wine/wine/include/winsock.h,v
retrieving revision 1.62
diff -u -u -r1.62 winsock.h
--- wine/include/winsock.h	28 Aug 2003 21:43:35 -0000	1.62
+++ wine/include/winsock.h	27 Feb 2004 17:01:36 -0000
@@ -990,12 +990,6 @@
 int WINAPI WS(shutdown)(SOCKET,int);
 SOCKET WINAPI WS(socket)(int,int,int);
 
-#if defined(__WINESRC__) || !defined(__WINE_WINSOCK2__)
-/* Stuff specific to winsock.h */
-
-#include <mswsock.h>
-
-#endif /* __WINE_WINSOCK2__ */
 #endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */
 
 




More information about the wine-patches mailing list