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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|