mirror of https://github.com/tongzx/nt5src
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.
242 lines
5.1 KiB
242 lines
5.1 KiB
/*++
|
|
|
|
Copyright (c) 1992-1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dbg.c
|
|
|
|
Abstract:
|
|
|
|
Contains common SNMP debugging routines.
|
|
|
|
SnmpSvcSetLogLevel
|
|
SnmpSvcSetLogType
|
|
SnmpUtilDbgPrint
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Include files //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <snmp.h>
|
|
#include <snmputil.h>
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Private Definitions //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define MAX_LOG_ENTRY_LEN 512
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Global Variables //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
INT g_nLogType = SNMP_OUTPUT_TO_DEBUGGER;
|
|
INT g_nLogLevel = SNMP_LOG_SILENT;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Private Procedures //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
OutputLogEntry(
|
|
LPSTR pLogEntry
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Writes log entry to log types specified.
|
|
|
|
Arguments:
|
|
|
|
pLogEntry - zero-terminated string containing log entry text.
|
|
|
|
Return Values:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
// initialize descriptor
|
|
static FILE * fd = NULL;
|
|
|
|
// check if console output specified
|
|
if (g_nLogType & SNMP_OUTPUT_TO_CONSOLE) {
|
|
|
|
// output entry to stream
|
|
fprintf(stdout, "%s", pLogEntry);
|
|
|
|
// flush stream
|
|
fflush(stdout);
|
|
}
|
|
|
|
// check if logfile output specified
|
|
if (g_nLogType & SNMP_OUTPUT_TO_LOGFILE) {
|
|
|
|
// validate
|
|
if (fd == NULL) {
|
|
|
|
// attempt to open log file
|
|
fd = fopen("snmpdbg.log", "w");
|
|
}
|
|
|
|
// validate
|
|
if (fd != NULL) {
|
|
|
|
// output entry to stream
|
|
fprintf(fd, "%s", pLogEntry);
|
|
|
|
// flush stream
|
|
fflush(fd);
|
|
}
|
|
}
|
|
|
|
// check if debugger output specified
|
|
if (g_nLogType & SNMP_OUTPUT_TO_DEBUGGER) {
|
|
|
|
// output entry to debugger
|
|
OutputDebugStringA(pLogEntry);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Public Procedures //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
VOID
|
|
SNMP_FUNC_TYPE
|
|
SnmpSvcSetLogLevel(
|
|
INT nLogLevel
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Modifies the logging level of the SNMP process.
|
|
|
|
Arguments:
|
|
|
|
nLogLevel - new logging level.
|
|
|
|
Return Values:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
// update log level
|
|
g_nLogLevel = nLogLevel;
|
|
}
|
|
|
|
|
|
VOID
|
|
SNMP_FUNC_TYPE
|
|
SnmpSvcSetLogType(
|
|
INT nLogType
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Modifies the type of log used by the SNMP process.
|
|
|
|
Arguments:
|
|
|
|
nLogType - type of log.
|
|
|
|
Return Values:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
// update log type
|
|
g_nLogType = nLogType;
|
|
}
|
|
|
|
|
|
VOID
|
|
SNMP_FUNC_TYPE
|
|
SnmpUtilDbgPrint(
|
|
INT nLogLevel,
|
|
LPSTR szFormat,
|
|
...
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Prints debug message to current log types.
|
|
|
|
Arguments:
|
|
|
|
nLogLevel - log level of message.
|
|
|
|
szFormat - formatting string (see printf).
|
|
|
|
Return Values:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
va_list arglist;
|
|
|
|
// 640 octets should be enough to encode oid's of 128 sub-ids.
|
|
// (one subid can be encoded on at most 5 octets; there can be at
|
|
// 128 sub-ids per oid. MAX_LOG_ENTRY_LEN = 512
|
|
char szLogEntry[4*MAX_LOG_ENTRY_LEN];
|
|
|
|
// validate entry's level
|
|
if (nLogLevel <= g_nLogLevel) {
|
|
|
|
time_t now;
|
|
|
|
// initialize variable args
|
|
va_start(arglist, szFormat);
|
|
|
|
time(&now);
|
|
strftime(szLogEntry, MAX_LOG_ENTRY_LEN, "%H:%M:%S :", localtime(&now));
|
|
|
|
// transfer variable args to buffer
|
|
vsprintf(szLogEntry + strlen(szLogEntry), szFormat, arglist);
|
|
|
|
// actually output entry
|
|
OutputLogEntry(szLogEntry);
|
|
}
|
|
}
|