aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Dieb Martins <andre.dieb@signove.com>2011-02-09 14:28:55 -0300
committerJohan Hedberg <johan.hedberg@nokia.com>2011-02-09 14:02:34 -0800
commit94d920177d4ee724bc34787f72d17b321efb0417 (patch)
treed5bad383d2c74234c5d712fe0b2415d81d357295
parent1bf899c50046aa30df16102b9825c972b3a9b56c (diff)
downloadhcidump-94d920177d4ee724bc34787f72d17b321efb0417.tar.gz
Add ATT read by type req/resp dump
-rw-r--r--parser/att.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/parser/att.c b/parser/att.c
index 887cdac..a0fb135 100644
--- a/parser/att.c
+++ b/parser/att.c
@@ -330,6 +330,54 @@ static void att_find_info_resp_dump(int level, struct frame *frm)
}
}
+static void att_read_by_type_req_dump(int level, struct frame *frm)
+{
+ uint16_t start = btohs(htons(get_u16(frm)));
+ uint16_t end = btohs(htons(get_u16(frm)));
+ int i;
+
+ p_indent(level, frm);
+ printf("start 0x%2.2x, end 0x%2.2x\n", start, end);
+
+ p_indent(level, frm);
+ if (frm->len == 2) {
+ printf("type-uuid 0x%2.2x\n", btohs(htons(get_u16(frm))));
+ } else if (frm->len == 16) {
+ printf("type-uuid ");
+ for (i = 0; i < 16; i++) {
+ printf("%02x", get_u8(frm));
+ if (i == 3 || i == 5 || i == 7 || i == 9)
+ printf("-");
+ }
+ printf("\n");
+ } else {
+ printf("malformed uuid (expected 2 or 16 octets)\n");
+ p_indent(level, frm);
+ raw_dump(level, frm);
+ }
+}
+
+static void att_read_by_type_resp_dump(int level, struct frame *frm)
+{
+ uint8_t length = get_u8(frm);
+
+ p_indent(level, frm);
+ printf("length: %d\n", length);
+
+ while (frm->len > 0) {
+ uint16_t handle = btohs(htons(get_u16(frm)));
+ int val_len = length - 2;
+ int i;
+
+ p_indent(level + 1, frm);
+ printf("handle 0x%2.2x, value ", handle);
+ for (i = 0; i < val_len; i++) {
+ printf("0x%.2x ", get_u8(frm));
+ }
+ printf("\n");
+ }
+}
+
static void att_read_req_dump(int level, struct frame *frm)
{
uint16_t handle = btohs(htons(get_u16(frm)));
@@ -378,6 +426,12 @@ void att_dump(int level, struct frame *frm)
case ATT_OP_FIND_INFO_RESP:
att_find_info_resp_dump(level + 1, frm);
break;
+ case ATT_OP_READ_BY_TYPE_REQ:
+ att_read_by_type_req_dump(level + 1, frm);
+ break;
+ case ATT_OP_READ_BY_TYPE_RESP:
+ att_read_by_type_resp_dump(level + 1, frm);
+ break;
case ATT_OP_READ_REQ:
att_read_req_dump(level + 1, frm);
break;