253 lines
5.7 KiB
C
253 lines
5.7 KiB
C
/*++
|
||
|
||
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;
|
||
}
|
||
}
|
||
}
|