Added WinSock 2 DLL Stubs
authorCasper Hornstrup <chorns@users.sourceforge.net>
Sun, 17 Sep 2000 09:36:01 +0000 (09:36 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Sun, 17 Sep 2000 09:36:01 +0000 (09:36 +0000)
svn path=/trunk/; revision=1362

16 files changed:
reactos/lib/ws2_32/.cvsignore [new file with mode: 0644]
reactos/lib/ws2_32/include/catalog.h [new file with mode: 0644]
reactos/lib/ws2_32/include/debug.h [new file with mode: 0644]
reactos/lib/ws2_32/include/upcall.h [new file with mode: 0644]
reactos/lib/ws2_32/include/ws2_32.h [new file with mode: 0644]
reactos/lib/ws2_32/makefile [new file with mode: 0644]
reactos/lib/ws2_32/misc/catalog.c [new file with mode: 0644]
reactos/lib/ws2_32/misc/dllmain.c [new file with mode: 0644]
reactos/lib/ws2_32/misc/event.c [new file with mode: 0644]
reactos/lib/ws2_32/misc/ns.c [new file with mode: 0644]
reactos/lib/ws2_32/misc/stubs.c [new file with mode: 0644]
reactos/lib/ws2_32/misc/upcall.c [new file with mode: 0644]
reactos/lib/ws2_32/ws2_32.def [new file with mode: 0644]
reactos/lib/ws2_32/ws2_32.edf [new file with mode: 0644]
reactos/lib/ws2_32/ws2_32.rc [new file with mode: 0644]
reactos/lib/ws2_32/ws2_32_specs [new file with mode: 0644]

diff --git a/reactos/lib/ws2_32/.cvsignore b/reactos/lib/ws2_32/.cvsignore
new file mode 100644 (file)
index 0000000..7779bd9
--- /dev/null
@@ -0,0 +1,6 @@
+ws2_32.a
+ws2_32.dll
+ws2_32.coff
+base.tmp
+junk.tmp
+temp.exp
diff --git a/reactos/lib/ws2_32/include/catalog.h b/reactos/lib/ws2_32/include/catalog.h
new file mode 100644 (file)
index 0000000..cada7ba
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        include/catalog.h
+ * PURPOSE:     Service Provider Catalog definitions
+ */
+#ifndef __CATALOG_H
+#define __CATALOG_H
+
+#include <ws2_32.h>
+#include <wsahelp.h>
+
+typedef struct _CATALOG_ENTRY {
+    LIST_ENTRY ListEntry;
+    CRITICAL_SECTION Lock;
+    WCHAR LibraryName[MAX_PATH];
+    HMODULE hModule;
+    PWINSOCK_MAPPING Mapping;
+    LPWSPSTARTUP WSPStartup;
+    WSPDATA WSPData;
+    WSPPROC_TABLE ProcTable;
+} CATALOG_ENTRY, *PCATALOG_ENTRY;
+
+extern LIST_ENTRY Catalog;
+
+PCATALOG_ENTRY CreateCatalogEntry(
+    LPWSTR LibraryName);
+
+INT DestroyCatalogEntry(
+    PCATALOG_ENTRY Provider);
+
+PCATALOG_ENTRY LocateProvider(
+    LPWSAPROTOCOL_INFOW lpProtocolInfo);
+
+INT LoadProvider(
+    PCATALOG_ENTRY Provider,
+    LPWSAPROTOCOL_INFOW lpProtocolInfo);
+
+INT UnloadProvider(
+    PCATALOG_ENTRY Provider);
+
+VOID CreateCatalog(VOID);
+
+VOID DestroyCatalog(VOID);
+
+#endif /* __CATALOG_H */
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/include/debug.h b/reactos/lib/ws2_32/include/debug.h
new file mode 100644 (file)
index 0000000..cb41161
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        include/debug.h
+ * PURPOSE:     Debugging support macros
+ * DEFINES:     DBG     - Enable debug output
+ *              NASSERT - Disable assertions
+ */
+#ifndef __DEBUG_H
+#define __DEBUG_H
+
+#define NORMAL_MASK    0x000000FF
+#define SPECIAL_MASK   0xFFFFFF00
+#define MIN_TRACE      0x00000001
+#define MID_TRACE      0x00000002
+#define MAX_TRACE      0x00000003
+
+#define DEBUG_ULTRA    0xFFFFFFFF
+
+#ifdef DBG
+
+extern DWORD DebugTraceLevel;
+
+#define Get_DbgPrint(quote...) L##quote
+
+#define WS_DbgPrint(_t_, _x_) \
+    if (((DebugTraceLevel & NORMAL_MASK) >= _t_) || \
+        ((DebugTraceLevel & _t_) > NORMAL_MASK)) { \
+        WCHAR _buffer[256]; \
+        swprintf(_buffer, L"(%S:%d)(%S) ", __FILE__, __LINE__, __FUNCTION__); \
+        OutputDebugStringW(_buffer); \
+        swprintf(_buffer, Get_DbgPrint _x_); \
+        OutputDebugStringW(_buffer); \
+    }
+
+#ifdef ASSERT
+#undef ASSERT
+#endif
+
+#ifdef NASSERT
+#define ASSERT(x)
+#else /* NASSERT */
+#define ASSERT(x) if (!(x)) { WS_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); }
+#endif /* NASSERT */
+
+#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x))
+
+#else /* DBG */
+
+#define WS_DbgPrint(_t_, _x_)
+
+#define ASSERT_IRQL(x)
+#define ASSERT(x)
+
+#endif /* DBG */
+
+
+#define assert(x) ASSERT(x)
+#define assert_irql(x) ASSERT_IRQL(x)
+
+
+#define UNIMPLEMENTED \
+    WS_DbgPrint(MIN_TRACE, ("is unimplemented, please try again later.\n"));
+
+#define CHECKPOINT \
+    do { WS_DbgPrint(MIN_TRACE, ("\n")); } while(0);
+
+#endif /* __DEBUG_H */
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/include/upcall.h b/reactos/lib/ws2_32/include/upcall.h
new file mode 100644 (file)
index 0000000..965db92
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        include/upcall.h
+ * PURPOSE:     Upcall function defintions
+ */
+#ifndef __UPCALL_H
+#define __UPCALL_H
+
+#include <ws2_32.h>
+
+BOOL
+WSPAPI
+WPUCloseEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno);
+
+INT
+WSPAPI
+WPUCloseSocketHandle(
+    IN  SOCKET s,
+    OUT LPINT lpErrno);
+
+INT
+WSPAPI
+WPUCloseThread(
+    IN  LPWSATHREADID lpThreadId,
+    OUT LPINT lpErrno);
+
+WSAEVENT
+WSPAPI
+WPUCreateEvent(
+    OUT LPINT lpErrno);
+
+SOCKET
+WSPAPI
+WPUCreateSocketHandle(
+    IN  DWORD dwCatalogEntryId,
+    IN  DWORD dwContext,
+    OUT LPINT lpErrno);
+
+SOCKET
+WSPAPI
+WPUFDIsSet(
+    IN  SOCKET s,
+    IN  LPFD_SET set);
+
+INT
+WSPAPI
+WPUGetProviderPath(
+    IN      LPGUID lpProviderId,
+    OUT     LPWSTR lpszProviderDllPath,
+    IN OUT  LPINT lpProviderDllPathLen,
+    OUT     LPINT lpErrno);
+
+SOCKET
+WSPAPI
+WPUModifyIFSHandle(
+    IN  DWORD dwCatalogEntryId,
+    IN  SOCKET ProposedHandle,
+    OUT LPINT lpErrno);
+
+INT
+WSPAPI
+WPUOpenCurrentThread(
+    OUT LPWSATHREADID lpThreadId,
+    OUT LPINT lpErrno);
+
+BOOL
+WSPAPI
+WPUPostMessage(
+    IN  HWND hWnd,
+    IN  UINT Msg,
+    IN  WPARAM wParam,
+    IN  LPARAM lParam);
+
+INT
+WSPAPI
+WPUQueryBlockingCallback(
+    IN  DWORD dwCatalogEntryId,
+    OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
+    OUT LPDWORD lpdwContext,
+    OUT LPINT lpErrno);
+
+INT
+WSPAPI
+WPUQuerySocketHandleContext(
+    IN  SOCKET s,
+    OUT LPDWORD lpContext,
+    OUT LPINT lpErrno);
+
+INT
+WSPAPI
+WPUQueueApc(
+    IN  LPWSATHREADID lpThreadId,
+    IN  LPWSAUSERAPC lpfnUserApc,
+    IN  DWORD dwContext,
+    OUT LPINT lpErrno);
+
+BOOL
+WSPAPI
+WPUResetEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno);
+
+BOOL
+WSPAPI
+WPUSetEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno);
+
+#endif /* __UPCALL_H */
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/include/ws2_32.h b/reactos/lib/ws2_32/include/ws2_32.h
new file mode 100644 (file)
index 0000000..91323eb
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        include/ws2_32.h
+ * PURPOSE:     WinSock 2 DLL header
+ */
+#ifndef __WS2_32_H
+#define __WS2_32_H
+
+#include <ddk/ntddk.h>
+#include <winsock2.h>
+#include <ws2spi.h>
+#include <windows.h>
+#include <debug.h>
+
+/* Exported by ntdll.dll, but where is the prototype? */
+unsigned long strtoul(const char *nptr, char **endptr, int base);
+
+
+#define EXPORT STDCALL
+
+extern HANDLE GlobalHeap;
+extern WSPUPCALLTABLE UpcallTable;
+
+
+typedef struct _WINSOCK_THREAD_BLOCK {
+    INT LastErrorValue;     /* Error value from last function that failed */
+    BOOL Initialized;       /* TRUE if WSAStartup() has been successfully called */
+} WINSOCK_THREAD_BLOCK, *PWINSOCK_THREAD_BLOCK;
+
+
+/* Macros */
+
+#define WSAINITIALIZED (((PWINSOCK_THREAD_BLOCK)NtCurrentTeb()->WinSockData)->Initialized)
+
+#define WSASETINITIALIZED (((PWINSOCK_THREAD_BLOCK)NtCurrentTeb()->WinSockData)->Initialized = TRUE)
+
+#endif /* __WS2_32_H */
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/makefile b/reactos/lib/ws2_32/makefile
new file mode 100644 (file)
index 0000000..fe934e9
--- /dev/null
@@ -0,0 +1,98 @@
+# Makefile for ReactOS WinSock 2 DLL
+
+PATH_TO_TOP = ../..
+
+BASE_CFLAGS = -Iinclude -I../../include -DUNICODE
+
+TARGETNAME=ws2_32
+
+MISC_OBJECTS = misc/dllmain.o misc/catalog.o misc/event.o misc/ns.o \
+               misc/stubs.o misc/upcall.o
+
+RESOURCE_OBJECT = $(TARGETNAME).coff
+
+OBJECTS = $(MISC_OBJECTS) $(RESOURCE_OBJECT)
+
+LIBS = ../ntdll/ntdll.a \
+       ../kernel32/kernel32.a \
+       ../advapi32/advapi32.a
+
+ifeq ($(DOSCLI),yes)
+CLEAN_FILES = misc\*.o \
+              $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
+                 $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff
+else
+CLEAN_FILES = misc/*.o \
+              $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
+                 $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff
+endif
+
+all: $(TARGETNAME).dll
+
+$(TARGETNAME).coff: $(TARGETNAME).rc ../../include/reactos/resource.h
+
+$(TARGETNAME).a: $(OBJECTS)
+       $(LD) -r $(OBJECTS) -o $(TARGETNAME).a
+
+$(TARGETNAME).dll: $(LIBS) $(OBJECTS) $(TARGETNAME).def
+       $(LD) -r $(OBJECTS) -o $(TARGETNAME).o
+       $(DLLTOOL) \
+               --dllname $(TARGETNAME).dll \
+               --def $(TARGETNAME).def \
+               --kill-at \
+               --output-lib $(TARGETNAME).a
+       $(CC) \
+               $(TARGETNAME).o \
+        $(LIBS) \
+               -specs=$(TARGETNAME)_specs \
+               -mdll \
+               -o junk.tmp \
+               -Wl,--base-file,base.tmp 
+       - $(RM) junk.tmp
+       $(DLLTOOL) \
+               --dllname $(TARGETNAME).dll \
+               --base-file base.tmp \
+               --output-exp temp.exp \
+               --def $(TARGETNAME).edf
+       - $(RM) base.tmp
+       $(CC) \
+               $(TARGETNAME).o \
+        $(LIBS) \
+               -specs=$(TARGETNAME)_specs \
+               -mdll \
+               -o $(TARGETNAME).dll \
+               -Wl,--image-base,0x10000 \
+               -Wl,--file-alignment,0x1000 \
+               -Wl,--section-alignment,0x1000 \
+               -Wl,temp.exp
+       - $(RM) temp.exp
+       $(NM) --numeric-sort $(TARGETNAME).dll > $(TARGETNAME).sym
+
+
+clean: $(CLEAN_FILES:%=%_clean)
+
+$(CLEAN_FILES:%=%_clean): %_clean:
+       - $(RM) $*
+
+.PHONY: clean $(CLEAN_FILES:%=%_clean)
+
+install: $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll
+
+$(FLOPPY_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll
+ifeq ($(DOSCLI),yes)
+       $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)\dlls\$(TARGETNAME).dll
+else
+       $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll
+endif
+
+dist: $(DIST_DIR)/dlls/$(TARGETNAME).dll
+
+$(DIST_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll
+ifeq ($(DOSCLI),yes)
+       $(CP) $(TARGETNAME).dll ..\..\$(DIST_DIR)\dlls\$(TARGETNAME).dll
+else
+       $(CP) $(TARGETNAME).dll ../../$(DIST_DIR)/dlls/$(TARGETNAME).dll
+endif
+
+include ../../rules.mak
+
diff --git a/reactos/lib/ws2_32/misc/catalog.c b/reactos/lib/ws2_32/misc/catalog.c
new file mode 100644 (file)
index 0000000..16e9b64
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/catalog.c
+ * PURPOSE:     Service Provider Catalog
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+#include <catalog.h>
+
+
+LIST_ENTRY CatalogListHead;
+CRITICAL_SECTION CatalogLock;
+
+PCATALOG_ENTRY CreateCatalogEntry(
+    LPWSTR LibraryName)
+{
+    PCATALOG_ENTRY Provider;
+
+    Provider = HeapAlloc(GlobalHeap, 0, sizeof(CATALOG_ENTRY));
+    if (!Provider)
+        return NULL;
+
+    InitializeCriticalSection(&Provider->Lock);
+    Provider->hModule = (HMODULE)INVALID_HANDLE_VALUE;
+    lstrcpyW(Provider->LibraryName, LibraryName);
+    Provider->Mapping = NULL;
+
+    EnterCriticalSection(&CatalogLock);
+    InsertTailList(&CatalogListHead, &Provider->ListEntry);
+    LeaveCriticalSection(&CatalogLock);
+
+    return Provider;
+}
+
+
+INT DestroyCatalogEntry(
+    PCATALOG_ENTRY Provider)
+{
+    INT Status;
+
+    EnterCriticalSection(&CatalogLock);
+    RemoveEntryList(&Provider->ListEntry);
+    LeaveCriticalSection(&CatalogLock);
+
+    HeapFree(GlobalHeap, 0, Provider->Mapping);
+
+    if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) {
+        Status = UnloadProvider(Provider);
+    } else {
+        Status = NO_ERROR;
+    }
+
+    DeleteCriticalSection(&Provider->Lock);
+
+    HeapFree(GlobalHeap, 0, Provider);
+
+    return Status;
+}
+
+
+PCATALOG_ENTRY LocateProvider(
+    LPWSAPROTOCOL_INFOW lpProtocolInfo)
+{
+    PLIST_ENTRY CurrentEntry;
+    PCATALOG_ENTRY Provider;
+    UINT i;
+
+    EnterCriticalSection(&CatalogLock);
+    CurrentEntry = CatalogListHead.Flink;
+    while (CurrentEntry != &CatalogListHead) {
+           Provider = CONTAINING_RECORD(CurrentEntry,
+                                     CATALOG_ENTRY,
+                                     ListEntry);
+
+        for (i = 0; i < Provider->Mapping->Rows; i++) {
+            if ((lpProtocolInfo->iAddressFamily == Provider->Mapping->Mapping[i].AddressFamily) &&
+                (lpProtocolInfo->iSocketType    == Provider->Mapping->Mapping[i].SocketType) &&
+                ((lpProtocolInfo->iProtocol     == Provider->Mapping->Mapping[i].Protocol) ||
+                (lpProtocolInfo->iSocketType    == SOCK_RAW))) {
+                LeaveCriticalSection(&CatalogLock);
+                return Provider;
+            }
+        }
+
+        CurrentEntry = CurrentEntry->Flink;
+    }
+    LeaveCriticalSection(&CatalogLock);
+
+    return NULL;
+}
+
+
+INT LoadProvider(
+    PCATALOG_ENTRY Provider,
+    LPWSAPROTOCOL_INFOW lpProtocolInfo)
+{
+    INT Status = NO_ERROR;
+
+    WS_DbgPrint(MIN_TRACE, ("Loading provider...\n"));
+
+    if (Provider->hModule == (HMODULE)INVALID_HANDLE_VALUE) {
+        /* DLL is not loaded so load it now */
+        Provider->hModule = LoadLibrary(Provider->LibraryName);
+        if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) {
+            Provider->WSPStartup = (LPWSPSTARTUP)GetProcAddress(Provider->hModule,
+                                                                "WSPStartup");
+            if (Provider->WSPStartup) {
+                Status = WSPStartup(MAKEWORD(2, 2),
+                                    &Provider->WSPData,
+                                    lpProtocolInfo,
+                                    UpcallTable,
+                                    &Provider->ProcTable);
+            } else
+                Status = ERROR_BAD_PROVIDER;
+        } else
+            Status = ERROR_DLL_NOT_FOUND;
+    } else
+        Status = NO_ERROR;
+
+    WS_DbgPrint(MIN_TRACE, ("Status %d\n", Status));
+
+    return Status;
+}
+
+
+INT UnloadProvider(
+    PCATALOG_ENTRY Provider)
+{
+    INT Status = NO_ERROR;
+
+    if (Provider->hModule != (HMODULE)INVALID_HANDLE_VALUE) {
+        Provider->ProcTable.lpWSPCleanup(&Status);
+
+        if (!FreeLibrary(Provider->hModule))
+            Status = GetLastError();
+
+        Provider->hModule = (HMODULE)INVALID_HANDLE_VALUE;
+    }
+
+    return Status;
+}
+
+
+VOID CreateCatalog(VOID)
+{
+    PCATALOG_ENTRY Provider;
+
+    InitializeCriticalSection(&CatalogLock);
+
+    InitializeListHead(&CatalogListHead);
+
+    /* FIXME: Read service provider catalog from registry */
+#if 1
+    Provider = CreateCatalogEntry(L"msafd.dll");
+    if (!Provider)
+        return;
+
+    Provider->Mapping = HeapAlloc(GlobalHeap, 0, sizeof(WINSOCK_MAPPING) + 3 * sizeof(DWORD));
+    if (!Provider->Mapping)
+        return;
+
+    Provider->Mapping->Rows    = 1;
+    Provider->Mapping->Columns = 3;
+    Provider->Mapping->Mapping[0].AddressFamily = AF_INET;
+    Provider->Mapping->Mapping[0].SocketType    = SOCK_RAW;
+    Provider->Mapping->Mapping[0].Protocol      = 0;
+#endif
+}
+
+
+VOID DestroyCatalog(VOID)
+{
+    PLIST_ENTRY CurrentEntry;
+    PCATALOG_ENTRY Provider;
+
+    CurrentEntry = CatalogListHead.Flink;
+    while (CurrentEntry != &CatalogListHead) {
+           Provider = CONTAINING_RECORD(CurrentEntry,
+                                     CATALOG_ENTRY,
+                                     ListEntry);
+
+        DestroyCatalogEntry(Provider);
+
+        CurrentEntry = CurrentEntry->Flink;
+    }
+
+    DeleteCriticalSection(&CatalogLock);
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/misc/dllmain.c b/reactos/lib/ws2_32/misc/dllmain.c
new file mode 100644 (file)
index 0000000..4f05cb9
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/dllmain.c
+ * PURPOSE:     DLL entry point
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+#include <catalog.h>
+#include <upcall.h>
+
+#ifdef DBG
+
+/* See debug.h for debug/trace constants */
+DWORD DebugTraceLevel = MIN_TRACE;
+
+#endif /* DBG */
+
+/* To make the linker happy */
+VOID STDCALL KeBugCheck (ULONG BugCheckCode) {}
+
+
+HANDLE GlobalHeap;
+WSPUPCALLTABLE UpcallTable;
+
+
+INT
+EXPORT
+WSAGetLastError(VOID)
+{
+    PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData;
+
+    if (p) {
+        return p->LastErrorValue;
+    } else {
+        /* FIXME: What error code should we use here? Can this even happen? */
+        return ERROR_BAD_ENVIRONMENT;
+    }
+}
+
+
+VOID
+EXPORT
+WSASetLastError(
+    IN  INT iError)
+{
+    PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData;
+
+    if (p)
+        p->LastErrorValue = iError;
+}
+
+
+INT
+EXPORT
+WSAStartup(
+    IN  WORD wVersionRequested,
+    OUT LPWSADATA lpWSAData)
+{
+    WS_DbgPrint(MIN_TRACE, ("WSAStartup of ws2_32.dll\n"));
+
+    lpWSAData->wVersion     = wVersionRequested;
+    lpWSAData->wHighVersion = 2;
+    lstrcpyA(lpWSAData->szDescription, "WinSock 2.0");
+    lstrcpyA(lpWSAData->szSystemStatus, "Running");
+    lpWSAData->iMaxSockets  = 0;
+    lpWSAData->iMaxUdpDg    = 0;
+    lpWSAData->lpVendorInfo = NULL;
+
+    WSASETINITIALIZED;
+
+    return NO_ERROR;
+}
+
+
+INT
+EXPORT
+WSACleanup(VOID)
+{
+    WS_DbgPrint(MIN_TRACE, ("WSACleanup of ws2_32.dll\n"));
+
+    if (!WSAINITIALIZED) {
+        WSASetLastError(WSANOTINITIALISED);
+        return WSANOTINITIALISED;
+    }
+
+    return NO_ERROR;
+}
+
+
+SOCKET
+EXPORT
+WSASocketA(
+    IN  INT af,
+    IN  INT type,
+    IN  INT protocol,
+    IN  LPWSAPROTOCOL_INFOA lpProtocolInfo,
+    IN  GROUP g,
+    IN  DWORD dwFlags)
+/*
+ * FUNCTION: Creates a new socket
+ */
+{
+    WSAPROTOCOL_INFOW ProtocolInfoW;
+    LPWSAPROTOCOL_INFOW p;
+    UNICODE_STRING StringU;
+    ANSI_STRING StringA;
+
+    if (lpProtocolInfo) {
+        memcpy(&ProtocolInfoW,
+               lpProtocolInfo,
+               sizeof(WSAPROTOCOL_INFOA) -
+               sizeof(CHAR) * (WSAPROTOCOL_LEN + 1));
+
+        RtlInitAnsiString(&StringA, (LPSTR)lpProtocolInfo->szProtocol);
+        RtlInitUnicodeString(&StringU, (LPWSTR)&ProtocolInfoW.szProtocol);
+        RtlAnsiStringToUnicodeString(&StringU,
+                                            &StringA,
+                                                FALSE);
+        p = &ProtocolInfoW;
+    } else {
+        p = NULL;
+    }
+
+    return WSASocketW(af,
+                      type,
+                      protocol,
+                      p,
+                      g,
+                      dwFlags);
+}
+
+
+SOCKET
+EXPORT
+WSASocketW(
+    IN  INT af,
+    IN  INT type,
+    IN  INT protocol,
+    IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
+    IN  GROUP g,
+    IN  DWORD dwFlags)
+/*
+ * FUNCTION: Creates a new socket
+ * ARGUMENTS:
+ *     af             = Address family
+ *     type           = Socket type
+ *     protocol       = Protocol type
+ *     lpProtocolInfo = Pointer to protocol information
+ *     g              = Reserved
+ *     dwFlags        = Socket flags
+ * RETURNS:
+ *     Created socket, or INVALID_SOCKET if it could not be created
+ */
+{
+    INT Status;
+    SOCKET Socket;
+    PCATALOG_ENTRY Provider;
+    WSAPROTOCOL_INFOW ProtocolInfo;
+
+    if (!WSAINITIALIZED) {
+        WSASetLastError(WSANOTINITIALISED);
+        return INVALID_SOCKET;
+    }
+
+    if (!lpProtocolInfo) {
+        lpProtocolInfo = &ProtocolInfo;
+        ZeroMemory(&ProtocolInfo, sizeof(WSAPROTOCOL_INFOW));
+
+        ProtocolInfo.iAddressFamily = af;
+        ProtocolInfo.iSocketType    = type;
+        ProtocolInfo.iProtocol      = protocol;
+    }
+
+    Provider = LocateProvider(lpProtocolInfo);
+    if (!Provider) {
+        WSASetLastError(WSAEAFNOSUPPORT);
+        return INVALID_SOCKET;
+    }
+
+    Status = LoadProvider(Provider, lpProtocolInfo);
+
+    if (Status != NO_ERROR) {
+        WSASetLastError(Status);
+        return INVALID_SOCKET;
+    }
+
+    Socket = Provider->ProcTable.lpWSPSocket(af,
+                                             type,
+                                             protocol,
+                                             lpProtocolInfo,
+                                             g,
+                                             dwFlags,
+                                             &Status);
+    if (Status != NO_ERROR) {
+        WSASetLastError(Status);
+        return INVALID_SOCKET;
+    }
+
+    return Socket;
+}
+
+
+BOOL
+STDCALL
+DllMain(PVOID hInstDll,
+        ULONG dwReason,
+        PVOID Reserved)
+{
+    WS_DbgPrint(MIN_TRACE, ("DllMain of ws2_32.dll\n"));
+
+#if 0
+    switch (dwReason) {
+    case DLL_PROCESS_ATTACH:
+        GlobalHeap = HeapCreate(0, 0, 0);
+        if (!GlobalHeap)
+            return FALSE;
+
+        if (ReadCatalog() != NO_ERROR)
+            return FALSE;
+
+        UpcallTable.lpWPUCloseEvent         = WPUCloseEvent;
+        UpcallTable.lpWPUCloseSocketHandle  = WPUCloseSocketHandle;
+        UpcallTable.lpWPUCreateEvent        = WPUCreateEvent;
+        UpcallTable.lpWPUCreateSocketHandle = WPUCreateSocketHandle;
+        UpcallTable.lpWPUFDIsSet            = WPUFDIsSet;
+        UpcallTable.lpWPUGetProviderPath    = WPUGetProviderPath;
+        UpcallTable.lpWPUModifyIFSHandle    = WPUModifyIFSHandle;
+        UpcallTable.lpWPUPostMessage        = WPUPostMessage;
+        UpcallTable.lpWPUQueryBlockingCallback    = WPUQueryBlockingCallback;
+        UpcallTable.lpWPUQuerySocketHandleContext = WPUQuerySocketHandleContext;
+        UpcallTable.lpWPUQueueApc           = WPUQueueApc;
+        UpcallTable.lpWPUResetEvent         = WPUResetEvent;
+        UpcallTable.lpWPUSetEvent           = WPUSetEvent;
+        UpcallTable.lpWPUOpenCurrentThread  = WPUOpenCurrentThread;
+        UpcallTable.lpWPUCloseThread        = WPUCloseThread;
+        break;
+
+    case DLL_THREAD_ATTACH: {
+        PWINSOCK_THREAD_BLOCK p;
+
+        p = HeapAlloc(GlobalHeap, 0, sizeof(WINSOCK_THREAD_BLOCK));
+        if (p) {
+            p->LastErrorValue = NO_ERROR;
+            p->Initialized    = FALSE;
+            NtCurrentTeb()->WinSockData = p;
+        }
+
+        break;
+    }
+
+    case DLL_THREAD_DETACH: {
+        PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData;
+
+        if (p)
+            HeapFree(GlobalHeap, 0, p);
+
+        break;
+    }
+
+    case DLL_PROCESS_DETACH:
+        DestroyCatalog();
+        HeapDestroy(GlobalHeap);
+        break;
+    }
+#endif
+    return TRUE;
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/misc/event.c b/reactos/lib/ws2_32/misc/event.c
new file mode 100644 (file)
index 0000000..77d0de8
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/event.c
+ * PURPOSE:     Event handling
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+
+BOOL
+EXPORT
+WSACloseEvent(
+    IN  WSAEVENT hEvent)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+WSAEVENT
+EXPORT
+WSACreateEvent(VOID)
+{
+    UNIMPLEMENTED
+
+    return (WSAEVENT)0;
+}
+
+
+BOOL
+EXPORT
+WSAResetEvent(
+    IN  WSAEVENT hEvent)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+BOOL
+EXPORT
+WSASetEvent(
+    IN  WSAEVENT hEvent)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+DWORD
+EXPORT
+WSAWaitForMultipleEvents(
+    IN  DWORD cEvents,
+    IN  CONST WSAEVENT FAR* lphEvents,
+    IN  BOOL fWaitAll,
+    IN  DWORD dwTimeout,
+    IN  BOOL fAlertable)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/misc/ns.c b/reactos/lib/ws2_32/misc/ns.c
new file mode 100644 (file)
index 0000000..8a6d7bb
--- /dev/null
@@ -0,0 +1,504 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/ns.c
+ * PURPOSE:     Namespace APIs
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+
+/* Name resolution APIs */
+
+INT
+EXPORT
+WSAAddressToStringA(
+    IN      LPSOCKADDR lpsaAddress,
+    IN      DWORD dwAddressLength,
+    IN      LPWSAPROTOCOL_INFOA lpProtocolInfo,
+    OUT     LPSTR lpszAddressString,
+    IN OUT  LPDWORD lpdwAddressStringLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAAddressToStringW(
+    IN      LPSOCKADDR lpsaAddress,
+    IN      DWORD dwAddressLength,
+    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
+    OUT     LPWSTR lpszAddressString,
+    IN OUT  LPDWORD lpdwAddressStringLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAEnumNameSpaceProvidersA(
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSANAMESPACE_INFOA lpnspBuffer)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAEnumNameSpaceProvidersW(
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSANAMESPACE_INFOW lpnspBuffer)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAGetServiceClassInfoA(
+    IN      LPGUID lpProviderId,
+    IN      LPGUID lpServiceClassId,
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSASERVICECLASSINFOA lpServiceClassInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAGetServiceClassInfoW(
+    IN      LPGUID lpProviderId,
+    IN      LPGUID lpServiceClassId,
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSASERVICECLASSINFOW lpServiceClassInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAGetServiceClassNameByClassIdA(
+    IN      LPGUID lpServiceClassId,
+    OUT     LPSTR lpszServiceClassName,
+    IN OUT  LPDWORD lpdwBufferLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAGetServiceClassNameByClassIdW(
+    IN      LPGUID lpServiceClassId,
+    OUT     LPWSTR lpszServiceClassName,
+    IN OUT  LPDWORD lpdwBufferLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAInstallServiceClassA(
+    IN  LPWSASERVICECLASSINFOA lpServiceClassInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAInstallServiceClassW(
+    IN  LPWSASERVICECLASSINFOW lpServiceClassInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSALookupServiceBeginA(
+    IN  LPWSAQUERYSETA lpqsRestrictions,
+    IN  DWORD dwControlFlags,
+    OUT LPHANDLE lphLookup)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSALookupServiceBeginW(
+    IN  LPWSAQUERYSETW lpqsRestrictions,
+    IN  DWORD dwControlFlags,
+    OUT LPHANDLE lphLookup)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSALookupServiceEnd(
+    IN  HANDLE hLookup)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSALookupServiceNextA(
+    IN      HANDLE hLookup,
+    IN      DWORD dwControlFlags,
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSAQUERYSETA lpqsResults)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSALookupServiceNextW(
+    IN      HANDLE hLookup,
+    IN      DWORD dwControlFlags,
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPWSAQUERYSETW lpqsResults)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSARemoveServiceClass(
+    IN  LPGUID lpServiceClassId)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSASetServiceA(
+    IN  LPWSAQUERYSETA lpqsRegInfo,
+    IN  WSAESETSERVICEOP essOperation,
+    IN  DWORD dwControlFlags)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSASetServiceW(
+    IN  LPWSAQUERYSETW lpqsRegInfo,
+    IN  WSAESETSERVICEOP essOperation,
+    IN  DWORD dwControlFlags)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAStringToAddressA(
+    IN      LPSTR AddressString,
+    IN      INT AddressFamily,
+    IN      LPWSAPROTOCOL_INFOA lpProtocolInfo,
+    OUT     LPSOCKADDR lpAddress,
+    IN OUT  LPINT lpAddressLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+EXPORT
+WSAStringToAddressW(
+    IN      LPWSTR AddressString,
+    IN      INT AddressFamily,
+    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
+    OUT     LPSOCKADDR lpAddress,
+    IN OUT  LPINT lpAddressLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+/* WinSock 1.1 compatible name resolution APIs */
+
+LPHOSTENT
+EXPORT
+gethostbyaddr(
+    IN  CONST CHAR FAR* addr,
+    IN  INT len,
+    IN  INT type)
+{
+    UNIMPLEMENTED
+
+    return (LPHOSTENT)NULL;
+}
+
+LPHOSTENT
+EXPORT
+gethostbyname(
+    IN  CONST CHAR FAR* name)
+{
+    UNIMPLEMENTED
+
+    return (LPHOSTENT)NULL;
+}
+
+
+INT
+EXPORT
+gethostname(
+    OUT CHAR FAR* name,
+    IN  INT namelen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+LPPROTOENT
+EXPORT
+getprotobyname(
+    IN  CONST CHAR FAR* name)
+{
+    UNIMPLEMENTED
+
+    return (LPPROTOENT)NULL;
+}
+
+
+LPPROTOENT
+EXPORT
+getprotobynumber(
+    IN  INT number)
+{
+    UNIMPLEMENTED
+
+    return (LPPROTOENT)NULL;
+}
+
+LPSERVENT
+EXPORT
+getservbyname(
+    IN  CONST CHAR FAR* name, 
+    IN  CONST CHAR FAR* proto)
+{
+    UNIMPLEMENTED
+
+    return (LPSERVENT)NULL;
+}
+
+
+LPSERVENT
+EXPORT
+getservbyport(
+    IN  INT port, 
+    IN  CONST CHAR FAR* proto)
+{
+    UNIMPLEMENTED
+
+    return (LPSERVENT)NULL;
+}
+
+
+ULONG
+EXPORT
+inet_addr(
+    IN  CONST CHAR FAR* cp)
+/*
+ * FUNCTION: Converts a string containing an IPv4 address to an unsigned long
+ * ARGUMENTS:
+ *     cp = Pointer to string with address to convert
+ * RETURNS:
+ *     Binary representation of IPv4 address, or INADDR_NONE
+ */
+{
+    UINT i;
+    PCHAR p;
+    ULONG u = 0;
+
+    /* FIXME: Little endian version only */
+
+    p = (PCHAR)cp;
+
+    if (strlen(p) == 0)
+        return INADDR_NONE;
+
+    if (strcmp(p, " ") == 0)
+        return 0;
+
+    for (i = 3; i >= 0; i--) {
+        u += (strtoul(p, &p, 0) << (i * 8));
+
+        if (strlen(p) == 0)
+            return u;
+
+        if (p[0] != '.')
+            return INADDR_NONE;
+
+        p++;
+    }
+
+    return u;
+}
+
+
+CHAR FAR*
+EXPORT
+inet_ntoa(
+    IN  IN_ADDR in)
+{
+    UNIMPLEMENTED
+
+    return (CHAR FAR*)NULL;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetHostByAddr(
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  CONST CHAR FAR* addr, 
+    IN  INT len,
+    IN  INT type, 
+    OUT CHAR FAR* buf, 
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetHostByName(
+    IN  HWND hWnd, 
+    IN  UINT wMsg,  
+    IN  CONST CHAR FAR* name, 
+    OUT CHAR FAR* buf, 
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetProtoByName(
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  CONST CHAR FAR* name,
+    OUT CHAR FAR* buf,
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetProtoByNumber(
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  INT number,
+    OUT CHAR FAR* buf,
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetServByName(
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  CONST CHAR FAR* name,
+    IN  CONST CHAR FAR* proto,
+    OUT CHAR FAR* buf,
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+
+HANDLE
+EXPORT
+WSAAsyncGetServByPort(
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  INT port,
+    IN  CONST CHAR FAR* proto,
+    OUT CHAR FAR* buf,
+    IN  INT buflen)
+{
+    UNIMPLEMENTED
+
+    return (HANDLE)0;
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/misc/stubs.c b/reactos/lib/ws2_32/misc/stubs.c
new file mode 100644 (file)
index 0000000..172e64d
--- /dev/null
@@ -0,0 +1,780 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/stubs.c
+ * PURPOSE:     Stubs
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+
+SOCKET
+EXPORT
+accept(
+    IN  SOCKET s,
+    OUT LPSOCKADDR addr,
+    OUT INT FAR* addrlen)
+{
+    UNIMPLEMENTED
+
+    return INVALID_SOCKET;
+}
+
+INT
+EXPORT
+bind(
+    IN  SOCKET s,
+    IN  CONST LPSOCKADDR name,
+    IN  INT namelen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+closesocket(
+    IN  SOCKET s)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+connect(
+    IN  SOCKET s,
+    IN  CONST LPSOCKADDR name,
+    IN  INT namelen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+getpeername(
+    IN      SOCKET s,
+    OUT     LPSOCKADDR name,
+    IN OUT  INT FAR* namelen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+getsockname(
+    IN      SOCKET s,
+    OUT     LPSOCKADDR name,
+    IN OUT  INT FAR* namelen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+getsockopt(
+    IN      SOCKET s,
+    IN      INT level,
+    IN      INT optname,
+    OUT     CHAR FAR* optval,
+    IN OUT  INT FAR* optlen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+ULONG
+EXPORT
+htonl(
+    IN  ULONG hostlong)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+USHORT
+EXPORT
+htons(
+    IN  USHORT hostshort)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+ioctlsocket(
+    IN      SOCKET s,
+    IN      LONG cmd,
+    IN OUT  ULONG FAR* argp)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+listen(
+    IN  SOCKET s,
+    IN  INT backlog)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+ULONG
+EXPORT
+ntohl(
+    IN  ULONG netlong)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+USHORT
+EXPORT
+ntohs(
+    IN  USHORT netshort)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+recv(
+    IN  SOCKET s,
+    OUT CHAR FAR* buf,
+    IN  INT len,
+    IN  INT flags)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+recvfrom(
+    IN      SOCKET s,
+    OUT     CHAR FAR* buf,
+    IN      INT len,
+    IN      INT flags,
+    OUT     LPSOCKADDR from,
+    IN OUT  INT FAR* fromlen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+select(
+    IN      INT nfds, 
+    IN OUT  LPFD_SET readfds, 
+    IN OUT  LPFD_SET writefds, 
+    IN OUT  LPFD_SET exceptfds, 
+    IN      CONST LPTIMEVAL timeout)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+send( 
+    IN  SOCKET s, 
+    IN  CONST CHAR FAR* buf, 
+    IN  INT len, 
+    IN  INT flags)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+sendto(
+    IN  SOCKET s,
+    IN  CONST CHAR FAR* buf,
+    IN  INT len,
+    IN  INT flags,
+    IN  CONST LPSOCKADDR to, 
+    IN  INT tolen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+setsockopt(
+    IN  SOCKET s,
+    IN  INT level,
+    IN  INT optname,
+    IN  CONST CHAR FAR* optval,
+    IN  INT optlen)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+shutdown(
+    IN  SOCKET s,
+    IN  INT how)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+SOCKET
+EXPORT
+socket(
+    IN  INT af,
+    IN  INT type,
+    IN  INT protocol)
+{
+    UNIMPLEMENTED
+
+    return INVALID_SOCKET;
+}
+
+SOCKET
+EXPORT
+WSAAccept(
+    IN      SOCKET s,
+    OUT     LPSOCKADDR addr,
+    IN OUT  LPINT addrlen,
+    IN      LPCONDITIONPROC lpfnCondition,
+    IN      DWORD dwCallbackData)
+{
+    UNIMPLEMENTED
+
+    return INVALID_SOCKET;
+}
+
+INT
+EXPORT
+WSAAsyncSelect(
+    IN  SOCKET s,
+    IN  HWND hWnd,
+    IN  UINT wMsg,
+    IN  LONG lEvent)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSACancelBlockingCall(VOID)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAConnect(
+    IN  SOCKET s,
+    IN  CONST LPSOCKADDR name,
+    IN  INT namelen,
+    IN  LPWSABUF lpCallerData,
+    OUT LPWSABUF lpCalleeData,
+    IN  LPQOS lpSQOS,
+    IN  LPQOS lpGQOS)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSADuplicateSocketA(
+    IN  SOCKET s,
+    IN  DWORD dwProcessId,
+    OUT LPWSAPROTOCOL_INFOA lpProtocolInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSADuplicateSocketW(
+    IN  SOCKET s,
+    IN  DWORD dwProcessId,
+    OUT LPWSAPROTOCOL_INFOW lpProtocolInfo)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAEnumNetworkEvents(
+    IN  SOCKET s,
+    IN  WSAEVENT hEventObject,
+    OUT LPWSANETWORKEVENTS lpNetworkEvents)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAEnumProtocolsA(
+    IN      LPINT lpiProtocols,
+    OUT     LPWSAPROTOCOL_INFOA lpProtocolBuffer,
+    IN OUT  LPDWORD lpdwBufferLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAEnumProtocolsW(
+    IN      LPINT lpiProtocols,
+    OUT     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
+    IN OUT  LPDWORD lpdwBufferLength)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAEventSelect(
+    IN  SOCKET s,
+    IN  WSAEVENT hEventObject,
+    IN  LONG lNetworkEvents)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+BOOL
+EXPORT
+WSAGetOverlappedResult(
+    IN  SOCKET s,
+    IN  LPWSAOVERLAPPED lpOverlapped,
+    OUT LPDWORD lpcbTransfer,
+    IN  BOOL fWait,
+    OUT LPDWORD lpdwFlags)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+BOOL
+EXPORT
+WSAGetQOSByName(
+    IN      SOCKET s, 
+    IN OUT  LPWSABUF lpQOSName, 
+    OUT     LPQOS lpQOS)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+INT
+EXPORT
+WSAHtonl(
+    IN  SOCKET s,
+    IN  ULONG hostLONG,
+    OUT ULONG FAR* lpnetlong)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAHtons(
+    IN  SOCKET s,
+    IN  USHORT hostshort,
+    OUT USHORT FAR* lpnetshort)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAIoctl(
+    IN  SOCKET s,
+    IN  DWORD dwIoControlCode,
+    IN  LPVOID lpvInBuffer,
+    IN  DWORD cbInBuffer,
+    OUT LPVOID lpvOutBuffer,
+    IN  DWORD cbOutBuffer,
+    OUT LPDWORD lpcbBytesReturned,
+    IN  LPWSAOVERLAPPED lpOverlapped,
+    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+BOOL
+EXPORT
+WSAIsBlocking(VOID)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+SOCKET
+EXPORT
+WSAJoinLeaf(
+    IN  SOCKET s,
+    IN  CONST LPSOCKADDR name,
+    IN  INT namelen,
+    IN  LPWSABUF lpCallerData,
+    OUT LPWSABUF lpCalleeData,
+    IN  LPQOS lpSQOS,
+    IN  LPQOS lpGQOS,
+    IN  DWORD dwFlags)
+{
+    UNIMPLEMENTED
+
+    return INVALID_SOCKET;
+}
+
+INT
+EXPORT
+WSANtohl(
+    IN  SOCKET s,
+    IN  ULONG netlong,
+    OUT ULONG FAR* lphostlong)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSANtohs(
+    IN  SOCKET s,
+    IN  USHORT netshort,
+    OUT USHORT FAR* lphostshort)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSARecv(
+    IN      SOCKET s,
+    IN OUT  LPWSABUF lpBuffers,
+    IN      DWORD dwBufferCount,
+    OUT     LPDWORD lpNumberOfBytesRecvd,
+    IN OUT  LPDWORD lpFlags,
+    IN      LPWSAOVERLAPPED lpOverlapped,
+    IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSARecvDisconnect(
+    IN  SOCKET s,
+    OUT LPWSABUF lpInboundDisconnectData)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSARecvFrom(
+    IN      SOCKET s,
+    IN OUT  LPWSABUF lpBuffers,
+    IN      DWORD dwBufferCount,
+    OUT     LPDWORD lpNumberOfBytesRecvd,
+    IN OUT  LPDWORD lpFlags,
+    OUT            LPSOCKADDR lpFrom,
+    IN OUT  LPINT lpFromlen,
+    IN      LPWSAOVERLAPPED lpOverlapped,
+    IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSASend(
+    IN  SOCKET s,
+    IN  LPWSABUF lpBuffers,
+    IN  DWORD dwBufferCount,
+    OUT LPDWORD lpNumberOfBytesSent,
+    IN  DWORD dwFlags,
+    IN  LPWSAOVERLAPPED lpOverlapped,
+    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSASendDisconnect(
+    IN  SOCKET s,
+    IN  LPWSABUF lpOutboundDisconnectData)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSASendTo(
+    IN  SOCKET s,
+    IN  LPWSABUF lpBuffers,
+    IN  DWORD dwBufferCount,
+    OUT LPDWORD lpNumberOfBytesSent,
+    IN  DWORD dwFlags,
+    IN  CONST LPSOCKADDR lpTo,
+    IN  INT iToLen,
+    IN  LPWSAOVERLAPPED lpOverlapped,
+    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+FARPROC
+EXPORT
+WSASetBlockingHook(
+    IN  FARPROC lpBlockFunc)
+{
+    UNIMPLEMENTED
+
+    return (FARPROC)0;
+}
+
+INT
+EXPORT
+WSAUnhookBlockingHook(VOID)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSAProviderConfigChange(
+    IN OUT  LPHANDLE lpNotificationHandle,
+    IN      LPWSAOVERLAPPED lpOverlapped,
+    IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSACancelAsyncRequest(
+    IN  HANDLE hAsyncTaskHandle)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+#if 0
+PASCAL FAR
+#else
+EXPORT
+#endif
+__WSAFDIsSet(SOCKET s, LPFD_SET set)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+/* WinSock Service Provider support functions */
+
+INT
+EXPORT
+WPUCompleteOverlappedRequest(
+    IN  SOCKET s,
+    IN  LPWSAOVERLAPPED lpOverlapped,
+    IN  DWORD dwError,
+    IN  DWORD cbTransferred,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSPStartup(
+    IN  WORD wVersionRequested,
+    OUT LPWSPDATA lpWSPData,
+    IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
+    IN  WSPUPCALLTABLE UpcallTable,
+    OUT LPWSPPROC_TABLE lpProcTable)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCDeinstallProvider(
+    IN  LPGUID lpProviderId,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCEnumProtocols(
+    IN      LPINT lpiProtocols,
+    OUT     LPWSAPROTOCOL_INFOW lpProtocolBuffer,
+    IN OUT  LPDWORD lpdwBufferLength,
+    OUT     LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCGetProviderPath(
+    IN      LPGUID lpProviderId,
+    OUT     LPWSTR lpszProviderDllPath,
+    IN OUT  LPINT lpProviderDllPathLen,
+    OUT     LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCInstallProvider(
+    IN  CONST LPGUID lpProviderId,
+    IN  CONST LPWSTR lpszProviderDllPath,
+    IN  CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList,
+    IN  DWORD dwNumberOfEntries,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCEnableNSProvider(
+    IN  LPGUID lpProviderId,
+    IN  BOOL fEnable)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCInstallNameSpace(
+    IN  LPWSTR lpszIdentifier,
+    IN  LPWSTR lpszPathName,
+    IN  DWORD dwNameSpace,
+    IN  DWORD dwVersion,
+    IN  LPGUID lpProviderId)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCUnInstallNameSpace(
+    IN  LPGUID lpProviderId)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+INT
+EXPORT
+WSCWriteProviderOrder(
+    IN  LPDWORD lpwdCatalogEntryId,
+    IN  DWORD dwNumberOfEntries)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/misc/upcall.c b/reactos/lib/ws2_32/misc/upcall.c
new file mode 100644 (file)
index 0000000..afd800a
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ * COPYRIGHT:   See COPYING in the top level directory
+ * PROJECT:     ReactOS WinSock 2 DLL
+ * FILE:        misc/upcall.c
+ * PURPOSE:     Upcall functions
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ *   CSH 01/09-2000 Created
+ */
+#include <ws2_32.h>
+
+BOOL
+WSPAPI
+WPUCloseEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+INT
+WSPAPI
+WPUCloseSocketHandle(
+    IN  SOCKET s,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+WSPAPI
+WPUCloseThread(
+    IN  LPWSATHREADID lpThreadId,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+WSAEVENT
+WSPAPI
+WPUCreateEvent(
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return (WSAEVENT)0;
+}
+
+
+SOCKET
+WSPAPI
+WPUCreateSocketHandle(
+    IN  DWORD dwCatalogEntryId,
+    IN  DWORD dwContext,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return (SOCKET)0;
+}
+
+
+SOCKET
+WSPAPI
+WPUFDIsSet(
+    IN  SOCKET s,
+    IN  LPFD_SET set)
+{
+    UNIMPLEMENTED
+
+    return (SOCKET)0;
+
+}
+
+
+INT
+WSPAPI
+WPUGetProviderPath(
+    IN      LPGUID lpProviderId,
+    OUT     LPWSTR lpszProviderDllPath,
+    IN OUT  LPINT lpProviderDllPathLen,
+    OUT     LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+SOCKET
+WSPAPI
+WPUModifyIFSHandle(
+    IN  DWORD dwCatalogEntryId,
+    IN  SOCKET ProposedHandle,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return (SOCKET)0;
+}
+
+
+INT
+WSPAPI
+WPUOpenCurrentThread(
+    OUT LPWSATHREADID lpThreadId,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+BOOL
+WSPAPI
+WPUPostMessage(
+    IN  HWND hWnd,
+    IN  UINT Msg,
+    IN  WPARAM wParam,
+    IN  LPARAM lParam)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+INT
+WSPAPI
+WPUQueryBlockingCallback(
+    IN  DWORD dwCatalogEntryId,
+    OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
+    OUT LPDWORD lpdwContext,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+WSPAPI
+WPUQuerySocketHandleContext(
+    IN  SOCKET s,
+    OUT LPDWORD lpContext,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+INT
+WSPAPI
+WPUQueueApc(
+    IN  LPWSATHREADID lpThreadId,
+    IN  LPWSAUSERAPC lpfnUserApc,
+    IN  DWORD dwContext,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return 0;
+}
+
+
+BOOL
+WSPAPI
+WPUResetEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+
+BOOL
+WSPAPI
+WPUSetEvent(
+    IN  WSAEVENT hEvent,
+    OUT LPINT lpErrno)
+{
+    UNIMPLEMENTED
+
+    return FALSE;
+}
+
+/* EOF */
diff --git a/reactos/lib/ws2_32/ws2_32.def b/reactos/lib/ws2_32/ws2_32.def
new file mode 100644 (file)
index 0000000..4ccfc7d
--- /dev/null
@@ -0,0 +1,116 @@
+; WS2_32.DLL - Windows Sockets 2 DLL
+
+LIBRARY ws2_32.dll
+
+EXPORTS
+;WEP
+WPUCompleteOverlappedRequest@20
+WSAAccept@20
+WSAAddressToStringA@20
+WSAAddressToStringW@20
+WSAAsyncGetHostByAddr@28
+WSAAsyncGetHostByName@20
+WSAAsyncGetProtoByName@20
+WSAAsyncGetProtoByNumber@20
+WSAAsyncGetServByName@24
+WSAAsyncGetServByPort@24
+WSAAsyncSelect@16
+WSACancelAsyncRequest@4
+WSACancelBlockingCall@0
+WSACleanup@0
+WSACloseEvent@4
+WSAConnect@28
+WSACreateEvent@0
+WSADuplicateSocketA@12
+WSADuplicateSocketW@12
+WSAEnumNameSpaceProvidersA@8
+WSAEnumNameSpaceProvidersW@8
+WSAEnumNetworkEvents@12
+WSAEnumProtocolsA@12
+WSAEnumProtocolsW@12
+WSAEventSelect@12
+WSAGetLastError@0
+WSAGetOverlappedResult@20
+WSAGetQOSByName@12
+WSAGetServiceClassInfoA@16
+WSAGetServiceClassInfoW@16
+WSAGetServiceClassNameByClassIdA@12
+WSAGetServiceClassNameByClassIdW@12
+WSAHtonl@12
+WSAHtons@12
+WSAInstallServiceClassA@4
+WSAInstallServiceClassW@4
+WSAIoctl@36
+WSAIsBlocking@0
+WSAJoinLeaf@32
+WSALookupServiceBeginA@12
+WSALookupServiceBeginW@12
+WSALookupServiceEnd@4
+WSALookupServiceNextA@16
+WSALookupServiceNextW@16
+WSANtohl@12
+WSANtohs@12
+WSAProviderConfigChange@12
+WSARecv@28
+WSARecvDisconnect@8
+WSARecvFrom@36
+WSARemoveServiceClass@4
+WSAResetEvent@4
+WSASend@28
+WSASendDisconnect@8
+WSASendTo@36
+WSASetBlockingHook@4
+WSASetEvent@4
+WSASetLastError@4
+WSASetServiceA@12
+WSASetServiceW@12
+WSASocketA@24
+WSASocketW@24
+WSAStartup@8
+WSAStringToAddressA@20
+WSAStringToAddressW@20
+WSAUnhookBlockingHook@0
+WSAWaitForMultipleEvents@20
+;WSApSetPostRoutine
+WSCDeinstallProvider@8
+WSCEnableNSProvider@8
+WSCEnumProtocols@16
+WSCGetProviderPath@16
+WSCInstallNameSpace@20
+WSCInstallProvider@20
+WSCUnInstallNameSpace@4
+;WSCWriteNameSpaceOrder
+WSCWriteProviderOrder@8
+__WSAFDIsSet@8
+accept@12
+bind@12
+closesocket@4
+connect@12
+gethostbyaddr@12
+gethostbyname@4
+gethostname@8
+getpeername@12
+getprotobyname@4
+getprotobynumber@4
+getservbyname@8
+getservbyport@8
+getsockname@12
+getsockopt@20
+htonl@4
+htons@4
+inet_addr@4
+inet_ntoa@4
+ioctlsocket@12
+listen@8
+ntohl@4
+ntohs@4
+recv@16
+recvfrom@24
+select@20
+send@16
+sendto@24
+setsockopt@20
+shutdown@8
+socket@12
+
+; EOF
diff --git a/reactos/lib/ws2_32/ws2_32.edf b/reactos/lib/ws2_32/ws2_32.edf
new file mode 100644 (file)
index 0000000..8f6b723
--- /dev/null
@@ -0,0 +1,116 @@
+; WS2_32.DLL - Windows Sockets 2 DLL
+
+LIBRARY ws2_32.dll
+
+EXPORTS
+;WEP
+WPUCompleteOverlappedRequest=WPUCompleteOverlappedRequest@20
+WSAAccept=WSAAccept@20
+WSAAddressToStringA=WSAAddressToStringA@20
+WSAAddressToStringW=WSAAddressToStringW@20
+WSAAsyncGetHostByAddr=WSAAsyncGetHostByAddr@28
+WSAAsyncGetHostByName=WSAAsyncGetHostByName@20
+WSAAsyncGetProtoByName=WSAAsyncGetProtoByName@20
+WSAAsyncGetProtoByNumber=WSAAsyncGetProtoByNumber@20
+WSAAsyncGetServByName=WSAAsyncGetServByName@24
+WSAAsyncGetServByPort=WSAAsyncGetServByPort@24
+WSAAsyncSelect=WSAAsyncSelect@16
+WSACancelAsyncRequest=WSACancelAsyncRequest@4
+WSACancelBlockingCall=WSACancelBlockingCall@0
+WSACleanup=WSACleanup@0
+WSACloseEvent=WSACloseEvent@4
+WSAConnect=WSAConnect@28
+WSACreateEvent=WSACreateEvent@0
+WSADuplicateSocketA=WSADuplicateSocketA@12
+WSADuplicateSocketW=WSADuplicateSocketW@12
+WSAEnumNameSpaceProvidersA=WSAEnumNameSpaceProvidersA@8
+WSAEnumNameSpaceProvidersW=WSAEnumNameSpaceProvidersW@8
+WSAEnumNetworkEvents=WSAEnumNetworkEvents@12
+WSAEnumProtocolsA=WSAEnumProtocolsA@12
+WSAEnumProtocolsW=WSAEnumProtocolsW@12
+WSAEventSelect=WSAEventSelect@12
+WSAGetLastError=WSAGetLastError@0
+WSAGetOverlappedResult=WSAGetOverlappedResult@20
+WSAGetQOSByName=WSAGetQOSByName@12
+WSAGetServiceClassInfoA=WSAGetServiceClassInfoA@16
+WSAGetServiceClassInfoW=WSAGetServiceClassInfoW@16
+WSAGetServiceClassNameByClassIdA=WSAGetServiceClassNameByClassIdA@12
+WSAGetServiceClassNameByClassIdW=WSAGetServiceClassNameByClassIdW@12
+WSAHtonl=WSAHtonl@12
+WSAHtons=WSAHtons@12
+WSAInstallServiceClassA=WSAInstallServiceClassA@4
+WSAInstallServiceClassW=WSAInstallServiceClassW@4
+WSAIoctl=WSAIoctl@36
+WSAIsBlocking=WSAIsBlocking@0
+WSAJoinLeaf=WSAJoinLeaf@32
+WSALookupServiceBeginA=WSALookupServiceBeginA@12
+WSALookupServiceBeginW=WSALookupServiceBeginW@12
+WSALookupServiceEnd=WSALookupServiceEnd@4
+WSALookupServiceNextA=WSALookupServiceNextA@16
+WSALookupServiceNextW=WSALookupServiceNextW@16
+WSANtohl=WSANtohl@12
+WSANtohs=WSANtohs@12
+WSAProviderConfigChange=WSAProviderConfigChange@12
+WSARecv=WSARecv@28
+WSARecvDisconnect=WSARecvDisconnect@8
+WSARecvFrom=WSARecvFrom@36
+WSARemoveServiceClass=WSARemoveServiceClass@4
+WSAResetEvent=WSAResetEvent@4
+WSASend=WSASend@28
+WSASendDisconnect=WSASendDisconnect@8
+WSASendTo=WSASendTo@36
+WSASetBlockingHook=WSASetBlockingHook@4
+WSASetEvent=WSASetEvent@4
+WSASetLastError=WSASetLastError@4
+WSASetServiceA=WSASetServiceA@12
+WSASetServiceW=WSASetServiceW@12
+WSASocketA=WSASocketA@24
+WSASocketW=WSASocketW@24
+WSAStartup=WSAStartup@8
+WSAStringToAddressA=WSAStringToAddressA@20
+WSAStringToAddressW=WSAStringToAddressW@20
+WSAUnhookBlockingHook=WSAUnhookBlockingHook@0
+WSAWaitForMultipleEvents=WSAWaitForMultipleEvents@20
+;WSApSetPostRoutine
+WSCDeinstallProvider=WSCDeinstallProvider@8
+WSCEnableNSProvider=WSCEnableNSProvider@8
+WSCEnumProtocols=WSCEnumProtocols@16
+WSCGetProviderPath=WSCGetProviderPath@16
+WSCInstallNameSpace=WSCInstallNameSpace@20
+WSCInstallProvider=WSCInstallProvider@20
+WSCUnInstallNameSpace=WSCUnInstallNameSpace@4
+;WSCWriteNameSpaceOrder
+WSCWriteProviderOrder=WSCWriteProviderOrder@8
+__WSAFDIsSet=__WSAFDIsSet@8
+accept=accept@12
+bind=bind@12
+closesocket=closesocket@4
+connect=connect@12
+gethostbyaddr=gethostbyaddr@12
+gethostbyname=gethostbyname@4
+gethostname=gethostname@8
+getpeername=getpeername@12
+getprotobyname=getprotobyname@4
+getprotobynumber=getprotobynumber@4
+getservbyname=getservbyname@8
+getservbyport=getservbyport@8
+getsockname=getsockname@12
+getsockopt=getsockopt@20
+htonl=htonl@4
+htons=htons@4
+inet_addr=inet_addr@4
+inet_ntoa=inet_ntoa@4
+ioctlsocket=ioctlsocket@12
+listen=listen@8
+ntohl=ntohl@4
+ntohs=ntohs@4
+recv=recv@16
+recvfrom=recvfrom@24
+select=select@20
+send=send@16
+sendto=sendto@24
+setsockopt=setsockopt@20
+shutdown=shutdown@8
+socket=socket@12
+
+; EOF
diff --git a/reactos/lib/ws2_32/ws2_32.rc b/reactos/lib/ws2_32/ws2_32.rc
new file mode 100644 (file)
index 0000000..723083e
--- /dev/null
@@ -0,0 +1,39 @@
+#include <defines.h>
+#include <reactos/resource.h>
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+VS_VERSION_INFO VERSIONINFO
+       FILEVERSION     RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
+       PRODUCTVERSION  RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
+       FILEFLAGSMASK   0x3fL
+#ifdef _DEBUG
+       FILEFLAGS       0x1L
+#else
+       FILEFLAGS       0x0L
+#endif
+       FILEOS          0x40004L
+       FILETYPE        0x2L
+       FILESUBTYPE     0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName",       RES_STR_COMPANY_NAME
+            VALUE "FileDescription",   "Windows Sockets 2 DLL\0"
+            VALUE "FileVersion",       RES_STR_FILE_VERSION
+            VALUE "InternalName",      "ws2_32\0"
+            VALUE "LegalCopyright",    RES_STR_LEGAL_COPYRIGHT
+            VALUE "OriginalFilename",  "ws2_32.dll\0"
+            VALUE "ProductName",       RES_STR_PRODUCT_NAME
+            VALUE "ProductVersion",    RES_STR_PRODUCT_VERSION
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+
diff --git a/reactos/lib/ws2_32/ws2_32_specs b/reactos/lib/ws2_32/ws2_32_specs
new file mode 100644 (file)
index 0000000..02ba08d
--- /dev/null
@@ -0,0 +1,78 @@
+*asm:
+
+
+*asm_final:
+
+
+*cpp:
+-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE}
+
+*cc1:
+%(cc1_spec) 
+
+*cc1plus:
+
+
+*endfile:
+
+
+*link:
+%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMain@12}
+
+*lib:
+
+
+*libgcc:
+-lgcc
+
+*startfile:
+
+
+*switches_need_spaces:
+
+
+*signed_char:
+%{funsigned-char:-D__CHAR_UNSIGNED__}
+
+*predefines:
+-Di386 -D_WIN32 -DWIN32 -D__WIN32__ -D__MINGW32__ -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D_stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386)
+
+*cross_compile:
+1
+
+*version:
+egcs-2.91.57
+
+*multilib:
+. ;
+
+*multilib_defaults:
+
+
+*multilib_extra:
+
+
+*multilib_matches:
+
+
+*linker:
+collect2
+
+*cpp_486:
+%{!ansi:-Di486} -D__i486 -D__i486__
+
+*cpp_586:
+%{!ansi:-Di586 -Dpentium}      -D__i586 -D__i586__ -D__pentium -D__pentium__
+
+*cpp_686:
+%{!ansi:-Di686 -Dpentiumpro}   -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__
+
+*cpp_cpu_default:
+%(cpp_586)
+
+*cpp_cpu:
+-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{mcpu=i486:%(cpp_486)} %{m486:%(cpp_486)} %{mpentium:%(cpp_586)} %{mcpu=pentium:%(cpp_586)} %{mpentiumpro:%(cpp_686)} %{mcpu=pentiumpro:%(cpp_686)} %{!mcpu*:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}
+
+*cc1_cpu:
+%{!mcpu*: %{m386:-mcpu=i386 -march=i386} %{mno-486:-mcpu=i386 -march=i386} %{m486:-mcpu=i486 -march=i486} %{mno-386:-mcpu=i486 -march=i486} %{mno-pentium:-mcpu=i486 -march=i486} %{mpentium:-mcpu=pentium} %{mno-pentiumpro:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
+