From c6f8ad38cdd2cc2354906604886c5c98285c2560 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Mon, 22 Apr 2002 21:47:48 +0000 Subject: [PATCH] hcidump: Support for default PSM. Cleanup. --- tools/parser/l2cap.c | 2 +- tools/parser/parser.c | 4 +++- tools/parser/parser.h | 47 ++++++++++++++++++++++++++++++++++++++----- tools/parser/sdp.c | 32 ++--------------------------- 4 files changed, 48 insertions(+), 37 deletions(-) diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c index acf3fc1e8..26afacb2a 100644 --- a/tools/parser/l2cap.c +++ b/tools/parser/l2cap.c @@ -126,7 +126,7 @@ static __u16 get_psm(int in, __u16 cid) for (i=0; i +#include +#include +#include + struct frame { void *data; int data_len; @@ -51,15 +56,24 @@ struct frame { #define FILT_SCO 0x0010 #define FILT_BNEP 0x0020 + +#define STRUCT_OFFSET(type, member) ((uint8_t *)&(((type *)NULL)->member) - \ + (uint8_t *)((type *)NULL)) + +#define STRUCT_END(type, member) (STRUCT_OFFSET(type, member) + \ + sizeof(((type *)NULL)->member)) + struct parser_t { unsigned long flags; unsigned long filter; + unsigned int defpsm; int state; }; extern struct parser_t parser; -void init_parser(unsigned long flags, unsigned long filter); +void init_parser(unsigned long flags, unsigned long filter, + unsigned int assume_psm); static inline int p_filter(unsigned long f) { @@ -85,10 +99,33 @@ static inline void p_indent(int level, struct frame *f) printf("%*c", (level*2), ' '); } -inline __u8 get_u8(struct frame *frm); -inline __u16 get_u16(struct frame *frm); -inline __u32 get_u32(struct frame *frm); -inline char* get_uuid_name(int uuid); +/* get_uXX functions do byte swaping */ + +static inline __u8 get_u8(struct frame *frm) +{ + __u8 *u8_ptr = frm->ptr; + frm->ptr += 1; + frm->len -= 1; + return *u8_ptr; +} + +static inline __u16 get_u16(struct frame *frm) +{ + __u16 *u16_ptr = frm->ptr; + frm->ptr += 2; + frm->len -= 2; + return ntohs(*u16_ptr); +} + +static inline __u32 get_u32(struct frame *frm) +{ + __u32 *u32_ptr = frm->ptr; + frm->ptr += 4; + frm->len -= 4; + return ntohl(*u32_ptr); +} + +char *get_uuid_name(int uuid); void raw_dump(int level, struct frame *frm); void hci_dump(int level, struct frame *frm); diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c index cdd1d28f9..c6fadd8be 100644 --- a/tools/parser/sdp.c +++ b/tools/parser/sdp.c @@ -127,41 +127,13 @@ sdp_attr_id_nam_lookup_table_t sdp_attr_id_nam_lookup_table[] = { { SDP_ATTR_ID_IPV6_SUBNET, "IPv6Subnet" } /* PAN */ }; -inline __u8 get_u8(struct frame *frm) -{ - __u8 *u8_ptr = frm->ptr; - frm->ptr += 1; - frm->len -= 1; - return *u8_ptr; -} - -inline __u16 get_u16(struct frame *frm) -{ - __u16 *u16_ptr = frm->ptr; - frm->ptr += 2; - frm->len -= 2; - return ntohs(*u16_ptr); -} - -inline __u32 get_u32(struct frame *frm) -{ - __u32 *u32_ptr = frm->ptr; - frm->ptr += 4; - frm->len -= 4; - return ntohl(*u32_ptr); -} - - -inline char* get_uuid_name(int uuid) +char* get_uuid_name(int uuid) { int i; - for (i = 0; i < SDP_UUID_NAM_LOOKUP_TABLE_SIZE; i++) - { + for (i = 0; i < SDP_UUID_NAM_LOOKUP_TABLE_SIZE; i++) { if (sdp_uuid_nam_lookup_table[i].uuid == uuid) - { return sdp_uuid_nam_lookup_table[i].name; - } } return 0; -- 2.47.3