iphlpapi: Implement IcmpSendEcho and IcmpSendEcho2 via IcmpSendEcho2Ex.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Gabriel Ivăncescu 2020-11-23 15:47:42 +02:00 committed by Alexandre Julliard
parent b23039fa43
commit 7eafc71416
1 changed files with 64 additions and 77 deletions

View File

@ -442,6 +442,50 @@ DWORD WINAPI IcmpSendEcho(
DWORD ReplySize,
DWORD Timeout
)
{
return IcmpSendEcho2Ex(IcmpHandle, NULL, NULL, NULL, 0, DestinationAddress,
RequestData, RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
}
/***********************************************************************
* IcmpSendEcho2 (IPHLPAPI.@)
*/
DWORD WINAPI IcmpSendEcho2(
HANDLE IcmpHandle,
HANDLE Event,
PIO_APC_ROUTINE ApcRoutine,
PVOID ApcContext,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
)
{
return IcmpSendEcho2Ex(IcmpHandle, Event, ApcRoutine, ApcContext, 0,
DestinationAddress, RequestData, RequestSize, RequestOptions,
ReplyBuffer, ReplySize, Timeout);
}
/***********************************************************************
* IcmpSendEcho2Ex (IPHLPAPI.@)
*/
DWORD WINAPI IcmpSendEcho2Ex(
HANDLE IcmpHandle,
HANDLE Event,
PIO_APC_ROUTINE ApcRoutine,
PVOID ApcContext,
IPAddr SourceAddress,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
)
{
icmp_t* icp=(icmp_t*)IcmpHandle;
struct icmp* icmp_header;
@ -451,6 +495,10 @@ DWORD WINAPI IcmpSendEcho(
int reqsize, repsize;
DWORD send_time;
TRACE("(%p, %p, %p, %p, %08x, %08x, %p, %d, %p, %p, %d, %d)\n", IcmpHandle,
Event, ApcRoutine, ApcContext, SourceAddress, DestinationAddress, RequestData,
RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
if (IcmpHandle==INVALID_HANDLE_VALUE) {
/* FIXME: in fact win98 seems to ignore the handle value !!! */
SetLastError(ERROR_INVALID_PARAMETER);
@ -473,6 +521,22 @@ DWORD WINAPI IcmpSendEcho(
return 0;
}
if (Event)
{
FIXME("unsupported for events\n");
return 0;
}
if (ApcRoutine)
{
FIXME("unsupported for APCs\n");
return 0;
}
if (SourceAddress)
{
FIXME("unsupported for source addresses\n");
return 0;
}
/* Prepare the request */
id=getpid() & 0xFFFF;
seq=InterlockedIncrement(&icmp_sequence) & 0xFFFF;
@ -571,83 +635,6 @@ DWORD WINAPI IcmpSendEcho(
return icmp_get_reply(icp->sid, buffer, send_time, ReplyBuffer, ReplySize, Timeout);
}
/***********************************************************************
* IcmpSendEcho2 (IPHLPAPI.@)
*/
DWORD WINAPI IcmpSendEcho2(
HANDLE IcmpHandle,
HANDLE Event,
PIO_APC_ROUTINE ApcRoutine,
PVOID ApcContext,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
)
{
TRACE("(%p, %p, %p, %p, %08x, %p, %d, %p, %p, %d, %d): stub\n", IcmpHandle,
Event, ApcRoutine, ApcContext, DestinationAddress, RequestData,
RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
if (Event)
{
FIXME("unsupported for events\n");
return 0;
}
if (ApcRoutine)
{
FIXME("unsupported for APCs\n");
return 0;
}
return IcmpSendEcho(IcmpHandle, DestinationAddress, RequestData,
RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
}
/***********************************************************************
* IcmpSendEcho2Ex (IPHLPAPI.@)
*/
DWORD WINAPI IcmpSendEcho2Ex(
HANDLE IcmpHandle,
HANDLE Event,
PIO_APC_ROUTINE ApcRoutine,
PVOID ApcContext,
IPAddr SourceAddress,
IPAddr DestinationAddress,
LPVOID RequestData,
WORD RequestSize,
PIP_OPTION_INFORMATION RequestOptions,
LPVOID ReplyBuffer,
DWORD ReplySize,
DWORD Timeout
)
{
TRACE("(%p, %p, %p, %p, %08x, %08x, %p, %d, %p, %p, %d, %d): stub\n", IcmpHandle,
Event, ApcRoutine, ApcContext, SourceAddress, DestinationAddress, RequestData,
RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
if (Event)
{
FIXME("unsupported for events\n");
return 0;
}
if (ApcRoutine)
{
FIXME("unsupported for APCs\n");
return 0;
}
if (SourceAddress)
{
FIXME("unsupported for source addresses\n");
return 0;
}
return IcmpSendEcho(IcmpHandle, DestinationAddress, RequestData,
RequestSize, RequestOptions, ReplyBuffer, ReplySize, Timeout);
}
/*
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.