/*************************************************************************** * * File: hwsdebug.c * * INTEL Corporation Proprietary Information * Copyright (c) 1996 Intel Corporation. * * This listing is supplied under the terms of a license agreement * with INTEL Corporation and may not be used, copied, nor disclosed * except in accordance with the terms of that agreement. * *************************************************************************** * * $Workfile: hwsdebug.c $ * $Revision: 1.13 $ * $Modtime: 13 Dec 1996 11:44:24 $ * $Log: S:\sturgeon\src\h245ws\vcs\hwsdebug.c_v $ * * Rev 1.13 13 Dec 1996 12:12:50 SBELL1 * moved ifdef _cplusplus to after includes * * Rev 1.12 11 Dec 1996 13:41:56 SBELL1 * Put in UNICODE tracing stuff. * * Rev 1.11 01 Oct 1996 14:49:22 EHOWARDX * Revision 1.9 copied to tip. * * Rev 1.9 May 28 1996 10:40:14 plantz * Change vsprintf to wvsprintf. * * Rev 1.8 29 Apr 1996 17:13:16 unknown * Fine-tuning instance-specific name. * * Rev 1.7 29 Apr 1996 13:04:56 EHOWARDX * * Added timestamp and instance-specific short name. * * Rev 1.6 Apr 24 1996 16:20:56 plantz * Removed include winsock2.h and incommon.h * * Rev 1.4.1.0 Apr 24 1996 16:19:54 plantz * Removed include winsock2.h and callcont.h * * Rev 1.4 01 Apr 1996 14:20:34 unknown * Shutdown redesign. * * Rev 1.3 22 Mar 1996 16:04:18 EHOWARDX * Added #if defined(_DEBUG) around whole file. * * Rev 1.2 22 Mar 1996 15:25:28 EHOWARDX * Changed to use ISR_HookDbgStr instead of OutputDebugString. * * Rev 1.1 14 Mar 1996 17:01:00 EHOWARDX * * NT4.0 testing; got rid of HwsAssert(); got rid of TPKT/WSCB. * * Rev 1.0 08 Mar 1996 20:22:14 unknown * Initial revision. * ***************************************************************************/ #if defined(DBG) && !defined(ISRDBG) #include #include #include #if defined(__cplusplus) extern "C" { #endif // (__cplusplus) DWORD g_dwLinkDbgLevel = 0; BOOL g_fLinkDbgInitialized = FALSE; void LinkDbgInit() { #define H323_REGKEY_ROOT \ TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\H323TSP") #define H323_REGVAL_DEBUGLEVEL \ TEXT("DebugLevel") #define H323_REGVAL_LINKDEBUGLEVEL \ TEXT("LinkDebugLevel") HKEY hKey; LONG lStatus; DWORD dwValue; DWORD dwValueSize; DWORD dwValueType; LPSTR pszValue; LPSTR pszKey = H323_REGKEY_ROOT; // only call this once g_fLinkDbgInitialized = TRUE; // open registry subkey lStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE, pszKey, 0, KEY_READ, &hKey ); // validate return code if (lStatus != ERROR_SUCCESS) { return; // bail... } // initialize values dwValueType = REG_DWORD; dwValueSize = sizeof(DWORD); // retrieve link debug level pszValue = H323_REGVAL_LINKDEBUGLEVEL; // query for registry value lStatus = RegQueryValueEx( hKey, pszValue, NULL, &dwValueType, (LPBYTE)&dwValue, &dwValueSize ); // validate return code if (lStatus != ERROR_SUCCESS) { // initialize values dwValueType = REG_DWORD; dwValueSize = sizeof(DWORD); // retrieve tsp debug level pszValue = H323_REGVAL_DEBUGLEVEL; // query for registry value lStatus = RegQueryValueEx( hKey, pszValue, NULL, &dwValueType, (LPBYTE)&dwValue, &dwValueSize ); } // validate return code if (lStatus == ERROR_SUCCESS) { // update debug level g_dwLinkDbgLevel = dwValue; } // close key RegCloseKey(hKey); } /***************************************************************************** * * TYPE: Global System * * PROCEDURE: HwsTrace * * DESCRIPTION: * Trace function for HWS * * INPUT: * dwInst Instance identifier for trace message * dwLevel Trace level as defined below * pszFormat sprintf string format with 1-N parameters * * Trace Level (byLevel) Definitions: * HWS_CRITICAL Progammer errors that should never happen * HWS_ERROR Errors that need to be fixed * HWS_WARNING The user could have problems if not corrected * HWS_NOTIFY Status, events, settings... * HWS_TRACE Trace info that will not overrun the system * HWS_TEMP Trace info that may be reproduced in heavy loops * * RETURN VALUE: * None * *****************************************************************************/ void HwsTrace (DWORD dwInst, BYTE byLevel, #ifdef UNICODE_TRACE LPTSTR pszFormat, #else LPSTR pszFormat, #endif ...) { #define DEBUG_FORMAT_HEADER "LINK " #define DEBUG_FORMAT_TIMESTAMP "[%02u:%02u:%02u.%03u" #define DEBUG_FORMAT_THREADID ",tid=%x] " #define MAX_DEBUG_STRLEN 512 va_list Args; SYSTEMTIME SystemTime; char szDebugMessage[MAX_DEBUG_STRLEN+1]; int nLengthRemaining; int nLength = 0; // make sure initialized if (g_fLinkDbgInitialized == FALSE) { LinkDbgInit(); } // validate debug log level if ((DWORD)(BYTE)byLevel > g_dwLinkDbgLevel) { return; // bail... } // retrieve local time GetLocalTime(&SystemTime); // add component header to the debug message nLength += sprintf(&szDebugMessage[nLength], DEBUG_FORMAT_HEADER ); // add timestamp to the debug message nLength += sprintf(&szDebugMessage[nLength], DEBUG_FORMAT_TIMESTAMP, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds ); // add thread id to the debug message nLength += sprintf(&szDebugMessage[nLength], DEBUG_FORMAT_THREADID, GetCurrentThreadId() ); // point at first argument va_start(Args, pszFormat); // determine number of bytes left in buffer nLengthRemaining = sizeof(szDebugMessage) - nLength; // add user specified debug message _vsnprintf(&szDebugMessage[nLength], nLengthRemaining, pszFormat, Args ); // release pointer va_end(Args); // output message to specified sink OutputDebugString(szDebugMessage); OutputDebugString("\n"); } // HwsTrace() #endif // DBG #if defined(__cplusplus) } #endif // (__cplusplus)