diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index ee8b390..6747e03 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
return ntohl(get_unaligned(u32_ptr));
}
+static inline __u64 get_u64(struct frame *frm)
+{
+ __u64 *u64_ptr = frm->ptr;
+ __u64 u64 = get_unaligned(u64_ptr), tmp;
+ frm->ptr += 8;
+ frm->len -= 8;
+ tmp = ntohl(u64 & 0xffffffff);
+ u64 = (tmp << 32) | ntohl(u64 >> 32);
+ return u64;
+}
+
+static inline void get_u128(struct frame *frm, __u64 *l, __u64 *h)
+{
+ *h = get_u64(frm);
+ *l = get_u64(frm);
+}
+
char *get_uuid_name(int uuid);
void raw_dump(int level, struct frame *frm);
diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c
index 703895e..78ee0ce 100644
--- a/tools/parser/sdp.c
+++ b/tools/parser/sdp.c
*n = get_u16(frm); break;
case 4:
*n = get_u32(frm); break;
+ case 8:
+ *n = get_u64(frm); break;
}
} else {
*n = sdp_siz_idx_lookup_table[siz_idx].num_bytes;
static inline void print_int(__u8 de_type, int level, int n, struct frame *frm)
{
- __u64 val;
+ __u64 val, val2;
switch(de_type) {
case SDP_DE_UINT:
val = get_u32(frm);
break;
case 8: /* 64-bit */
- /* Not supported yet */
- val = 0;
+ val = get_u64(frm);
break;
+ case 16:/* 128-bit */
+ get_u128(frm, &val, &val2);
+ printf(" 0x%llx%llx", val, val2);
+ return;
default: /* syntax error */
printf(" err");
frm->ptr += n;
printf(" (%s)", s);
}
-static inline void print_string(int n, struct frame *frm)
+static inline void print_string(int n, struct frame *frm, const char *name)
{
char *s;
- printf(" str");
+ printf(" %s", name);
if ((s = malloc(n + 1))) {
strncpy(s, frm->ptr, n);
s[n] = '\0';
}
print_uuid(n, frm);
break;
+ case SDP_DE_URL:
case SDP_DE_STRING:
- print_string(n, frm);
+ print_string(n, frm, de_type == SDP_DE_URL? "url": "str");
break;
case SDP_DE_SEQ:
case SDP_DE_ALT:
print_des(de_type, level, n, frm, split);
break;
- case SDP_DE_URL:
- break;
}
}