windows-nt/Source/XPSP1/NT/net/tapi/skywalker/cc/h245ws/hwsdebug.c
2020-09-26 16:20:57 +08:00

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)