windows-nt/Source/XPSP1/NT/net/snmp/common/dll/print.c
2020-09-26 16:20:57 +08:00

253 lines
5.7 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1992-1997 Microsoft Corporation
Module Name:
print.c
Abstract:
Contains printing support.
SnmpUtilPrintOid
SnmpUtilPrintAsnAny
Environment:
User Mode - Win32
Revision History:
--*/
///////////////////////////////////////////////////////////////////////////////
// //
// Include files //
// //
///////////////////////////////////////////////////////////////////////////////
#include <nt.h>
#include <windef.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <snmp.h>
#include <snmputil.h>
#include <stdio.h>
///////////////////////////////////////////////////////////////////////////////
// //
// Public Procedures //
// //
///////////////////////////////////////////////////////////////////////////////
VOID
SNMP_FUNC_TYPE
SnmpUtilPrintOid(
AsnObjectIdentifier * pOid
)
/*++
Routine Description:
Outputs object identifier to the console.
Arguments:
pOid - pointer to OID to display.
Return Values:
None.
--*/
{
UINT i;
// validate oid
if ((pOid != NULL) &&
(pOid->ids != NULL) &&
(pOid->idLength != 0)) {
// output first subidentifier
fprintf(stdout, "%lu", pOid->ids[0]);
// loop through subidentifiers
for (i = 1; i < pOid->idLength; i++) {
// output next subidentifier
fprintf(stdout, ".%lu", pOid->ids[i]);
}
}
}
VOID
SNMP_FUNC_TYPE
SnmpUtilPrintAsnAny(
AsnAny * pAsnAny
)
/*++
Routine Description:
Outputs variable value to the console.
Arguments:
pAsnAny - pointer to value structure from variable binding.
Return Values:
None.
--*/
{
// validate
if (pAsnAny != NULL) {
// determine type
switch (pAsnAny->asnType) {
case ASN_INTEGER32:
fprintf(stdout, "Integer32 %ld\n", pAsnAny->asnValue.number);
break;
case ASN_UNSIGNED32:
fprintf(stdout, "Unsigned32 %lu\n", pAsnAny->asnValue.unsigned32);
break;
case ASN_COUNTER32:
fprintf(stdout, "Counter32 %lu\n", pAsnAny->asnValue.counter);
break;
case ASN_GAUGE32:
fprintf(stdout, "Gauge32 %lu\n", pAsnAny->asnValue.gauge);
break;
case ASN_TIMETICKS:
fprintf(stdout, "TimeTicks %lu\n", pAsnAny->asnValue.ticks);
break;
case ASN_COUNTER64:
fprintf(stdout, "Counter64 %I64u\n", pAsnAny->asnValue.counter64.QuadPart);
break;
case ASN_OBJECTIDENTIFIER:
{
UINT i;
fprintf(stdout, "ObjectID ");
// simply forward to helper function
SnmpUtilPrintOid(&pAsnAny->asnValue.object);
putchar('\n');
}
break;
case ASN_OCTETSTRING:
{
UINT i;
BOOL bDisplayString = TRUE;
LPSTR StringFormat;
// loop through string looking for non-printable characters
for (i = 0; i < pAsnAny->asnValue.string.length && bDisplayString; i++ ) {
bDisplayString = isprint(pAsnAny->asnValue.string.stream[i]);
}
// determine string format based on results
StringFormat = bDisplayString ? "%c" : "<0x%02x>" ;
fprintf(stdout, "String ");
for (i = 0; i < pAsnAny->asnValue.string.length; i++) {
fprintf(stdout, StringFormat, pAsnAny->asnValue.string.stream[i]);
}
putchar('\n');
}
break;
case ASN_IPADDRESS:
{
UINT i;
fprintf(stdout, "IpAddress " );
if (pAsnAny->asnValue.string.stream && (pAsnAny->asnValue.string.length == 4))
{
fprintf(stdout, "%d.%d.%d.%d ",
pAsnAny->asnValue.string.stream[0] ,
pAsnAny->asnValue.string.stream[1] ,
pAsnAny->asnValue.string.stream[2] ,
pAsnAny->asnValue.string.stream[3]
);
}
else
{
fprintf(stdout, "Invalid" );
}
putchar('\n');
}
break;
case ASN_OPAQUE:
{
UINT i;
fprintf(stdout, "Opaque ");
for (i = 0; i < pAsnAny->asnValue.string.length; i++) {
fprintf(stdout, "0x%x ", pAsnAny->asnValue.string.stream[i]);
}
putchar('\n');
}
break;
case ASN_BITS:
{
UINT i;
fprintf(stdout, "Bits ");
for (i = 0; i < pAsnAny->asnValue.string.length; i++) {
fprintf(stdout, "0x%x ", pAsnAny->asnValue.string.stream[i]);
}
putchar('\n');
}
break;
case ASN_NULL:
fprintf(stdout, "Null value\n");
break;
case SNMP_EXCEPTION_NOSUCHOBJECT:
fprintf(stdout, "NOSUCHOBJECT\n");
break;
case SNMP_EXCEPTION_NOSUCHINSTANCE:
fprintf(stdout, "NOSUCHINSTANCE\n");
break;
case SNMP_EXCEPTION_ENDOFMIBVIEW:
fprintf(stdout, "ENDOFMIBVIEW\n");
break;
default:
fprintf(stdout, "Invalid type %d\n", pAsnAny->asnType);
break;
}
}
}