Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void parser::disassemble (char *packet, const char *fmt, ...)
- {
- char mode;
- va_list vl;
- va_start(vl, fmt);
- while (*fmt) {
- mode = *fmt++;
- if (mode == U8) {
- uint8_t *val = va_arg(vl, uint8_t *);
- *val = *packet++;
- } else if (mode == S8) {
- int8_t *val = va_arg(vl, int8_t *);
- *val = *packet++;
- } else if (mode == BE16) {
- int16_t *val = va_arg(vl, int16_t *);
- memcpy(val, packet, sizeof(int16_t));
- *val = htons(*val);
- packet += sizeof(int16_t);
- } else if (mode == STRING) {
- uint8_t *val = va_arg(vl, uint8_t *);
- int i;
- for (i = 0; i < 64; i++) {
- if (*packet == '&')
- packet += 2;
- *val++ = *packet++;
- } *(val - 1) = 0;
- } else if (mode == WORD) {
- uint8_t *val = va_arg(vl, uint8_t *);
- int i;
- for (i = 0; i < 64; i++) {
- if (*packet == ' ')
- break;
- *val++ = *packet++;
- } *val = 0;
- } else if (mode == ARRAY) {
- uint8_t *val = va_arg(vl, uint8_t *);
- memcpy(val, packet, 1024);
- packet += 1024;
- } else {
- break;
- }
- }
- va_end(vl);
- }
Advertisement
Add Comment
Please, Sign In to add comment