Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

179 lines
3.4 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
cataping.c
Abstract:
This is the ping catapult dll. It exports the following functions
PingOpenRequest
PingCloseRequest
PingSend
Author:
Sam Patton (sampa) 15-Nov-1994
Environment:
Catapult gateway
Revision History:
dd-mmm-yyy <email>
--*/
#include <windows.h>
#include <winsock.h>
#include <ipexport.h>
#include <icmpapi.h>
#include <cataping.h>
#include <stdio.h>
BOOL
DllEntryPoint(
HANDLE hDll,
DWORD dwReason,
LPVOID lpReserved)
{
int err;
WSADATA WsaData;
switch (dwReason) {
case DLL_PROCESS_ATTACH:
err = WSAStartup( 0x0101, &WsaData);
if (err) {
return FALSE;
}
break;
}
return TRUE;
}
PPING_REQUEST
WINAPI
PingOpenRequest(
IN PVOID hInternet)
/*
hInternet - An open internet handle returned by the InetOpen() api
returns - A handle for later use
*/
{
PPING_REQUEST pRequest;
pRequest = LocalAlloc(LMEM_FIXED, sizeof(PING_REQUEST));
if (pRequest == NULL) {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return NULL;
}
pRequest->IcmpHandle = IcmpCreateFile();
if (pRequest->IcmpHandle == INVALID_HANDLE_VALUE) {
LocalFree(pRequest);
return NULL;
}
return pRequest;
}
BOOL
WINAPI
PingCloseRequest(
PPING_REQUEST hPing)
/*
hPing - A handle returned by PingOpenRequest
returns - TRUE if the handle was closed
*/
{
IcmpCloseHandle(hPing->IcmpHandle);
LocalFree(hPing);
return TRUE;
}
BOOL
WINAPI
PingSend(
PPING_REQUEST hPing,
char * lpszPingee,
LPVOID lpSendBuffer,
WORD wSendSize,
PIP_OPTION_INFORMATION lpSendOptions,
LPVOID lpReceiveBuffer,
DWORD dwReceiveSize,
DWORD TimeOut,
LPDWORD NumReplies)
/*
hPing - A handle returned by PingOpenRequest
lpszPingee - A null terminated string that contains the address of the
pingee. Either a hostname or an ip address.
lpSendBuffer - A buffer containing the data to send in the icmp request
wSendSize - Number of bytes in the lpSendBuffer
lpSendOptions - Pointer to the IP header options for the request. May be
NULL.
lpReceiveBuffer - Buffer to hold any replies to the request.
dwReceiveSize - Number of bytes in the lpReceiveBuffer
Timeout - The time in milliseconds to wait for the reply
NumReplies - The number of replies stored in the ReceiveBuffer
returns - TRUE if the send got a reply
FALSE if not. Extended error information is available through
GetLastError().
*/
{
IPAddr address;
struct hostent *hostp = NULL;
address =
inet_addr(lpszPingee);
if (address == -1L) {
hostp = gethostbyname(lpszPingee);
if (hostp) {
address = *(long *)hostp->h_addr;
} else {
*NumReplies = 0;
SetLastError(IP_BAD_DESTINATION);
return FALSE;
}
}
*NumReplies =
IcmpSendEcho(
hPing->IcmpHandle,
address,
lpSendBuffer,
wSendSize,
lpSendOptions,
lpReceiveBuffer,
dwReceiveSize,
TimeOut);
if (*NumReplies == 0) {
return FALSE;
} else {
return TRUE;
}
}