/*++ 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 #include #include #include #include #include #include #include /////////////////////////////////////////////////////////////////////////////// // // // 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; } } }