From 0e15714faae98a3872902e15421cde39215b4178 Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Mon, 23 Sep 2002 13:40:42 +0000 Subject: [PATCH] hcidump: support attrs url, 64-, 128-bit ints --- tools/parser/parser.h | 17 +++++++++++++++++ tools/parser/sdp.c | 20 ++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/tools/parser/parser.h b/tools/parser/parser.h index ee8b39003..6747e039d 100644 --- a/tools/parser/parser.h +++ b/tools/parser/parser.h @@ -128,6 +128,23 @@ static inline __u32 get_u32(struct frame *frm) 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 703895ec8..78ee0ced2 100644 --- a/tools/parser/sdp.c +++ b/tools/parser/sdp.c @@ -164,6 +164,8 @@ static inline __u8 parse_de_hdr(struct frame *frm, int* n) *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; @@ -174,7 +176,7 @@ static inline __u8 parse_de_hdr(struct frame *frm, int* n) 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: @@ -199,9 +201,12 @@ static inline void print_int(__u8 de_type, int level, int n, struct frame *frm) 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; @@ -241,11 +246,11 @@ static inline void print_uuid(int n, struct frame *frm) 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'; @@ -291,15 +296,14 @@ static inline void print_de(int level, struct frame *frm, int *split) } 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; } } -- 2.47.3