Diff between e4d94344b4b7d98c368e35c77a52ab3e30bce5a4 and c6f8ad38cdd2cc2354906604886c5c98285c2560

Changed Files

File Additions Deletions Status
tools/parser/l2cap.c +1 -1 modified
tools/parser/parser.c +3 -1 modified
tools/parser/parser.h +42 -5 modified
tools/parser/sdp.c +2 -30 modified

Full Patch

diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c
index acf3fc1..26afacb 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<CID_TABLE_SIZE; i++)
 		if (table[i].cid == cid)
 			return table[i].psm;
-	return 0;
+	return parser.defpsm;
 }
 
 static inline void command_rej(int level, struct frame *frm)
diff --git a/tools/parser/parser.c b/tools/parser/parser.c
index 1a7377e..2260030 100644
--- a/tools/parser/parser.c
+++ b/tools/parser/parser.c
@@ -37,13 +37,15 @@
 
 struct parser_t parser;
 
-void init_parser(unsigned long flags, unsigned long filter)
+void init_parser(unsigned long flags, unsigned long filter,
+	unsigned int defpsm)
 {
 	if ((flags & DUMP_RAW) && !(flags & DUMP_TYPE_MASK))
 		flags |= DUMP_HEX;
 
 	parser.flags  = flags;
 	parser.filter = filter;
+	parser.defpsm = defpsm;
 	parser.state  = 0;
 }
 
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index cc2b282..f8137de 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
@@ -23,6 +23,11 @@
  * $Id$
  */
 
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <asm/types.h>
+#include <netinet/in.h>
+
 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 cdd1d28..c6fadd8 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;