[MSWSOCK] Unstub AcceptEx and GetAcceptExSockaddrs. Note that real implementation in msafd is not available, so result will still be FALSE

svn path=/trunk/; revision=74731
This commit is contained in:
Peter Hater 2017-06-01 15:25:25 +00:00
parent cc95312078
commit 0c26c6fe3f
2 changed files with 106 additions and 59 deletions

View file

@ -12,6 +12,9 @@
#include <winsock2.h> #include <winsock2.h>
#include <mswsock.h> #include <mswsock.h>
LPFN_TRANSMITFILE pfnTransmitFile = NULL;
LPFN_GETACCEPTEXSOCKADDRS pfnGetAcceptExSockaddrs = NULL;
LPFN_ACCEPTEX pfnAcceptEx = NULL;
/* /*
* @implemented * @implemented
*/ */
@ -25,30 +28,111 @@ TransmitFile(SOCKET Socket,
LPTRANSMIT_FILE_BUFFERS TransmitBuffers, LPTRANSMIT_FILE_BUFFERS TransmitBuffers,
DWORD Flags) DWORD Flags)
{ {
static GUID TransmitFileGUID = WSAID_TRANSMITFILE; GUID TransmitFileGUID = WSAID_TRANSMITFILE;
LPFN_TRANSMITFILE pfnTransmitFile; DWORD cbBytesReturned;
DWORD cbBytesReturned;
if (WSAIoctl(Socket, if (WSAIoctl(Socket,
SIO_GET_EXTENSION_FUNCTION_POINTER, SIO_GET_EXTENSION_FUNCTION_POINTER,
&TransmitFileGUID, &TransmitFileGUID,
sizeof(TransmitFileGUID), sizeof(TransmitFileGUID),
&pfnTransmitFile, &pfnTransmitFile,
sizeof(pfnTransmitFile), sizeof(pfnTransmitFile),
&cbBytesReturned, &cbBytesReturned,
NULL, NULL,
NULL) == SOCKET_ERROR) NULL) == SOCKET_ERROR)
{ {
return FALSE; return FALSE;
} }
return pfnTransmitFile(Socket, return pfnTransmitFile(Socket,
File, File,
NumberOfBytesToWrite, NumberOfBytesToWrite,
NumberOfBytesPerSend, NumberOfBytesPerSend,
Overlapped, Overlapped,
TransmitBuffers, TransmitBuffers,
Flags); Flags);
} }
/*
* @implemented
*/
BOOL
WINAPI
AcceptEx(SOCKET ListenSocket,
SOCKET AcceptSocket,
PVOID OutputBuffer,
DWORD ReceiveDataLength,
DWORD LocalAddressLength,
DWORD RemoteAddressLength,
LPDWORD BytesReceived,
LPOVERLAPPED Overlapped)
{
GUID AcceptExGUID = WSAID_ACCEPTEX;
GUID GetAcceptExSockaddrsGUID = WSAID_GETACCEPTEXSOCKADDRS;
DWORD cbBytesReturned;
if (WSAIoctl(ListenSocket,
SIO_GET_EXTENSION_FUNCTION_POINTER,
&AcceptExGUID,
sizeof(AcceptExGUID),
&pfnAcceptEx,
sizeof(pfnAcceptEx),
&cbBytesReturned,
NULL,
NULL) == SOCKET_ERROR)
{
return FALSE;
}
if (WSAIoctl(ListenSocket,
SIO_GET_EXTENSION_FUNCTION_POINTER,
&GetAcceptExSockaddrsGUID,
sizeof(GetAcceptExSockaddrsGUID),
&pfnGetAcceptExSockaddrs,
sizeof(pfnGetAcceptExSockaddrs),
&cbBytesReturned,
NULL,
NULL) == SOCKET_ERROR)
{
pfnAcceptEx = NULL;
return FALSE;
}
return pfnAcceptEx(ListenSocket,
AcceptSocket,
OutputBuffer,
ReceiveDataLength,
LocalAddressLength,
RemoteAddressLength,
BytesReceived,
Overlapped);
}
/*
* @implemented
*/
VOID
WINAPI
GetAcceptExSockaddrs(PVOID OutputBuffer,
DWORD ReceiveDataLength,
DWORD LocalAddressLength,
DWORD RemoteAddressLength,
LPSOCKADDR* LocalSockaddr,
LPINT LocalSockaddrLength,
LPSOCKADDR* RemoteSockaddr,
LPINT RemoteSockaddrLength)
{
if (pfnGetAcceptExSockaddrs)
{
pfnGetAcceptExSockaddrs(OutputBuffer,
ReceiveDataLength,
LocalAddressLength,
RemoteAddressLength,
LocalSockaddr,
LocalSockaddrLength,
RemoteSockaddr,
RemoteSockaddrLength);
}
}
/* EOF */ /* EOF */

View file

@ -21,25 +21,6 @@ typedef struct _NS_ROUTINE {
DWORD dwPriority; DWORD dwPriority;
} NS_ROUTINE, *PNS_ROUTINE, * FAR LPNS_ROUTINE; } NS_ROUTINE, *PNS_ROUTINE, * FAR LPNS_ROUTINE;
/*
* @unimplemented
*/
BOOL
WINAPI
AcceptEx(SOCKET ListenSocket,
SOCKET AcceptSocket,
PVOID OutputBuffer,
DWORD ReceiveDataLength,
DWORD LocalAddressLength,
DWORD RemoteAddressLength,
LPDWORD BytesReceived,
LPOVERLAPPED Overlapped)
{
OutputDebugStringW(L"w32sock AcceptEx stub called\n");
return FALSE;
}
/* /*
* @unimplemented * @unimplemented
@ -71,24 +52,6 @@ EnumProtocolsW(LPINT ProtocolCount,
} }
/*
* @unimplemented
*/
VOID
WINAPI
GetAcceptExSockaddrs(PVOID OutputBuffer,
DWORD ReceiveDataLength,
DWORD LocalAddressLength,
DWORD RemoteAddressLength,
LPSOCKADDR* LocalSockaddr,
LPINT LocalSockaddrLength,
LPSOCKADDR* RemoteSockaddr,
LPINT RemoteSockaddrLength)
{
OutputDebugStringW(L"w32sock GetAcceptExSockaddrs stub called\n");
}
/* /*
* @unimplemented * @unimplemented
*/ */