summaryrefslogtreecommitdiff
path: root/ASNMP/asnmp/asn1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ASNMP/asnmp/asn1.cpp')
-rw-r--r--ASNMP/asnmp/asn1.cpp963
1 files changed, 482 insertions, 481 deletions
diff --git a/ASNMP/asnmp/asn1.cpp b/ASNMP/asnmp/asn1.cpp
index 77dc9baa5ec..da2e936349b 100644
--- a/ASNMP/asnmp/asn1.cpp
+++ b/ASNMP/asnmp/asn1.cpp
@@ -33,13 +33,13 @@
All Rights Reserved
- Permission to use, copy, modify, and distribute this software and its
- documentation for any purpose and without fee is hereby granted,
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
- both that copyright notice and this permission notice appear in
+ both that copyright notice and this permission notice appear in
supporting documentation, and that the name of CMU not be
used in advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
+ software without specific, written prior permission.
CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
@@ -63,39 +63,39 @@ ACE_RCSID(asnmp, asn1, "$Id$")
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
-u_char * asn1::parse_int( u_char *data,
- int *datalength,
- u_char *type,
- long int *intp,
- int intsize)
+u_char * asn1::parse_int( u_char *data,
+ int *datalength,
+ u_char *type,
+ long int *intp,
+ int intsize)
{
ACE_TRACE("asn1::parse_int");
/*
* ASN.1 integer ::= 0x02 asnlength byte {byte}*
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
long value = 0;
if (intsize != sizeof (long)){
ASNERROR("not long");
- return 0;
+ return NULL;
}
*type = *bufp++;
bufp =asn1::parse_length(bufp, &asn_length);
- if (bufp == 0){
+ if (bufp == NULL){
ASNERROR("bad length");
- return 0;
+ return NULL;
}
if ((int)(asn_length + (bufp - data)) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
if ((int)asn_length > intsize){
ASNERROR("I don't support such large integers");
- return 0;
+ return NULL;
}
*datalength -= (int)asn_length + (bufp - data);
if (*bufp & 0x80)
@@ -115,44 +115,44 @@ u_char * asn1::parse_int( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
-u_char * asn1::parse_unsigned_int( u_char *data,
- int *datalength,
- u_char *type,
- u_long *intp,
- int intsize)
+u_char * asn1::parse_unsigned_int( u_char *data,
+ int *datalength,
+ u_char *type,
+ u_long *intp,
+ int intsize)
{
ACE_TRACE("asn1::parse_unsigned_int");
/*
* ASN.1 integer ::= 0x02 asnlength byte {byte}*
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
u_long value = 0;
if (intsize != sizeof (long)){
ASNERROR("not long");
- return 0;
+ return NULL;
}
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0){
+ if (bufp == NULL){
ASNERROR("bad length");
- return 0;
+ return NULL;
}
if ((int)(asn_length + (bufp - data)) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
if (((int)asn_length > (intsize + 1)) ||
(((int)asn_length == intsize + 1) && *bufp != 0x00)){
ASNERROR("I don't support such large integers");
- return 0;
+ return NULL;
}
*datalength -= (int)asn_length + (bufp - data);
if (*bufp & 0x80)
- value = (u_long) -1;
+ value = (u_long) -1;
while(asn_length--)
value = (value << 8) | *bufp++;
*intp = value;
@@ -168,13 +168,13 @@ u_char * asn1::parse_unsigned_int( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_int( u_char *data,
- int *datalength,
- u_char type,
- long *intp,
- int intsize)
+ int *datalength,
+ u_char type,
+ long *intp,
+ int intsize)
{
ACE_TRACE("asn1::build_int");
/*
@@ -185,7 +185,7 @@ u_char * asn1::build_int( u_char *data,
u_long mask;
if (intsize != sizeof (long))
- return 0;
+ return NULL;
integer = *intp;
/*
* Truncate "unnecessary" bytes off of the most significant end of this
@@ -196,15 +196,15 @@ u_char * asn1::build_int( u_char *data,
mask = 0x1FF << ((8 * (sizeof(long) - 1)) - 1);
/* mask is 0xFF800000 on a big-endian machine */
while((((integer & mask) == 0) || ((integer & mask) == mask))
- && intsize > 1){
+ && intsize > 1){
intsize--;
integer <<= 8;
}
data = asn1::build_header(data, datalength, type, intsize);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < intsize)
- return 0;
+ return NULL;
*datalength -= intsize;
mask = 0xFF << (8 * (sizeof(long) - 1));
/* mask is 0xFF000000 on a big-endian machine */
@@ -224,13 +224,13 @@ u_char * asn1::build_int( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_unsigned_int( u_char *data,
- int *datalength,
- u_char type,
- u_long *intp,
- int intsize)
+ int *datalength,
+ u_char type,
+ u_long *intp,
+ int intsize)
{
ACE_TRACE("asn1::build_unsigned_int");
/*
@@ -242,7 +242,7 @@ u_char * asn1::build_unsigned_int( u_char *data,
int add_null_byte = 0;
if (intsize != sizeof (long))
- return 0;
+ return NULL;
integer = *intp;
mask = 0xFF << (8 * (sizeof(long) - 1));
/* mask is 0xFF000000 on a big-endian machine */
@@ -263,10 +263,10 @@ u_char * asn1::build_unsigned_int( u_char *data,
integer <<= 8;
}
data = asn1::build_header(data, datalength, type, intsize);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < intsize)
- return 0;
+ return NULL;
*datalength -= intsize;
if (add_null_byte == 1){
*data++ = '\0';
@@ -292,13 +292,13 @@ u_char * asn1::build_unsigned_int( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
-u_char * asn1::parse_string( u_char *data,
- int *datalength,
- u_char *type,
- u_char *string,
- int *strlength)
+u_char * asn1::parse_string( u_char *data,
+ int *datalength,
+ u_char *type,
+ u_char *string,
+ int *strlength)
{
ACE_TRACE("asn1::parse_string");
/*
@@ -307,19 +307,19 @@ u_char * asn1::parse_string( u_char *data,
* cmpdstring ::= 0x24 asnlength string {string}*
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0)
- return 0;
+ if (bufp == NULL)
+ return NULL;
if ((int)(asn_length + (bufp - data)) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
if ((int)asn_length > *strlength){
ASNERROR("I don't support such long strings");
- return 0;
+ return NULL;
}
// fixed
ACE_OS::memcpy((char *)string, (char *)bufp, (int)asn_length);
@@ -337,13 +337,13 @@ u_char * asn1::parse_string( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_string( u_char *data,
- int *datalength,
- u_char type,
- u_char *string,
- int strlength)
+ int *datalength,
+ u_char type,
+ u_char *string,
+ int strlength)
{
ACE_TRACE("asn1::build_string");
/*
@@ -353,10 +353,10 @@ u_char * asn1::build_string( u_char *data,
* This code will never send a compound string.
*/
data = asn1::build_header(data, datalength, type, strlength);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < strlength)
- return 0;
+ return NULL;
// fixed
ACE_OS::memcpy((u_char *)data,(u_char *)string, strlength);
*datalength -= strlength;
@@ -371,30 +371,30 @@ u_char * asn1::build_string( u_char *data,
* in this object following the id and length.
*
* Returns a pointer to the first byte of the contents of this object.
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::parse_header( u_char *data,
- int *datalength,
- u_char *type)
+ int *datalength,
+ u_char *type)
{
ACE_TRACE("asn1::parse_header");
u_char *bufp = data;
register int header_len;
- u_long asn_length;
+ u_long asn_length;
/* this only works on data types < 30, i.e. no extension octets */
if (IS_EXTENSION_ID(*bufp)){
ASNERROR("can't process ID >= 30");
- return 0;
+ return NULL;
}
*type = *bufp;
bufp = asn1::parse_length(bufp + 1, &asn_length);
- if (bufp == 0)
- return 0;
+ if (bufp == NULL)
+ return NULL;
header_len = bufp - data;
if ((int)(header_len + asn_length) > *datalength){
ASNERROR("asn length too long");
- return 0;
+ return NULL;
}
*datalength = (int)asn_length;
return bufp;
@@ -411,20 +411,20 @@ u_char *asn1::parse_header( u_char *data,
* The maximum length is 0xFFFF;
*
* Returns a pointer to the first byte of the contents of this object.
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_header( u_char *data,
- int *datalength,
- u_char type,
- int length)
+ int *datalength,
+ u_char type,
+ int length)
{
ACE_TRACE("asn1::build_header");
if (*datalength < 1)
- return 0;
+ return NULL;
*data++ = type;
(*datalength)--;
return asn1::build_length(data, datalength, length);
-
+
}
/*
@@ -438,18 +438,18 @@ u_char * asn1::build_header( u_char *data,
* The maximum length is 0xFFFF;
*
* Returns a pointer to the first byte of the contents of this object.
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_sequence( u_char *data,
- int *datalength,
- u_char type,
- int length)
+ int *datalength,
+ u_char type,
+ int length)
{
ACE_TRACE("asn1::build_sequence");
*datalength -= 4;
if (*datalength < 0){
- *datalength += 4; /* fix up before punting */
- return 0;
+ *datalength += 4; /* fix up before punting */
+ return NULL;
}
*data++ = type;
*data++ = (u_char)(0x02 | ASN_LONG_LEN);
@@ -464,23 +464,23 @@ u_char * asn1::build_sequence( u_char *data,
*
* Returns a pointer to the first byte after this length
* field (aka: the start of the data field).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::parse_length( u_char *data,
- u_long *length)
+ u_long *length)
{
ACE_TRACE("asn1::parse_length");
u_char lengthbyte = *data;
if (lengthbyte & ASN_LONG_LEN){
- lengthbyte &= ~ASN_LONG_LEN; /* turn MSb off */
+ lengthbyte &= ~ASN_LONG_LEN; /* turn MSb off */
if (lengthbyte == 0){
ASNERROR("We don't support indefinite lengths");
- return 0;
+ return NULL;
}
if (lengthbyte > sizeof(long)){
ASNERROR("we can't support data lengths that long");
- return 0;
+ return NULL;
}
// fixed
ACE_OS::memcpy((char *)length, (char *)data + 1, (int)lengthbyte);
@@ -494,8 +494,8 @@ u_char * asn1::parse_length( u_char *data,
};
u_char *asn1::build_length( u_char *data,
- int *datalength,
- int length)
+ int *datalength,
+ int length)
{
ACE_TRACE("asn1::build_length");
u_char *start_data = data;
@@ -504,21 +504,21 @@ u_char *asn1::build_length( u_char *data,
if (length < 0x80){
if (*datalength < 1){
ASNERROR("build_length");
- return 0;
- }
+ return NULL;
+ }
*data++ = (u_char)length;
} else if (length <= 0xFF){
if (*datalength < 2){
ASNERROR("build_length");
- return 0;
- }
+ return NULL;
+ }
*data++ = (u_char)(0x01 | ASN_LONG_LEN);
*data++ = (u_char)length;
} else { /* 0xFF < length <= 0xFFFF */
if (*datalength < 3){
ASNERROR("build_length");
- return 0;
- }
+ return NULL;
+ }
*data++ = (u_char)(0x02 | ASN_LONG_LEN);
*data++ = (u_char)((length >> 8) & 0xFF);
*data++ = (u_char)(length & 0xFF);
@@ -538,13 +538,13 @@ u_char *asn1::build_length( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::parse_objid( u_char *data,
- int *datalength,
- u_char *type,
- oid *objid,
- int *objidlength)
+ int *datalength,
+ u_char *type,
+ oid *objid,
+ int *objidlength)
{
ACE_TRACE("asn1::parse_objid");
/*
@@ -557,15 +557,15 @@ u_char *asn1::parse_objid( u_char *data,
oid *oidp = objid + 1;
u_long subidentifier;
long length;
- u_long asn_length;
+ u_long asn_length;
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0)
- return 0;
+ if (bufp == NULL)
+ return NULL;
if ((int)asn_length + (bufp - data) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
*datalength -= (int)asn_length + (bufp - data);
@@ -574,16 +574,16 @@ u_char *asn1::parse_objid( u_char *data,
objid[0] = objid[1] = 0;
length = asn_length;
- (*objidlength)--; /* account for expansion of first byte */
+ (*objidlength)--; /* account for expansion of first byte */
while (length > 0 && (*objidlength)-- > 0){
subidentifier = 0;
- do { /* shift and add in low order 7 bits */
+ do { /* shift and add in low order 7 bits */
subidentifier = (subidentifier << 7) + (*(u_char *)bufp & ~ASN_BIT8);
length--;
- } while (*(u_char *)bufp++ & ASN_BIT8); /* last byte has high bit clear */
+ } while (*(u_char *)bufp++ & ASN_BIT8); /* last byte has high bit clear */
if (subidentifier > (u_long)MAX_SUBID){
ASNERROR("subidentifier too long");
- return 0;
+ return NULL;
}
*oidp++ = (oid)subidentifier;
}
@@ -591,7 +591,7 @@ u_char *asn1::parse_objid( u_char *data,
/*
* The first two subidentifiers are encoded into the first component
* with the value (X * 40) + Y, where:
- * X is the value of the first subidentifier.
+ * X is the value of the first subidentifier.
* Y is the value of the second subidentifier.
*/
subidentifier = (u_long)objid[1];
@@ -616,13 +616,13 @@ u_char *asn1::parse_objid( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::build_objid( u_char *data,
- int *datalength,
- u_char type,
- oid *objid,
- int objidlength)
+ int *datalength,
+ u_char type,
+ oid *objid,
+ int objidlength)
{
ACE_TRACE("asn1::build_objid");
/*
@@ -656,28 +656,28 @@ u_char *asn1::build_objid( u_char *data,
bits = 0;
/* testmask *MUST* !!!! be of an u_type */
for(testmask = 0x7F, testbits = 0; testmask != 0;
- testmask <<= 7, testbits += 7){
- if (subid & testmask){ /* if any bits set */
- mask = testmask;
- bits = testbits;
- }
+ testmask <<= 7, testbits += 7){
+ if (subid & testmask){ /* if any bits set */
+ mask = testmask;
+ bits = testbits;
+ }
}
/* mask can't be zero here */
for(;mask != 0x7F; mask >>= 7, bits -= 7){
- /* fix a mask that got truncated above */
- if (mask == 0x1E00000)
- mask = 0xFE00000;
- *bp++ = (u_char)(((subid & mask) >> bits) | ASN_BIT8);
+ /* fix a mask that got truncated above */
+ if (mask == 0x1E00000)
+ mask = 0xFE00000;
+ *bp++ = (u_char)(((subid & mask) >> bits) | ASN_BIT8);
}
*bp++ = (u_char)(subid & mask);
}
}
asnlength = bp - buf;
data = asn1::build_header(data, datalength, type, asnlength);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < asnlength)
- return 0;
+ return NULL;
// fixed
ACE_OS::memcpy((char *)data, (char *)buf, asnlength);
*datalength -= asnlength;
@@ -692,26 +692,26 @@ u_char *asn1::build_objid( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
-u_char *asn1::parse_null(u_char *data,
- int *datalength,
- u_char *type)
+u_char *asn1::parse_null(u_char *data,
+ int *datalength,
+ u_char *type)
{
ACE_TRACE("asn1::parse_null");
/*
* ASN.1 null ::= 0x05 0x00
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0)
- return 0;
+ if (bufp == NULL)
+ return NULL;
if (asn_length != 0){
- ASNERROR("Malformed 0");
- return 0;
+ ASNERROR("Malformed NULL");
+ return NULL;
}
*datalength -= (bufp - data);
return bufp + asn_length;
@@ -726,11 +726,11 @@ u_char *asn1::parse_null(u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::build_null( u_char *data,
- int *datalength,
- u_char type)
+ int *datalength,
+ u_char type)
{
ACE_TRACE("asn1::build_null");
/*
@@ -749,40 +749,40 @@ u_char *asn1::build_null( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::parse_bitstring( u_char *data,
- int *datalength,
- u_char *type,
- u_char *string,
- int *strlength)
+ int *datalength,
+ u_char *type,
+ u_char *string,
+ int *strlength)
{
ACE_TRACE("asn1::parse_bitstring");
/*
* bitstring ::= 0x03 asnlength unused {byte}*
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0)
- return 0;
+ if (bufp == NULL)
+ return NULL;
if ((int)(asn_length + (bufp - data)) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
if ((int) asn_length > *strlength){
ASNERROR("I don't support such long bitstrings");
- return 0;
+ return NULL;
}
if (asn_length < 1){
ASNERROR("Invalid bitstring");
- return 0;
+ return NULL;
}
if (*bufp > 7){
ASNERROR("Invalid bitstring");
- return 0;
+ return NULL;
}
// fixed
ACE_OS::memcpy((char *)string,(char *)bufp, (int)asn_length);
@@ -801,13 +801,13 @@ u_char *asn1::parse_bitstring( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char *asn1::build_bitstring( u_char *data,
- int *datalength,
- u_char type,
- u_char *string,
- int strlength)
+ int *datalength,
+ u_char type,
+ u_char *string,
+ int strlength)
{
ACE_TRACE("asn1::build_bitstring");
/*
@@ -815,13 +815,13 @@ u_char *asn1::build_bitstring( u_char *data,
*/
if (strlength < 1 || *string || *string > 7){
ASNERROR("Building invalid bitstring");
- return 0;
+ return NULL;
}
data = asn1::build_header(data, datalength, type, strlength);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < strlength)
- return 0;
+ return NULL;
// fixed
ACE_OS::memcpy((char *)data,(char *)string, strlength);
*datalength -= strlength;
@@ -838,46 +838,46 @@ u_char *asn1::build_bitstring( u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::parse_unsigned_int64(u_char *data,
- int *datalength,
- u_char *type,
- struct counter64 *cp,
- int countersize)
+ int *datalength,
+ u_char *type,
+ struct counter64 *cp,
+ int countersize)
{
ACE_TRACE("asn1::parse_unsigned_int64");
/*
* ASN.1 integer ::= 0x02 asnlength byte {byte}*
*/
u_char *bufp = data;
- u_long asn_length;
+ u_long asn_length;
u_long low = 0, high = 0;
int intsize = 4;
-
+
if (countersize != sizeof(struct counter64)){
ASNERROR("not right size");
- return 0;
+ return NULL;
}
*type = *bufp++;
bufp = asn1::parse_length(bufp, &asn_length);
- if (bufp == 0){
+ if (bufp == NULL){
ASNERROR("bad length");
- return 0;
+ return NULL;
}
if ((int)(asn_length + (bufp - data)) > *datalength){
ASNERROR("overflow of message");
- return 0;
+ return NULL;
}
if (((int)asn_length > (intsize * 2 + 1)) ||
(((int)asn_length == (intsize * 2) + 1) && *bufp != 0x00)){
ASNERROR("I don't support such large integers");
- return 0;
+ return NULL;
}
*datalength -= (int)asn_length + (bufp - data);
if (*bufp & 0x80){
- low = (u_long) -1; // integer is negative
- high = (u_long) -1;
+ low = (u_long) -1; // integer is negative
+ high = (u_long) -1;
}
while(asn_length--){
high = (high << 8) | ((low & 0xFF000000) >> 24);
@@ -897,13 +897,13 @@ u_char * asn1::parse_unsigned_int64(u_char *data,
*
* Returns a pointer to the first byte past the end
* of this object (i.e. the start of the next object).
- * Returns 0 on any error.
+ * Returns NULL on any error.
*/
u_char * asn1::build_unsigned_int64( u_char *data,
- int *datalength,
- u_char type,
- struct counter64 *cp,
- int countersize)
+ int *datalength,
+ u_char type,
+ struct counter64 *cp,
+ int countersize)
{
ACE_TRACE("asn1::build_unsigned_int64");
/*
@@ -916,7 +916,7 @@ u_char * asn1::build_unsigned_int64( u_char *data,
int intsize;
if (countersize != sizeof (struct counter64))
- return 0;
+ return NULL;
intsize = 8;
low = cp->low;
high = cp->high;
@@ -936,17 +936,17 @@ u_char * asn1::build_unsigned_int64( u_char *data,
mask2 = 0x1FF << ((8 * (sizeof(long) - 1)) - 1);
/* mask2 is 0xFF800000 on a big-endian machine */
while((((high & mask2) == 0) || ((high & mask2) == mask2))
- && intsize > 1){
+ && intsize > 1){
intsize--;
high = (high << 8)
| ((low & mask) >> (8 * (sizeof(long) - 1)));
low <<= 8;
}
data = asn1::build_header(data, datalength, type, intsize);
- if (data == 0)
- return 0;
+ if (data == NULL)
+ return NULL;
if (*datalength < intsize)
- return 0;
+ return NULL;
*datalength -= intsize;
if (add_null_byte == 1){
*data++ = '\0';
@@ -957,7 +957,7 @@ u_char * asn1::build_unsigned_int64( u_char *data,
high = (high << 8)
| ((low & mask) >> (8 * (sizeof(long) - 1)));
low <<= 8;
-
+
}
return data;
}
@@ -969,14 +969,14 @@ struct snmp_pdu * cmu_snmp::pdu_create( int command)
ACE_TRACE("cmu_snmp::snmp_pdu_create");
struct snmp_pdu *pdu;
- ACE_NEW_RETURN(pdu, snmp_pdu, 0);
+ ACE_NEW_RETURN(pdu, snmp_pdu, 0);
ACE_OS::memset((char *)pdu, 0,sizeof(struct snmp_pdu));
pdu->command = command;
pdu->errstat = 0;
pdu->errindex = 0;
- pdu->enterprise = 0;
+ pdu->enterprise = NULL;
pdu->enterprise_length = 0;
- pdu->variables = 0;
+ pdu->variables = NULL;
return pdu;
}
@@ -1009,21 +1009,21 @@ void cmu_snmp::free_pdu( struct snmp_pdu *pdu)
// add a null var to a pdu
-void cmu_snmp::add_var(struct snmp_pdu *pdu,
- oid *name,
- int name_length,
- SmiVALUE *smival)
+void cmu_snmp::add_var(struct snmp_pdu *pdu,
+ oid *name,
+ int name_length,
+ SmiVALUE *smival)
{
ACE_TRACE("cmu_snmp::add_var");
struct variable_list *vars;
// if we don't have a vb list ,create one
- if (pdu->variables == 0) {
+ if (pdu->variables == NULL) {
ACE_NEW(pdu->variables, variable_list);
vars = pdu->variables;
}
- else
+ else
{ // we have one, find the end
for(vars = pdu->variables; vars->next_variable; vars = vars->next_variable);
// create one
@@ -1033,7 +1033,7 @@ void cmu_snmp::add_var(struct snmp_pdu *pdu,
}
// add the oid with no data
- vars->next_variable = 0;
+ vars->next_variable = NULL;
// hook in the Oid portion
ACE_NEW(vars->name, oid[(name_length)]);
@@ -1051,9 +1051,9 @@ void cmu_snmp::add_var(struct snmp_pdu *pdu,
case sNMP_SYNTAX_NOSUCHINSTANCE:
case sNMP_SYNTAX_ENDOFMIBVIEW:
{
- vars->type = (u_char) smival->syntax;
- vars->val.string = 0;
- vars->val_len = 0;
+ vars->type = (u_char) smival->syntax;
+ vars->val.string = NULL;
+ vars->val_len = 0;
}
break;
@@ -1062,68 +1062,68 @@ void cmu_snmp::add_var(struct snmp_pdu *pdu,
case sNMP_SYNTAX_OPAQUE:
case sNMP_SYNTAX_IPADDR:
{
- vars->type = (u_char) smival->syntax;
- ACE_NEW(vars->val.string,
+ vars->type = (u_char) smival->syntax;
+ ACE_NEW(vars->val.string,
u_char[(unsigned)smival->value.string.len]);
- vars->val_len = (int) smival->value.string.len;
- ACE_OS::memcpy( (u_char *) vars->val.string,
- (u_char *) smival->value.string.ptr,
- (unsigned) smival->value.string.len);
+ vars->val_len = (int) smival->value.string.len;
+ ACE_OS::memcpy( (u_char *) vars->val.string,
+ (u_char *) smival->value.string.ptr,
+ (unsigned) smival->value.string.len);
}
break;
// oid
case sNMP_SYNTAX_OID:
{
- vars->type = (u_char) smival->syntax;
+ vars->type = (u_char) smival->syntax;
vars->val_len = (int) smival->value.oid.len * sizeof(oid);
- ACE_NEW(vars->val.objid, oid[(unsigned)vars->val_len]);
- ACE_OS::memcpy((u_long *)vars->val.objid,
- (u_long *)smival->value.oid.ptr,
- (unsigned) vars->val_len);
+ ACE_NEW(vars->val.objid, oid[(unsigned)vars->val_len]);
+ ACE_OS::memcpy((u_long *)vars->val.objid,
+ (u_long *)smival->value.oid.ptr,
+ (unsigned) vars->val_len);
}
break;
-
+
case sNMP_SYNTAX_TIMETICKS:
case sNMP_SYNTAX_CNTR32:
case sNMP_SYNTAX_GAUGE32:
case sNMP_SYNTAX_UINT32:
{
- long templong;
- vars->type = (u_char) smival->syntax;
- ACE_NEW(vars->val.integer, long);
- vars->val_len = sizeof(long);
- templong = (long) smival->value.uNumber;
- ACE_OS::memcpy( (long*) vars->val.integer,
- (long*) &templong,
- sizeof(long));
+ long templong;
+ vars->type = (u_char) smival->syntax;
+ ACE_NEW(vars->val.integer, long);
+ vars->val_len = sizeof(long);
+ templong = (long) smival->value.uNumber;
+ ACE_OS::memcpy( (long*) vars->val.integer,
+ (long*) &templong,
+ sizeof(long));
}
break;
case sNMP_SYNTAX_INT32:
{
- long templong;
- vars->type = (u_char) smival->syntax;
- ACE_NEW(vars->val.integer, long);
- vars->val_len = sizeof(long);
- templong = (long) smival->value.sNumber;
- ACE_OS::memcpy( (long*) vars->val.integer,
- (long*) &templong,
- sizeof(long));
+ long templong;
+ vars->type = (u_char) smival->syntax;
+ ACE_NEW(vars->val.integer, long);
+ vars->val_len = sizeof(long);
+ templong = (long) smival->value.sNumber;
+ ACE_OS::memcpy( (long*) vars->val.integer,
+ (long*) &templong,
+ sizeof(long));
}
break;
// 64 bit counter
case sNMP_SYNTAX_CNTR64:
{
- vars->type = ( u_char) smival->syntax;
- ACE_NEW(vars->val.counter64, counter64);
- vars->val_len = sizeof(struct counter64);
- ACE_OS::memcpy( (struct counter64*) vars->val.counter64,
- (SmiLPCNTR64) &(smival->value.hNumber),
- sizeof( SmiCNTR64));
+ vars->type = ( u_char) smival->syntax;
+ ACE_NEW(vars->val.counter64, counter64);
+ vars->val_len = sizeof(struct counter64);
+ ACE_OS::memcpy( (struct counter64*) vars->val.counter64,
+ (SmiLPCNTR64) &(smival->value.hNumber),
+ sizeof( SmiCNTR64));
}
break;
@@ -1134,11 +1134,11 @@ void cmu_snmp::add_var(struct snmp_pdu *pdu,
// build the authentication
// works for v1 or v2c
u_char *cmu_snmp::auth_build( u_char *data,
- int *length,
- long int version,
- u_char *community,
- int community_len,
- int messagelen)
+ int *length,
+ long int version,
+ u_char *community,
+ int community_len,
+ int messagelen)
{
ACE_TRACE("cmu_snmp::auth_build");
u_char *params;
@@ -1147,32 +1147,32 @@ u_char *cmu_snmp::auth_build( u_char *data,
params = community;
plen = community_len;
- data = asn1::build_sequence(data,
- length,
- (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
- messagelen + plen + 5);
- if (data == 0){
+ data = asn1::build_sequence(data,
+ length,
+ (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
+ messagelen + plen + 5);
+ if (data == NULL){
ASNERROR("buildheader");
- return 0;
- }
- data = asn1::build_int(data,
- length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&version,
- sizeof(version));
- if (data == 0){
+ return NULL;
+ }
+ data = asn1::build_int(data,
+ length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&version,
+ sizeof(version));
+ if (data == NULL){
ASNERROR("buildint");
- return 0;
+ return NULL;
}
- data = asn1::build_string(data,
- length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
- params,
- plen );
- if (data == 0){
+ data = asn1::build_string(data,
+ length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
+ params,
+ plen );
+ if (data == NULL){
ASNERROR("buildstring");
- return 0;
+ return NULL;
}
return (u_char *)data;
@@ -1180,11 +1180,11 @@ u_char *cmu_snmp::auth_build( u_char *data,
// build a variable binding
-u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
- int *var_name_len,
- u_char var_val_type,
- int var_val_len, u_char *var_val,
- int *listlength)
+u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
+ int *var_name_len,
+ u_char var_val_type,
+ int var_val_len, u_char *var_val,
+ int *listlength)
{
ACE_TRACE("cmu_snmp::build_var_op");
@@ -1197,42 +1197,42 @@ u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
data += 4;
dummyLen -=4;
if (dummyLen < 0)
- return 0;
+ return NULL;
headerLen = data - dataPtr;
*listlength -= headerLen;
data = asn1::build_objid( data, listlength,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
- var_name, *var_name_len);
- if (data == 0) {
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
+ var_name, *var_name_len);
+ if (data == NULL) {
ASNERROR("");
- return 0;
+ return NULL;
}
// based on the type...
switch(var_val_type) {
case ASN_INTEGER:
- data = asn1::build_int( data, listlength, var_val_type, (long *)var_val,
- var_val_len);
+ data = asn1::build_int( data, listlength, var_val_type, (long *)var_val,
+ var_val_len);
break;
case SMI_GAUGE:
case SMI_COUNTER:
case SMI_TIMETICKS:
case SMI_UINTEGER:
- data = asn1::build_unsigned_int( data,
- listlength,
- var_val_type,
- (u_long *)var_val,
- var_val_len);
+ data = asn1::build_unsigned_int( data,
+ listlength,
+ var_val_type,
+ (u_long *)var_val,
+ var_val_len);
break;
case SMI_COUNTER64:
- data = asn1::build_unsigned_int64(data,
- listlength,
- var_val_type,
- (struct counter64 *)var_val,
- var_val_len);
+ data = asn1::build_unsigned_int64(data,
+ listlength,
+ var_val_type,
+ (struct counter64 *)var_val,
+ var_val_len);
break;
case ASN_OCTET_STR:
@@ -1240,12 +1240,12 @@ u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
case SMI_OPAQUE:
case SMI_NSAP:
data = asn1::build_string(data, listlength, var_val_type,
- var_val, var_val_len);
+ var_val, var_val_len);
break;
case ASN_OBJECT_ID:
data = asn1::build_objid(data, listlength, var_val_type,
- (oid *)var_val, var_val_len / sizeof(oid));
+ (oid *)var_val, var_val_len / sizeof(oid));
break;
case ASN_NULL:
@@ -1254,7 +1254,7 @@ u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
case ASN_BIT_STR:
data = asn1::build_bitstring(data, listlength, var_val_type,
- var_val, var_val_len);
+ var_val, var_val_len);
break;
case SNMP_NOSUCHOBJECT:
@@ -1265,25 +1265,25 @@ u_char * cmu_snmp::build_var_op(u_char *data, oid * var_name,
default:
ASNERROR("wrong type");
- return 0;
+ return NULL;
}
- if (data == 0) {
+ if (data == NULL) {
ASNERROR("");
- return 0;
+ return NULL;
}
dummyLen = (data - dataPtr) - headerLen;
asn1::build_sequence(dataPtr, &dummyLen,
- (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
- dummyLen);
+ (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
+ dummyLen);
return data;
}
// serialize the pdu
-int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
- int *out_length, long version,
- u_char* community, int community_len)
+int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
+ int *out_length, long version,
+ u_char* community, int community_len)
{
ACE_TRACE("cmu_snmp::build");
u_char buf[SNMP_MSG_LENGTH];
@@ -1295,22 +1295,22 @@ int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
length = *out_length;
cp = packet;
for(vp = pdu->variables; vp; vp = vp->next_variable) {
- cp = cmu_snmp::build_var_op( cp, vp->name,
- &vp->name_length, vp->type,
- vp->val_len, (u_char *)vp->val.string,
- &length);
- if (cp == 0)
+ cp = cmu_snmp::build_var_op( cp, vp->name,
+ &vp->name_length, vp->type,
+ vp->val_len, (u_char *)vp->val.string,
+ &length);
+ if (cp == NULL)
return -1;
}
totallength = cp - packet;
length = SNMP_MSG_LENGTH;
-
+
// encode the total len
- cp = asn1::build_header( buf, &length,
- (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
- totallength);
- if (cp == 0)
+ cp = asn1::build_header( buf, &length,
+ (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR),
+ totallength);
+ if (cp == NULL)
return -1;
ACE_OS::memcpy( (char *)cp, (char *)packet,totallength);
totallength += cp - buf;
@@ -1318,80 +1318,80 @@ int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
length = *out_length;
if (pdu->command != TRP_REQ_MSG) {
- // request id
- cp = asn1::build_int( packet,
- &length,
- (u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->reqid,
- sizeof(pdu->reqid));
- if (cp == 0)
+ // request id
+ cp = asn1::build_int( packet,
+ &length,
+ (u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->reqid,
+ sizeof(pdu->reqid));
+ if (cp == NULL)
return -1;
- // error status
- cp = asn1::build_int(cp,
- &length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->errstat, sizeof(pdu->errstat));
- if (cp == 0)
+ // error status
+ cp = asn1::build_int(cp,
+ &length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->errstat, sizeof(pdu->errstat));
+ if (cp == NULL)
return -1;
- // error index
- cp = asn1::build_int(cp,
- &length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->errindex, sizeof(pdu->errindex));
- if (cp == 0)
+ // error index
+ cp = asn1::build_int(cp,
+ &length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->errindex, sizeof(pdu->errindex));
+ if (cp == NULL)
return -1;
- }
- else { // this is a trap message
-
- // enterprise
- cp = asn1::build_objid( packet,
- &length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
- (oid *)pdu->enterprise,
- pdu->enterprise_length);
- if (cp == 0)
+ }
+ else { // this is a trap message
+
+ // enterprise
+ cp = asn1::build_objid( packet,
+ &length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
+ (oid *)pdu->enterprise,
+ pdu->enterprise_length);
+ if (cp == NULL)
return -1;
- // agent-addr
- cp = asn1::build_string(cp,
- &length,
- // HDN Fixed to use correct tag
- (u_char)SMI_IPADDRESS,
- //(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
- (u_char *)&pdu->agent_addr.sin_addr.s_addr,
- sizeof(pdu->agent_addr.sin_addr.s_addr));
- if (cp == 0)
+ // agent-addr
+ cp = asn1::build_string(cp,
+ &length,
+ // HDN Fixed to use correct tag
+ (u_char)SMI_IPADDRESS,
+ //(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
+ (u_char *)&pdu->agent_addr.sin_addr.s_addr,
+ sizeof(pdu->agent_addr.sin_addr.s_addr));
+ if (cp == NULL)
return -1;
- // generic trap
- cp = asn1::build_int(cp,
- &length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->trap_type,
- sizeof(pdu->trap_type));
- if (cp == 0)
+ // generic trap
+ cp = asn1::build_int(cp,
+ &length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->trap_type,
+ sizeof(pdu->trap_type));
+ if (cp == NULL)
return -1;
- // specific trap
- cp = asn1::build_int( cp,
- &length,
- (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->specific_type,
- sizeof(pdu->specific_type));
- if (cp == 0)
+ // specific trap
+ cp = asn1::build_int( cp,
+ &length,
+ (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->specific_type,
+ sizeof(pdu->specific_type));
+ if (cp == NULL)
return -1;
- // timestamp
- cp = asn1::build_int(cp,
- &length,
- // HDN Fixed to use correct tag
- (u_char)SMI_TIMETICKS,
- //(u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- (long *)&pdu->time,
- sizeof(pdu->time));
- if (cp == 0)
+ // timestamp
+ cp = asn1::build_int(cp,
+ &length,
+ // HDN Fixed to use correct tag
+ (u_char)SMI_TIMETICKS,
+ //(u_char )(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
+ (long *)&pdu->time,
+ sizeof(pdu->time));
+ if (cp == NULL)
return -1;
}
@@ -1402,11 +1402,11 @@ int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
totallength += cp - packet;
length = SNMP_MSG_LENGTH;
- cp = asn1::build_header(buf,
- &length,
- (u_char)pdu->command,
- totallength);
- if (cp == 0)
+ cp = asn1::build_header(buf,
+ &length,
+ (u_char)pdu->command,
+ totallength);
+ if (cp == NULL)
return -1;
if (length < totallength)
return -1;
@@ -1416,13 +1416,13 @@ int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
length = *out_length;
- cp = cmu_snmp::auth_build( packet,
- &length,
- version,
- community,
- community_len,
- totallength );
- if (cp == 0)
+ cp = cmu_snmp::auth_build( packet,
+ &length,
+ version,
+ community,
+ community_len,
+ totallength );
+ if (cp == NULL)
return -1;
if ((*out_length - (cp - packet)) < totallength)
return -1;
@@ -1437,81 +1437,81 @@ int cmu_snmp::build( struct snmp_pdu *pdu, u_char *packet,
// parse the authentication header
u_char *cmu_snmp::auth_parse(u_char *data,
int *length, u_char *sid,
- int *slen, long *version)
+ int *slen, long *version)
{
ACE_TRACE("cmu_snmp::auth_parse");
u_char type;
// get the type
data = asn1::parse_header( data, length, &type);
- if (data == 0){
+ if (data == NULL){
ASNERROR("bad header");
- return 0;
+ return NULL;
}
if (type != (ASN_SEQUENCE | ASN_CONSTRUCTOR)) {
ASNERROR("wrong auth header type");
- return 0;
+ return NULL;
}
// get the version
data = asn1::parse_int(data, length, &type, version, sizeof(*version));
- if (data == 0) {
+ if (data == NULL) {
ASNERROR("bad parse of version");
- return 0;
+ return NULL;
}
// get the community name
data = asn1::parse_string(data, length, &type, sid, slen);
- if (data == 0) {
+ if (data == NULL) {
ASNERROR("bad parse of community");
- return 0;
+ return NULL;
}
return (u_char *)data;
}
-/* u_char *data, // IN - pointer to the start of object
- oid *var_name, // OUT - object id of variable
- int *var_name_len, // IN/OUT - length of variable name
- u_char *var_val_type, // OUT - type of variable
- (int or octet string) (one byte)
- int *var_val_len, // OUT - length of variable
+/* u_char *data, // IN - pointer to the start of object
+ oid *var_name, // OUT - object id of variable
+ int *var_name_len, // IN/OUT - length of variable name
+ u_char *var_val_type, // OUT - type of variable
+ (int or octet string) (one byte)
+ int *var_val_len, // OUT - length of variable
u_char **var_val, // OUT - pointer to ASN1 encoded value of variable
*/
u_char *
-cmu_snmp::parse_var_op( u_char *data, oid *var_name,
- int *var_name_len, u_char *var_val_type,
- int *var_val_len, u_char **var_val,
+cmu_snmp::parse_var_op( u_char *data, oid *var_name,
+ int *var_name_len, u_char *var_val_type,
+ int *var_val_len, u_char **var_val,
int *listlength)
{
ACE_TRACE("cmu_snmp::parse_var_op");
u_char var_op_type;
- int var_op_len = *listlength;
+ int var_op_len = *listlength;
u_char *var_op_start = data;
data = asn1::parse_header(data, &var_op_len, &var_op_type);
- if (data == 0){
+ if (data == NULL){
ASNERROR("");
- return 0;
+ return NULL;
}
if (var_op_type != (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR))
- return 0;
+ return NULL;
data = asn1::parse_objid(data, &var_op_len, &var_op_type, var_name, var_name_len);
- if (data == 0) {
+ if (data == NULL) {
ASNERROR("");
- return 0;
+ return NULL;
}
if (var_op_type != (u_char)
(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID))
- return 0;
- *var_val = data; /* save pointer to this object */
+ return NULL;
+ *var_val = data; /* save pointer to this object */
/* find out what type of object this is */
data = asn1::parse_header(data, &var_op_len, var_val_type);
- if (data == 0) {
+ if (data == NULL) {
ASNERROR("");
- return 0;
+ return NULL;
}
*var_val_len = var_op_len;
data += var_op_len;
@@ -1523,36 +1523,36 @@ cmu_snmp::parse_var_op( u_char *data, oid *var_name,
// build a pdu from a data and length
int cmu_snmp::parse( struct snmp_pdu *pdu,
- u_char *data,
- u_char *community_name,
- u_long &community_len,
- snmp_version &spp_version,
- int length)
+ u_char *data,
+ u_char *community_name,
+ u_long &community_len,
+ snmp_version &spp_version,
+ int length)
{
ACE_TRACE("cmu_snmp::parse");
u_char msg_type;
u_char type;
u_char *var_val;
long version;
- int len, four;
+ int len, four;
u_char community[256];
int community_length = 256;
struct variable_list *vp = 0;
- oid objid[MAX_NAME_LEN], *op;
-
- // authenticates message and returns length if valid
- data = cmu_snmp::auth_parse(data,
- &length,
- community,
- &community_length,
- &version);
- if (data == 0)
+ oid objid[MAX_NAME_LEN], *op;
+
+ // authenticates message and returns length if valid
+ data = cmu_snmp::auth_parse(data,
+ &length,
+ community,
+ &community_length,
+ &version);
+ if (data == NULL)
return -1;
// copy the returned community name
- ACE_OS::memcpy( (u_char *) community_name,
- (u_char *) community,
- community_length);
+ ACE_OS::memcpy( (u_char *) community_name,
+ (u_char *) community,
+ community_length);
community_len = (long) community_length;
if( version != SNMP_VERSION_1 && version != SNMP_VERSION_2C ) {
@@ -1562,109 +1562,109 @@ int cmu_snmp::parse( struct snmp_pdu *pdu,
spp_version = (snmp_version) version;
- data = asn1::parse_header(data,
- &length,
- &msg_type);
- if (data == 0)
+ data = asn1::parse_header(data,
+ &length,
+ &msg_type);
+ if (data == NULL)
return -1;
pdu->command = msg_type;
if (pdu->command != TRP_REQ_MSG){
// get the rid
- data = asn1::parse_int(data,
- &length, &type,
- (long *)&pdu->reqid,
- sizeof(pdu->reqid));
- if (data == 0)
+ data = asn1::parse_int(data,
+ &length, &type,
+ (long *)&pdu->reqid,
+ sizeof(pdu->reqid));
+ if (data == NULL)
return -1;
// get the error status
- data = asn1::parse_int(data,
- &length,
- &type,
- (long *)&pdu->errstat,
- sizeof(pdu->errstat));
- if (data == 0)
+ data = asn1::parse_int(data,
+ &length,
+ &type,
+ (long *)&pdu->errstat,
+ sizeof(pdu->errstat));
+ if (data == NULL)
return -1;
// get the error index
- data = asn1::parse_int(data,
- &length,
- &type,
- (long *)&pdu->errindex,
- sizeof(pdu->errindex));
- if (data == 0)
+ data = asn1::parse_int(data,
+ &length,
+ &type,
+ (long *)&pdu->errindex,
+ sizeof(pdu->errindex));
+ if (data == NULL)
return -1;
- }
+ }
else { // is a trap
// get the enterprise
pdu->enterprise_length = MAX_NAME_LEN;
- data = asn1::parse_objid(data,
- &length,
- &type,
- objid,
- &pdu->enterprise_length);
- if (data == 0)
+ data = asn1::parse_objid(data,
+ &length,
+ &type,
+ objid,
+ &pdu->enterprise_length);
+ if (data == NULL)
return -1;
- ACE_NEW_RETURN(pdu->enterprise,
+ ACE_NEW_RETURN(pdu->enterprise,
oid[pdu->enterprise_length*sizeof(oid)],-1);
// fixed
- ACE_OS::memcpy((char *)pdu->enterprise,(char *)objid,
+ ACE_OS::memcpy((char *)pdu->enterprise,(char *)objid,
pdu->enterprise_length * sizeof(oid));
// get source address
four = 4;
- data = asn1::parse_string(data, &length, &type,
- (u_char *)&pdu->agent_addr.sin_addr.s_addr,
- &four);
- if (data == 0)
+ data = asn1::parse_string(data, &length, &type,
+ (u_char *)&pdu->agent_addr.sin_addr.s_addr,
+ &four);
+ if (data == NULL)
return -1;
// get trap type
- data = asn1::parse_int(data, &length, &type, (long *)&pdu->trap_type,
- sizeof(pdu->trap_type));
- if (data == 0)
+ data = asn1::parse_int(data, &length, &type, (long *)&pdu->trap_type,
+ sizeof(pdu->trap_type));
+ if (data == NULL)
return -1;
// trap type
- data = asn1::parse_int(data, &length, &type, (long *)&pdu->specific_type,
- sizeof(pdu->specific_type));
- if (data == 0)
+ data = asn1::parse_int(data, &length, &type, (long *)&pdu->specific_type,
+ sizeof(pdu->specific_type));
+ if (data == NULL)
return -1;
// timestamp
- data = asn1::parse_int(data, &length, &type, (long *)&pdu->time,
+ data = asn1::parse_int(data, &length, &type, (long *)&pdu->time,
sizeof(pdu->time));
- if (data == 0)
+ if (data == NULL)
return -1;
}
// get the vb list
data = asn1::parse_header(data, &length, &type);
- if (data == 0)
+ if (data == NULL)
return -1;
if (type != (u_char)(ASN_SEQUENCE | ASN_CONSTRUCTOR))
return -1;
while((int)length > 0) {
- if (pdu->variables == 0) {
+ if (pdu->variables == NULL) {
ACE_NEW_RETURN(pdu->variables, variable_list, -1);
vp = pdu->variables;
} else {
ACE_NEW_RETURN(vp->next_variable, variable_list, -1);
vp = vp->next_variable;
}
- vp->next_variable = 0;
- vp->val.string = 0;
- vp->name = 0;
+ vp->next_variable = NULL;
+ vp->val.string = NULL;
+ vp->name = NULL;
vp->name_length = MAX_NAME_LEN;
- data = cmu_snmp::parse_var_op( data, objid,
- &vp->name_length, &vp->type,
- &vp->val_len, &var_val,
- (int *)&length);
- if (data == 0)
+ data = cmu_snmp::parse_var_op( data, objid,
+ &vp->name_length, &vp->type,
+ &vp->val_len, &var_val,
+ (int *)&length);
+ if (data == NULL)
return -1;
ACE_NEW_RETURN(op, oid[(unsigned)vp->name_length * sizeof(oid)], -1);
@@ -1688,16 +1688,16 @@ int cmu_snmp::parse( struct snmp_pdu *pdu,
ACE_NEW_RETURN(vp->val.counter64, counter64, -1);
vp->val_len = sizeof(struct counter64);
asn1::parse_unsigned_int64(var_val, &len, &vp->type,
- (struct counter64 *)vp->val.counter64,
- sizeof(*vp->val.counter64));
+ (struct counter64 *)vp->val.counter64,
+ sizeof(*vp->val.counter64));
break;
-
+
case ASN_OCTET_STR:
case SMI_IPADDRESS:
case SMI_OPAQUE:
case SMI_NSAP:
ACE_NEW_RETURN(vp->val.string, u_char[(unsigned)vp->val_len + 1], -1);
- asn1::parse_string(var_val, &len, &vp->type, vp->val.string,
+ asn1::parse_string(var_val, &len, &vp->type, vp->val.string,
&vp->val_len);
break;
@@ -1710,8 +1710,8 @@ int cmu_snmp::parse( struct snmp_pdu *pdu,
// fixed
ACE_OS::memcpy((char *)vp->val.objid,
- (char *)objid,
- vp->val_len * sizeof(oid));
+ (char *)objid,
+ vp->val_len * sizeof(oid));
break;
case SNMP_NOSUCHOBJECT:
@@ -1726,3 +1726,4 @@ int cmu_snmp::parse( struct snmp_pdu *pdu,
}
return 0;
}
+