--- trunk/reactos/lib/mswsock/Makefile 2005-01-18 18:12:41 UTC (rev 13125)
+++ trunk/reactos/lib/mswsock/Makefile 2005-01-18 22:36:39 UTC (rev 13126)
@@ -20,9 +20,9 @@
TARGET_LFLAGS = -nostartfiles -nostdlib
-TARGET_SDKLIBS = kernel32.a
+TARGET_SDKLIBS = kernel32.a ws2_32.a
-TARGET_OBJECTS = stubs.o
+TARGET_OBJECTS = stubs.o extensions.o
TARGET_CLEAN = $(DEP_FILES)
--- trunk/reactos/lib/mswsock/extensions.c 2005-01-18 18:12:41 UTC (rev 13125)
+++ trunk/reactos/lib/mswsock/extensions.c 2005-01-18 22:36:39 UTC (rev 13126)
@@ -0,0 +1,54 @@
+/* $Id: stubs.c 12852 2005-01-06 13:58:04Z mf $
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WinSock DLL
+ * FILE: stubs.c
+ * PURPOSE: WSAIoctl wrappers for Microsoft extensions to Winsock
+ * PROGRAMMERS: KJK::Hyperion <hackbunny@reactos.com>
+ * REVISIONS:
+ */
+
+#include <windows.h>
+#include <winsock2.h>
+#include <mswsock.h>
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+TransmitFile(SOCKET Socket,
+ HANDLE File,
+ DWORD NumberOfBytesToWrite,
+ DWORD NumberOfBytesPerSend,
+ LPOVERLAPPED Overlapped,
+ LPTRANSMIT_FILE_BUFFERS TransmitBuffers,
+ DWORD Flags)
+{
+ static GUID TransmitFileGUID = WSAID_TRANSMITFILE;
+ LPFN_TRANSMITFILE pfnTransmitFile;
+ DWORD cbBytesReturned;
+
+ if (WSAIoctl(Socket,
+ SIO_GET_EXTENSION_FUNCTION_POINTER,
+ &TransmitFileGUID,
+ sizeof(TransmitFileGUID),
+ &pfnTransmitFile,
+ sizeof(pfnTransmitFile),
+ &cbBytesReturned,
+ NULL,
+ NULL) == SOCKET_ERROR)
+ {
+ return FALSE;
+ }
+
+ return pfnTransmitFile(Socket,
+ File,
+ NumberOfBytesToWrite,
+ NumberOfBytesPerSend,
+ Overlapped,
+ TransmitBuffers,
+ Flags);
+}
+
+/* EOF */
--- trunk/reactos/lib/mswsock/stubs.c 2005-01-18 18:12:41 UTC (rev 13125)
+++ trunk/reactos/lib/mswsock/stubs.c 2005-01-18 22:36:39 UTC (rev 13126)
@@ -255,24 +255,6 @@
/*
* @unimplemented
*/
-BOOL
-STDCALL
-TransmitFile(SOCKET Socket,
- HANDLE File,
- DWORD NumberOfBytesToWrite,
- DWORD NumberOfBytesPerSend,
- LPOVERLAPPED Overlapped,
- LPTRANSMIT_FILE_BUFFERS TransmitBuffers,
- DWORD Flags)
-{
- OutputDebugStringW(L"w32sock TransmitFile stub called\n");
-
- return FALSE;
-}
-
-/*
- * @unimplemented
- */
int
STDCALL
WSARecvEx(SOCKET Sock,
--- trunk/reactos/w32api/include/mswsock.h 2005-01-18 18:12:41 UTC (rev 13125)
+++ trunk/reactos/w32api/include/mswsock.h 2005-01-18 22:36:39 UTC (rev 13126)
@@ -54,6 +54,14 @@
BOOL PASCAL AcceptEx(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
VOID PASCAL GetAcceptExSockaddrs(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT);
+#define WSAID_ACCEPTEX { 0xB5367DF0, 0xCBAC, 0x11CF, { 0x95, 0xCA, 0x00, 0x80, 0x5F, 0x48, 0xA1, 0x92 } }
+#define WSAID_TRANSMITFILE { 0xB5367DF1, 0xCBAC, 0x11CF, { 0x95, 0xCA, 0x00, 0x80, 0x5F, 0x48, 0xA1, 0x92 } }
+#define WSAID_GETACCEPTEXSOCKADDRS { 0xB5367DF2, 0xCBAC, 0x11CF, { 0x95, 0xCA, 0x00, 0x80, 0x5F, 0x48, 0xA1, 0x92 } }
+
+typedef BOOL (PASCAL *LPFN_TRANSMITFILE)(SOCKET,HANDLE,DWORD,DWORD,LPOVERLAPPED,LPTRANSMIT_FILE_BUFFERS,DWORD);
+typedef BOOL (PASCAL *LPFN_ACCEPTEX)(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
+typedef VOID (PASCAL *LPFN_GETACCEPTEXSOCKADDRS)(PVOID,DWORD,DWORD,DWORD,struct sockaddr**, LPINT, struct sockaddr**, LPINT);
+
#ifdef _WINSOCK2_H /* These require the winsock2 interface. */
#define TP_ELEMENT_FILE 1