*
* Copyright 2002 Project Purple
*
- * $Id: parsekey.c,v 1.17 2003/10/11 21:52:18 noodles Exp $
+ * $Id: parsekey.c,v 1.20 2004/05/27 21:55:38 noodles Exp $
*/
#include <assert.h>
curpacket->packet->length = curchar;
curpacket->packet->length <<= 8;
rc = getchar_func(ctx, 1, &curchar);
- curpacket->packet->length = curchar;
+ curpacket->packet->length += curchar;
curpacket->packet->length <<= 8;
rc = getchar_func(ctx, 1, &curchar);
- curpacket->packet->length = curchar;
+ curpacket->packet->length += curchar;
curpacket->packet->length <<= 8;
rc = getchar_func(ctx, 1, &curchar);
- curpacket->packet->length = curchar;
+ curpacket->packet->length += curchar;
}
} else {
curpacket->packet->tag = (curchar & 0x3C) >> 2;
} else {
logthing(LOGTHING_ERROR, "Unexpected character: 0x%X",
curchar);
+ rc = 1;
}
}
curchar = (packets->packet->length - 192) &
0xFF;
putchar_func(ctx, 1, &curchar);
+ } else if (packets->packet->length > 8382 &&
+ packets->packet->length < 0xFFFFFFFF) {
+ logthing(LOGTHING_DEBUG,
+ "Writing 5 byte length");
+ curchar = 255;
+ putchar_func(ctx, 1, &curchar);
+
+ curchar = (packets->packet->length >> 24);
+ curchar &= 0xFF;
+ putchar_func(ctx, 1, &curchar);
+
+ curchar = (packets->packet->length >> 16);
+ curchar &= 0xFF;
+ putchar_func(ctx, 1, &curchar);
+
+ curchar = (packets->packet->length >> 8);
+ curchar &= 0xFF;
+ putchar_func(ctx, 1, &curchar);
+
+ curchar = packets->packet->length;
+ curchar &= 0xFF;
+ putchar_func(ctx, 1, &curchar);
} else {
logthing(LOGTHING_ERROR,
"Unsupported new format length.");