mirror of https://github.com/lianthony/NT4.0
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.
267 lines
5.9 KiB
267 lines
5.9 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
debug.h
|
|
|
|
Abstract:
|
|
|
|
This module contains debug-specific definitions and declarations for
|
|
the Winsock 2 to Winsock 1.1 Mapper Service Provider.
|
|
|
|
Author:
|
|
|
|
Keith Moore (keithmo) 29-May-1996
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _DEBUG_H_
|
|
#define _DEBUG_H_
|
|
|
|
|
|
#if DBG || ENABLE_CS_DEBUG
|
|
|
|
//
|
|
// Initialization.
|
|
//
|
|
|
|
VOID
|
|
SockInitializeDebugData(
|
|
VOID
|
|
);
|
|
|
|
#endif // DBG || ENABLE_CS_DEBUG
|
|
|
|
|
|
#if DBG
|
|
|
|
//
|
|
// Debug constants.
|
|
//
|
|
|
|
#define SOCK_DEBUG_A 0x00000001
|
|
#define SOCK_DEBUG_FILE 0x00000002
|
|
#define SOCK_DEBUG_DEBUGGER 0x00000004
|
|
#define SOCK_DEBUG_EVENT_SELECT 0x00000008
|
|
|
|
#define SOCK_DEBUG_ENTER 0x00000010
|
|
#define SOCK_DEBUG_EXIT 0x00000020
|
|
#define SOCK_DEBUG_HOOKER 0x00000040
|
|
#define SOCK_DEBUG_IOCTL 0x00000080
|
|
|
|
#define SOCK_DEBUG_ACCEPT 0x00000100
|
|
#define SOCK_DEBUG_BIND 0x00000200
|
|
#define SOCK_DEBUG_LISTEN 0x00000400
|
|
#define SOCK_DEBUG_SOCKET 0x00000800
|
|
|
|
#define SOCK_DEBUG_CONNECT 0x00001000
|
|
#define SOCK_DEBUG_SEND 0x00002000
|
|
#define SOCK_DEBUG_RECEIVE 0x00004000
|
|
#define SOCK_DEBUG_SELECT 0x00008000
|
|
|
|
#define SOCK_DEBUG_GETNAME 0x00010000
|
|
#define SOCK_DEBUG_SOCKOPT 0x00020000
|
|
#define SOCK_DEBUG_SHUTDOWN 0x00040000
|
|
#define SOCK_DEBUG_INIT 0x00080000
|
|
|
|
#define SOCK_DEBUG_MISC 0x00100000
|
|
#define SOCK_DEBUG_CLOSE 0x00200000
|
|
#define SOCK_DEBUG_CANCEL 0x00400000
|
|
#define SOCK_DEBUG_BLOCKING 0x00800000
|
|
|
|
#define SOCK_DEBUG_ASYNC 0x01000000
|
|
#define SOCK_DEBUG_D 0x02000000
|
|
#define SOCK_DEBUG_ASYNC_SELECT 0x04000000
|
|
#define SOCK_DEBUG_POST 0x08000000
|
|
|
|
#define SOCK_DEBUG_E 0x10000000
|
|
#define SOCK_DEBUG_F 0x20000000
|
|
#define SOCK_DEBUG_REGISTRY 0x40000000
|
|
#define SOCK_DEBUG_G 0x80000000
|
|
|
|
#define IF_DEBUG(a) if( (SockDebugFlags & SOCK_DEBUG_ ## a) != 0 )
|
|
|
|
VOID
|
|
SockPrintf(
|
|
char *Format,
|
|
...
|
|
);
|
|
#define SOCK_PRINT(a) SockPrintf a
|
|
|
|
VOID
|
|
SockEnterApiCall(
|
|
IN PCHAR RoutineName,
|
|
IN PVOID Arg1,
|
|
IN PVOID Arg2,
|
|
IN PVOID Arg3,
|
|
IN PVOID Arg4
|
|
);
|
|
#define SOCK_ENTER(a,b,c,d,e) SockEnterApiCall( (a), (b), (c), (d), (e) )
|
|
|
|
VOID
|
|
SockExitApiCall(
|
|
IN PCHAR RoutineName,
|
|
IN INT ReturnCode,
|
|
IN BOOL Failed
|
|
);
|
|
#define SOCK_EXIT(a,b,c) SockExitApiCall( (a), (b), (c) )
|
|
|
|
VOID
|
|
SockAssert(
|
|
IN PVOID FailedAssertion,
|
|
IN PVOID FileName,
|
|
IN ULONG LineNumber
|
|
);
|
|
#define SOCK_ASSERT(exp) if (!(exp)) SockAssert( #exp, __FILE__, __LINE__ )
|
|
#define SOCK_REQUIRE SOCK_ASSERT
|
|
|
|
PVOID
|
|
SockAllocateHeap(
|
|
IN ULONG NumberOfBytes,
|
|
PCHAR FileName,
|
|
ULONG LineNumber
|
|
);
|
|
#define SOCK_ALLOCATE_HEAP(a) SockAllocateHeap( (a), __FILE__, __LINE__ )
|
|
|
|
VOID
|
|
SockFreeHeap(
|
|
IN PVOID Pointer
|
|
);
|
|
#define SOCK_FREE_HEAP(a) SockFreeHeap( (a) )
|
|
|
|
VOID
|
|
SockCheckHeap(
|
|
VOID
|
|
);
|
|
#define SOCK_CHECK_HEAP() SockCheckHeap()
|
|
|
|
//
|
|
// Exception filter.
|
|
//
|
|
|
|
LONG
|
|
SockExceptionFilter(
|
|
LPEXCEPTION_POINTERS ExceptionPointers,
|
|
LPSTR SourceFile,
|
|
LONG LineNumber
|
|
);
|
|
|
|
#define SOCK_EXCEPTION_FILTER() \
|
|
SockExceptionFilter( \
|
|
GetExceptionInformation(), \
|
|
(LPSTR)__FILE__, \
|
|
(LONG)__LINE__ \
|
|
)
|
|
|
|
//
|
|
// Enable critical section debugging.
|
|
//
|
|
|
|
#define ENABLE_CS_DEBUG 1
|
|
|
|
#else // !DBG
|
|
|
|
#define IF_DEBUG(a) if( FALSE )
|
|
#define SOCK_PRINT(a)
|
|
#define SOCK_ENTER(a,b,c,d,e)
|
|
#define SOCK_EXIT(a,b,c)
|
|
#define SOCK_ASSERT(a)
|
|
#define SOCK_REQUIRE(a) ((void)(a))
|
|
|
|
#define SOCK_ALLOCATE_HEAP(a) (PVOID)LocalAlloc( LMEM_FIXED, (a) )
|
|
#define SOCK_FREE_HEAP(a) LocalFree( (HLOCAL)(a) )
|
|
#define SOCK_CHECK_HEAP()
|
|
|
|
#define SOCK_EXCEPTION_FILTER() EXCEPTION_EXECUTE_HANDLER
|
|
|
|
//
|
|
// Disable critical section debugging.
|
|
//
|
|
|
|
#define ENABLE_CS_DEBUG 0
|
|
|
|
#endif // DBG
|
|
|
|
|
|
//
|
|
// Critical section debugging stuff.
|
|
//
|
|
|
|
#if ENABLE_CS_DEBUG
|
|
|
|
#define MAX_CRITICAL_SECTION_DEBUG 256
|
|
|
|
typedef struct _SOCK_CRITICAL_SECTION_DEBUG_INFO {
|
|
PSTR FileName;
|
|
LONG LineNumber;
|
|
PVOID Caller;
|
|
PVOID CallersCaller;
|
|
} SOCK_CRITICAL_SECTION_DEBUG_INFO, *PSOCK_CRITICAL_SECTION_DEBUG_INFO;
|
|
|
|
typedef struct _SOCK_CRITICAL_SECTION {
|
|
CRITICAL_SECTION Lock;
|
|
LONG AcquireCount;
|
|
LONG ReleaseCount;
|
|
LONG DebugSlot;
|
|
SOCK_CRITICAL_SECTION_DEBUG_INFO DebugInfo[MAX_CRITICAL_SECTION_DEBUG];
|
|
} SOCK_CRITICAL_SECTION, *PSOCK_CRITICAL_SECTION;
|
|
|
|
VOID
|
|
SockInitializeCriticalSection(
|
|
OUT PSOCK_CRITICAL_SECTION Lock
|
|
);
|
|
|
|
VOID
|
|
SockDeleteCriticalSection(
|
|
OUT PSOCK_CRITICAL_SECTION Lock
|
|
);
|
|
|
|
VOID
|
|
SockAcquireGlobalLockHelper(
|
|
IN PSTR FileName,
|
|
IN LONG LineNumber
|
|
);
|
|
|
|
VOID
|
|
SockReleaseGlobalLockHelper(
|
|
IN PSTR FileName,
|
|
IN LONG LineNumber
|
|
);
|
|
|
|
#define SockAcquireGlobalLock() \
|
|
SockAcquireGlobalLockHelper( (PSTR)__FILE__, (LONG)__LINE__ )
|
|
|
|
#define SockReleaseGlobalLock() \
|
|
SockReleaseGlobalLockHelper( (PSTR)__FILE__, (LONG)__LINE__ )
|
|
|
|
#else // !ENABLE_CS_DEBUG
|
|
|
|
#define SOCK_CRITICAL_SECTION CRITICAL_SECTION
|
|
#define PSOCK_CRITICAL_SECTION PCRITICAL_SECTION
|
|
|
|
#define SockInitializeCriticalSection(c) InitializeCriticalSection(c)
|
|
#define SockDeleteCriticalSection(c) DeleteCriticalSection(c)
|
|
|
|
#define SockAcquireGlobalLock( ) EnterCriticalSection( &SockGlobalLock )
|
|
#define SockReleaseGlobalLock( ) LeaveCriticalSection( &SockGlobalLock )
|
|
|
|
#endif // ENABLE_CS_DEBUG
|
|
|
|
|
|
//
|
|
// Don't do the debug stuff on the per-socket locks, as the debug data
|
|
// really bloats out the critical section and we don't want to pay
|
|
// the penalty on every socket.
|
|
//
|
|
|
|
#define SockAcquireSocketLock(_Socket) EnterCriticalSection( &_Socket->Lock )
|
|
#define SockReleaseSocketLock(_Socket) LeaveCriticalSection( &_Socket->Lock )
|
|
|
|
|
|
#endif // _DEBUG_H_
|
|
|