Added WinSock 2 Helper DLL for TCP/IP (Stubs only)

svn path=/trunk/; revision=1361
This commit is contained in:
Casper Hornstrup 2000-09-17 09:33:44 +00:00
parent b0a3240f8e
commit 2a734dfd02
9 changed files with 745 additions and 0 deletions

View file

@ -0,0 +1,6 @@
wshtcpip.a
wshtcpip.dll
wshtcpip.coff
base.tmp
junk.tmp
temp.exp

View file

@ -0,0 +1,71 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS WinSock Helper DLL for TCP/IP
* 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 WSH_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)) { WSH_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 WSH_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 \
WSH_DbgPrint(MIN_TRACE, ("(%s:%d)(%s) is unimplemented, \
please try again later.\n", __FILE__, __LINE__, __FUNCTION__));
#define CHECKPOINT \
do { WSH_DbgPrint(MIN_TRACE, ("(%s:%d)\n", __FILE__, __LINE__)); } while(0);
#endif /* __DEBUG_H */
/* EOF */

View file

@ -0,0 +1,90 @@
# Makefile for ReactOS WinSock Helper DLL for TCP/IP
PATH_TO_TOP = ../../..
BASE_CFLAGS = -I./ -I../../../include -DUNICODE
TARGETNAME=wshtcpip
MAIN_OBJECTS = $(TARGETNAME).o
RESOURCE_OBJECT = $(TARGETNAME).coff
OBJECTS = $(MAIN_OBJECTS) $(RESOURCE_OBJECT)
LIBS = ../../../lib/ntdll/ntdll.a \
../../../lib/kernel32/kernel32.a \
../../../lib/ws2_32/ws2_32.a
ifeq ($(DOSCLI),yes)
CLEAN_FILES = $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
$(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff
else
CLEAN_FILES = $(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).dll: $(LIBS) $(OBJECTS) $(TARGETNAME).def
$(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) \
$(OBJECTS) $(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

View file

@ -0,0 +1,382 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS WinSock Helper DLL for TCP/IP
* FILE: wshtcpip.c
* PURPOSE: DLL entry
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/09-2000 Created
*/
#include <wshtcpip.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) {}
BOOL
EXPORT
DllMain(PVOID hInstDll,
ULONG dwReason,
PVOID Reserved)
{
OutputDebugString(_T("Hello from wshtcpip.dll\n"));
WSH_DbgPrint(MIN_TRACE, ("DllMain of wshtcpip.dll\n"));
switch (dwReason) {
case DLL_PROCESS_ATTACH:
/* Don't need thread attach notifications
so disable them to improve performance */
DisableThreadLibraryCalls(hInstDll);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
INT
EXPORT
WSHAddressToString(
IN LPSOCKADDR Address,
IN INT AddressLength,
IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL,
OUT LPWSTR AddressString,
IN OUT LPDWORD AddressStringLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHEnumProtocols(
IN LPINT lpiProtocols OPTIONAL,
IN LPWSTR lpTransportKeyName,
IN OUT LPVOID lpProtocolBuffer,
IN OUT LPDWORD lpdwBufferLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetBroadcastSockaddr(
IN PVOID HelperDllSocketContext,
OUT PSOCKADDR Sockaddr,
OUT PINT SockaddrLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetProviderGuid(
IN LPWSTR ProviderName,
OUT LPGUID ProviderGuid)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetSockaddrType(
IN PSOCKADDR Sockaddr,
IN DWORD SockaddrLength,
OUT PSOCKADDR_INFO SockaddrInfo)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetSocketInformation(
IN PVOID HelperDllSocketContext,
IN SOCKET SocketHandle,
IN HANDLE TdiAddressObjectHandle,
IN HANDLE TdiConnectionObjectHandle,
IN INT Level,
IN INT OptionName,
OUT PCHAR OptionValue,
OUT INT OptionLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetWildcardSockaddr(
IN PVOID HelperDllSocketContext,
OUT PSOCKADDR Sockaddr,
OUT PINT SockaddrLength)
{
UNIMPLEMENTED
return 0;
}
DWORD
EXPORT
WSHGetWinsockMapping(
OUT PWINSOCK_MAPPING Mapping,
IN DWORD MappingLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHGetWSAProtocolInfo(
IN LPWSTR ProviderName,
OUT LPWSAPROTOCOL_INFOW *ProtocolInfo,
OUT LPDWORD ProtocolInfoEntries)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHIoctl(
IN PVOID HelperDllSocketContext,
IN SOCKET SocketHandle,
IN HANDLE TdiAddressObjectHandle,
IN HANDLE TdiConnectionObjectHandle,
IN DWORD IoControlCode,
IN LPVOID InputBuffer,
IN DWORD InputBufferLength,
IN LPVOID OutputBuffer,
IN DWORD OutputBufferLength,
OUT LPDWORD NumberOfBytesReturned,
IN LPWSAOVERLAPPED Overlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine,
OUT LPBOOL NeedsCompletion)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHJoinLeaf(
IN PVOID HelperDllSocketContext,
IN SOCKET SocketHandle,
IN HANDLE TdiAddressObjectHandle,
IN HANDLE TdiConnectionObjectHandle,
IN PVOID LeafHelperDllSocketContext,
IN SOCKET LeafSocketHandle,
IN PSOCKADDR Sockaddr,
IN DWORD SockaddrLength,
IN LPWSABUF CallerData,
IN LPWSABUF CalleeData,
IN LPQOS SocketQOS,
IN LPQOS GroupQOS,
IN DWORD Flags)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHNotify(
IN PVOID HelperDllSocketContext,
IN SOCKET SocketHandle,
IN HANDLE TdiAddressObjectHandle,
IN HANDLE TdiConnectionObjectHandle,
IN DWORD NotifyEvent)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHOpenSocket(
IN OUT PINT AddressFamily,
IN OUT PINT SocketType,
IN OUT PINT Protocol,
OUT PUNICODE_STRING TransportDeviceName,
OUT PVOID HelperDllSocketContext,
OUT PDWORD NotificationEvents)
/*
* FUNCTION: Opens a socket
*/
{
return WSHOpenSocket2(AddressFamily,
SocketType,
Protocol,
0,
0,
TransportDeviceName,
HelperDllSocketContext,
NotificationEvents);
}
INT
EXPORT
WSHOpenSocket2(
OUT PINT AddressFamily,
IN OUT PINT SocketType,
IN OUT PINT Protocol,
IN GROUP Group,
IN DWORD Flags,
OUT PUNICODE_STRING TransportDeviceName,
OUT PVOID *HelperDllSocketContext,
OUT PDWORD NotificationEvents)
/*
* FUNCTION: Opens a socket
* ARGUMENTS:
* AddressFamily = Address of buffer with address family (updated)
* SocketType = Address of buffer with type of socket (updated)
* Protocol = Address of buffer with protocol number (updated)
* Group = Socket group
* Flags = Socket flags
* TransportDeviceName = Address of buffer to place name of transport device
* HelperDllSocketContext = Address of buffer to place socket context pointer
* NotificationEvents = Address of buffer to place flags for event notification
* RETURNS:
* Status of operation
* NOTES:
* Mapping tripple is returned in an canonicalized form
*/
{
PSOCKET_CONTEXT Context;
UNICODE_STRING String;
NTSTATUS Status;
/* FIXME: Raw IP only. Support UDP and TCP */
ASSERT(*SocketType == SOCK_RAW);
if (*Protocol < 0 || *Protocol > 255)
return WSAEINVAL;
RtlInitUnicodeString(&String, DD_RAW_IP_DEVICE_NAME);
RtlInitUnicodeString(TransportDeviceName, NULL);
TransportDeviceName->MaximumLength = String.Length + /* Transport device name */
(4 * sizeof(WCHAR) + /* Separator and protocol */
sizeof(UNICODE_NULL)); /* Terminating null */
TransportDeviceName->Buffer = HeapAlloc(
GetProcessHeap(),
0,
TransportDeviceName->MaximumLength);
if (!TransportDeviceName->Buffer)
return WSAENOBUFS;
/* Append the transport device name */
Status = RtlAppendUnicodeStringToString(TransportDeviceName, &String);
/* Append a separator */
TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = OBJ_NAME_PATH_SEPARATOR;
TransportDeviceName->Length += sizeof(WCHAR);
TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = UNICODE_NULL;
/* Append the protocol number */
String.Buffer = TransportDeviceName->Buffer + (TransportDeviceName->Length / sizeof(WCHAR));
String.Length = 0;
String.MaximumLength = TransportDeviceName->MaximumLength - TransportDeviceName->Length;
Status = RtlIntegerToUnicodeString((ULONG)*Protocol, 10, &String);
TransportDeviceName->Length += String.Length;
/* Setup a socket context area */
Context = HeapAlloc(GetProcessHeap(), 0, sizeof(SOCKET_CONTEXT));
if (!Context) {
RtlFreeUnicodeString(TransportDeviceName);
return WSAENOBUFS;
}
Context->AddressFamily = *AddressFamily;
Context->SocketType = *SocketType;
Context->Protocol = *Protocol;
Context->Flags = Flags;
*HelperDllSocketContext = Context;
return NO_ERROR;
}
INT
EXPORT
WSHSetSocketInformation(
IN PVOID HelperDllSocketContext,
IN SOCKET SocketHandle,
IN HANDLE TdiAddressObjectHandle,
IN HANDLE TdiConnectionObjectHandle,
IN INT Level,
IN INT OptionName,
IN PCHAR OptionValue,
IN INT OptionLength)
{
UNIMPLEMENTED
return 0;
}
INT
EXPORT
WSHStringToAddress(
IN LPWSTR AddressString,
IN DWORD AddressFamily,
IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL,
OUT LPSOCKADDR Address,
IN OUT LPDWORD AddressStringLength)
{
UNIMPLEMENTED
return 0;
}
/* EOF */

View file

@ -0,0 +1,23 @@
; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP
LIBRARY wshtcpip.dll
EXPORTS
WSHAddressToString@20
WSHEnumProtocols@16
WSHGetBroadcastSockaddr@12
WSHGetProviderGuid@8
WSHGetSockaddrType@12
WSHGetSocketInformation@32
WSHGetWildcardSockaddr@12
WSHGetWinsockMapping@8
WSHGetWSAProtocolInfo@12
WSHIoctl@52
WSHJoinLeaf@52
WSHNotify@20
WSHOpenSocket@24
WSHOpenSocket2@32
WSHSetSocketInformation@32
WSHStringToAddress@20
; EOF

View file

@ -0,0 +1,23 @@
; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP
LIBRARY wshtcpip.dll
EXPORTS
WSHAddressToString=WSHAddressToString@20
WSHEnumProtocols=WSHEnumProtocols@16
WSHGetBroadcastSockaddr=WSHGetBroadcastSockaddr@12
WSHGetProviderGuid=WSHGetProviderGuid@8
WSHGetSockaddrType=WSHGetSockaddrType@12
WSHGetSocketInformation=WSHGetSocketInformation@32
WSHGetWildcardSockaddr=WSHGetWildcardSockaddr@12
WSHGetWinsockMapping=WSHGetWinsockMapping@8
WSHGetWSAProtocolInfo=WSHGetWSAProtocolInfo@12
WSHIoctl=WSHIoctl@52
WSHJoinLeaf=WSHJoinLeaf@52
WSHNotify=WSHNotify@20
WSHOpenSocket=WSHOpenSocket@24
WSHOpenSocket2=WSHOpenSocket2@32
WSHSetSocketInformation=WSHSetSocketInformation@32
WSHStringToAddress=WSHStringToAddress@20
; EOF

View file

@ -0,0 +1,33 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS WinSock Helper DLL for TCP/IP
* FILE: include/wshtcpip.h
* PURPOSE: WinSock Helper DLL for TCP/IP header
*/
#ifndef __WSHTCPIP_H
#define __WSHTCPIP_H
#include <wsahelp.h>
#include <windows.h>
#include <ddk/ntddk.h>
#include <debug.h>
#define EXPORT STDCALL
#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
#define DD_TCP_DEVICE_NAME L"\\Device\\Tcp"
#define DD_UDP_DEVICE_NAME L"\\Device\\Udp"
#define DD_RAW_IP_DEVICE_NAME L"\\Device\\RawIp"
typedef struct _SOCKET_CONTEXT {
INT AddressFamily;
INT SocketType;
INT Protocol;
DWORD Flags;
} SOCKET_CONTEXT, *PSOCKET_CONTEXT;
#endif /* __WSHTCPIP_H */
/* EOF */

View file

@ -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 API\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

View file

@ -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}}