269 lines
6.8 KiB
C
269 lines
6.8 KiB
C
|
/***************************************************************************
|
||
|
*
|
||
|
* 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 <windows.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
#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)
|