|
|
/*++
Copyright (c) 1989-1993 Microsoft Corporation
Module Name:
spxutils.h
Abstract:
Author:
Nikhil Kamkolkar (nikhilk) 11-November-1993
Environment:
Kernel mode
Revision History:
--*/
// For PROTO_SPX, i'd return a device name from the dll of the form
// \Device\NwlnkSpx\SpxStream (for SOCK_STREAM) or
// \Device\NwlnkSpx\Spx (for SOCK_SEQPKT)
//
// and for PROTO_SPXII (the more common case we hope, even if
// internally we degrade to SPX1 cause of the remote client's
// limitations)
// \Device\NwlnkSpx\Stream (for SOCK_STREAM) or
// \Device\NwlnkSpx (for SOCK_SEQPKT)
#define SOCKET1STREAM_SUFFIX L"\\SpxStream"
#define SOCKET1_SUFFIX L"\\Spx"
#define SOCKET2STREAM_SUFFIX L"\\Stream"
#define SOCKET1_TYPE_SEQPKT 0
#define SOCKET2_TYPE_SEQPKT 1
#define SOCKET1_TYPE_STREAM 2
#define SOCKET2_TYPE_STREAM 3
#define IN_RANGE(_S, _RangeStart, _RangeEnd) \
((_S >= _RangeStart) && (_S <= _RangeEnd))
//
// The following macros deal with on-the-wire integer and long values
//
// On the wire format is big-endian i.e. a long value of 0x01020304 is
// represented as 01 02 03 04. Similarly an int value of 0x0102 is
// represented as 01 02.
//
// The host format is not assumed since it will vary from processor to
// processor.
//
// Get a byte from on-the-wire format to a short in the host format
#define GETBYTE2SHORT(DstPtr, SrcPtr) \
*(PUSHORT)(DstPtr) = (USHORT) (*(PBYTE)(SrcPtr))
// Get a byte from on-the-wire format to a short in the host format
#define GETBYTE2ULONG(DstPtr, SrcPtr) \
*(PULONG)(DstPtr) = (ULONG) (*(PBYTE)(SrcPtr))
// Get a short from on-the-wire format to a dword in the host format
#define GETSHORT2ULONG(DstPtr, SrcPtr) \
*(PULONG)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \ (*((PBYTE)(SrcPtr)+1) ))
// Get a short from on-the-wire format to a dword in the host format
#define GETSHORT2SHORT(DstPtr, SrcPtr) \
*(PUSHORT)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \ (*((PBYTE)(SrcPtr)+1) ))
// Get a dword from on-the-wire format to a dword in the host format
#define GETULONG2ULONG(DstPtr, SrcPtr) \
*(PULONG)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 24) + \ (*((PBYTE)(SrcPtr)+1) << 16) + \ (*((PBYTE)(SrcPtr)+2) << 8) + \ (*((PBYTE)(SrcPtr)+3) ))
// Get a dword from on-the-wire format to a dword in the same format but
// also watch out for alignment
#define GETULONG2ULONG_NOCONV(DstPtr, SrcPtr) \
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0); \ *((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1); \ *((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2); \ *((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3);
// Put a dword from the host format to a short to on-the-wire format
#define PUTBYTE2BYTE(DstPtr, Src) \
*((PBYTE)(DstPtr)) = (BYTE)(Src)
// Put a dword from the host format to a short to on-the-wire format
#define PUTSHORT2BYTE(DstPtr, Src) \
*((PBYTE)(DstPtr)) = ((USHORT)(Src) % 256)
// Put a dword from the host format to a short to on-the-wire format
#define PUTSHORT2SHORT(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((USHORT)(Src) >> 8), \ *((PBYTE)(DstPtr)+1) = (BYTE)(Src)
// Put a dword from the host format to a byte to on-the-wire format
#define PUTULONG2BYTE(DstPtr, Src) \
*(PBYTE)(DstPtr) = (BYTE)(Src)
// Put a dword from the host format to a short to on-the-wire format
#define PUTULONG2SHORT(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((ULONG)(Src) >> 8), \ *((PBYTE)(DstPtr)+1) = (BYTE) (Src)
// Put a dword from the host format to a dword to on-the-wire format
#define PUTULONG2ULONG(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((ULONG)(Src) >> 24), \ *((PBYTE)(DstPtr)+1) = (BYTE) ((ULONG)(Src) >> 16), \ *((PBYTE)(DstPtr)+2) = (BYTE) ((ULONG)(Src) >> 8), \ *((PBYTE)(DstPtr)+3) = (BYTE) (Src)
// Put a BYTE[4] array into another BYTE4 array.
#define PUTBYTE42BYTE4(DstPtr, SrcPtr) \
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0), \ *((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1), \ *((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2), \ *((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3)
// MIN/MAX macros
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
// Exported prototypes
UINT SpxUtilWstrLength( IN PWSTR Wstr);
LONG SpxRandomNumber( VOID);
NTSTATUS SpxUtilGetSocketType( PUNICODE_STRING RemainingFileName, PBYTE SocketType);
VOID SpxSleep( IN ULONG TimeInMs);
ULONG SpxBuildTdiAddress( IN PVOID AddressBuffer, IN ULONG AddressBufferLength, IN UCHAR Network[4], IN UCHAR Node[6], IN USHORT Socket);
VOID SpxBuildTdiAddressFromIpxAddr( IN PVOID AddressBuffer, IN PBYTE pIpxAddr);
TDI_ADDRESS_IPX UNALIGNED * SpxParseTdiAddress( IN TRANSPORT_ADDRESS UNALIGNED * TransportAddress);
BOOLEAN SpxValidateTdiAddress( IN TRANSPORT_ADDRESS UNALIGNED * TransportAddress, IN ULONG TransportAddressLength);
VOID SpxCalculateNewT1( IN struct _SPX_CONN_FILE * pSpxConnFile, IN int NewT1);
|