243 lines
5.1 KiB
C
243 lines
5.1 KiB
C
/*++
|
||
|
||
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);
|
||
}
|
||
}
|