/*++ Copyright (c) 1998, Microsoft Corporation Module Name: debug.c Abstract: This module contains declarations for debugging-support. Author: Abolade Gbadegesin (aboladeg) 2-Mar-1998 Revision History: --*/ #include "precomp.h" #pragma hdrstop ULONG NhpEventLogCount; HANDLE NhEventLogHandle = NULL; CRITICAL_SECTION NhpEventLogLock; ULONG NhpTraceId = INVALID_TRACEID; // // FORWARD DECLARATIONS // BOOLEAN NhpIsAllowedLog( ULONG MessageId, ULONG Level ); // // TRACING ROUTINES (alphabetically) // VOID NhDump( ULONG Flags, PUCHAR Buffer, ULONG BufferLength, ULONG Width ) { TraceDumpEx( NhpTraceId, Flags, Buffer, BufferLength, Width, FALSE, NULL ); } VOID NhInitializeTraceManagement( VOID ) { NhpTraceId = TraceRegisterA("IPNATHLP"); } VOID NhShutdownTraceManagement( VOID ) { TraceDeregister(NhpTraceId); NhpTraceId = INVALID_TRACEID; } VOID NhTrace( ULONG Flags, PCHAR Format, ... ) { va_list VaList; va_start(VaList, Format); TraceVprintfExA(NhpTraceId, Flags, Format, VaList); va_end(VaList); } // // EVENTLOGGING ROUTINES (alphabetically) // VOID NhErrorLog( ULONG MessageId, ULONG ErrorCode, PCHAR Format, ... ) { HANDLE EventLogHandle; EnterCriticalSection(&NhpEventLogLock); ASSERT(NhpEventLogCount > 0); EventLogHandle = NhEventLogHandle; LeaveCriticalSection(&NhpEventLogLock); if (NULL != EventLogHandle) { va_list arglist; if (!NhpIsAllowedLog(MessageId, IPNATHLP_LOGGING_ERROR)) { return; } va_start(arglist, Format); RouterLogEventValistExA( EventLogHandle, EVENTLOG_ERROR_TYPE, ErrorCode, MessageId, Format, arglist ); va_end(arglist); } } VOID NhInformationLog( ULONG MessageId, ULONG ErrorCode, PCHAR Format, ... ) { HANDLE EventLogHandle; EnterCriticalSection(&NhpEventLogLock); ASSERT(NhpEventLogCount > 0); EventLogHandle = NhEventLogHandle; LeaveCriticalSection(&NhpEventLogLock); if (NULL != EventLogHandle) { va_list arglist; if (!NhpIsAllowedLog(MessageId, IPNATHLP_LOGGING_INFO)) { return; } va_start(arglist, Format); RouterLogEventValistExA( EventLogHandle, EVENTLOG_INFORMATION_TYPE, ErrorCode, MessageId, Format, arglist ); va_end(arglist); } } BOOLEAN NhInitializeEventLogManagement( VOID ) { BOOLEAN Succeeded = TRUE; NhpEventLogCount = 0; __try { InitializeCriticalSection(&NhpEventLogLock); } __except(EXCEPTION_EXECUTE_HANDLER) { Succeeded = FALSE; } return Succeeded; } BOOLEAN NhpIsAllowedLog( ULONG MessageId, ULONG Level ) { if (MessageId > IP_AUTO_DHCP_LOG_BASE && MessageId < IP_AUTO_DHCP_LOG_END) { EnterCriticalSection(&DhcpGlobalInfoLock); if (!DhcpGlobalInfo) { LeaveCriticalSection(&DhcpGlobalInfoLock); return (Level == IPNATHLP_LOGGING_ERROR) ? TRUE : FALSE; } else if (DhcpGlobalInfo->LoggingLevel < Level) { LeaveCriticalSection(&DhcpGlobalInfoLock); return FALSE; } LeaveCriticalSection(&DhcpGlobalInfoLock); return TRUE; } else if (MessageId > IP_DNS_PROXY_LOG_BASE && MessageId < IP_DNS_PROXY_LOG_END) { EnterCriticalSection(&DnsGlobalInfoLock); if (!DnsGlobalInfo) { LeaveCriticalSection(&DnsGlobalInfoLock); return (Level == IPNATHLP_LOGGING_ERROR) ? TRUE : FALSE; } else if (DnsGlobalInfo->LoggingLevel < Level) { LeaveCriticalSection(&DnsGlobalInfoLock); return FALSE; } LeaveCriticalSection(&DnsGlobalInfoLock); return TRUE; } else if (MessageId > IP_H323_LOG_BASE && MessageId < IP_H323_LOG_END) { EnterCriticalSection(&H323GlobalInfoLock); if (!H323GlobalInfo) { LeaveCriticalSection(&H323GlobalInfoLock); return (Level == IPNATHLP_LOGGING_ERROR) ? TRUE : FALSE; } else if (H323GlobalInfo->LoggingLevel < Level) { LeaveCriticalSection(&H323GlobalInfoLock); return FALSE; } LeaveCriticalSection(&H323GlobalInfoLock); return TRUE; } else if (MessageId > IP_NAT_LOG_BASE && MessageId < IP_NAT_LOG_END) { EnterCriticalSection(&NatGlobalInfoLock); if (!NatGlobalInfo) { LeaveCriticalSection(&NatGlobalInfoLock); return (Level == IPNATHLP_LOGGING_ERROR) ? TRUE : FALSE; } else if (NatGlobalInfo->LoggingLevel < Level) { LeaveCriticalSection(&NatGlobalInfoLock); return FALSE; } LeaveCriticalSection(&NatGlobalInfoLock); return TRUE; } return TRUE; } VOID NhWarningLog( ULONG MessageId, ULONG ErrorCode, PCHAR Format, ... ) { HANDLE EventLogHandle; EnterCriticalSection(&NhpEventLogLock); ASSERT(NhpEventLogCount > 0); EventLogHandle = NhEventLogHandle; LeaveCriticalSection(&NhpEventLogLock); if (NULL != EventLogHandle) { va_list arglist; if (!NhpIsAllowedLog(MessageId, IPNATHLP_LOGGING_WARN)) { return; } va_start(arglist, Format); RouterLogEventValistExA( EventLogHandle, EVENTLOG_WARNING_TYPE, ErrorCode, MessageId, Format, arglist ); va_end(arglist); } } VOID NhStartEventLog( VOID ) { EnterCriticalSection(&NhpEventLogLock); NhpEventLogCount += 1; if (NULL == NhEventLogHandle) { NhEventLogHandle = RouterLogRegisterA(TARGETNAME); } LeaveCriticalSection(&NhpEventLogLock); } VOID NhStopEventLog( VOID ) { EnterCriticalSection(&NhpEventLogLock); ASSERT(NhpEventLogCount > 0); NhpEventLogCount -= 1; if (0 == NhpEventLogCount && NULL != NhEventLogHandle) { RouterLogDeregister(NhEventLogHandle); NhEventLogHandle = NULL; } LeaveCriticalSection(&NhpEventLogLock); } VOID NhShutdownEventLogManagement( VOID ) { DeleteCriticalSection(&NhpEventLogLock); }