diff --git a/monitor/sdp.c b/monitor/sdp.c
index 2cdcf00..805e37e 100644
--- a/monitor/sdp.c
+++ b/monitor/sdp.c
case 4:
print_field("%*c0x%8.8x", indent, ' ', bt_get_be32(data));
break;
+ default:
+ packet_hexdump(data, size);
+ break;
}
}
+static void print_sint(uint8_t indent, const uint8_t *data, uint32_t size)
+{
+ packet_hexdump(data, size);
+}
+
static void print_uuid(uint8_t indent, const uint8_t *data, uint32_t size)
{
switch (size) {
print_field("%*c%s (0x%4.4x)", indent, ' ',
uuid16_to_str(bt_get_be16(data)), bt_get_be16(data));
break;
+ case 4:
+ print_field("%*c%s (0x%8.8x)", indent, ' ',
+ uuid32_to_str(bt_get_be32(data)), bt_get_be32(data));
+ break;
+ case 16:
+ /* BASE_UUID = 00000000-0000-1000-8000-00805F9B34FB */
+ print_field("%*c%8.8x-%4.4x-%4.4x-%4.4x-%4.4x%8.4x",
+ indent, ' ',
+ bt_get_be32(data), bt_get_be16(data + 4),
+ bt_get_be16(data + 6), bt_get_be16(data + 8),
+ bt_get_be16(data + 10), bt_get_be32(data + 12));
+ if (bt_get_be16(data + 4) == 0x0000 &&
+ bt_get_be16(data + 6) == 0x1000 &&
+ bt_get_be16(data + 8) == 0x8000 &&
+ bt_get_be16(data + 10) == 0x0080 &&
+ bt_get_be32(data + 12) == 0x5F9B34FB)
+ print_field("%*c%s", indent, ' ',
+ uuid32_to_str(bt_get_be32(data)));
+ break;
+ default:
+ packet_hexdump(data, size);
+ break;
}
}
print_field("%*c%s [len %d]", indent, ' ', str, size);
}
+static void print_boolean(uint8_t indent, const uint8_t *data, uint32_t size)
+{
+ print_field("%*c%s", indent, ' ', data[0] ? "true" : "false");
+}
+
static struct {
uint8_t value;
uint8_t *sizes;
} type_table[] = {
{ 0, SIZES(0), false, "Nil" },
{ 1, SIZES(0, 1, 2, 3, 4), false, "Unsigned Integer", print_uint },
- { 2, SIZES(0, 1, 2, 3, 4), false, "Signed Integer" },
+ { 2, SIZES(0, 1, 2, 3, 4), false, "Signed Integer", print_sint },
{ 3, SIZES(1, 2, 4), false, "UUID", print_uuid },
{ 4, SIZES(5, 6, 7), false, "String", print_string },
- { 5, SIZES(0), false, "Boolean" },
+ { 5, SIZES(0), false, "Boolean", print_boolean },
{ 6, SIZES(5, 6, 7), true, "Sequence" },
{ 7, SIZES(5, 6, 7), true, "Alternative" },
{ 8, SIZES(5, 6, 7), false, "URL", print_string },
if (size < 1 + (extrabits / 8)) {
print_text(COLOR_ERROR, "data element descriptor too short");
+ packet_hexdump(data, size);
return;
}
if (size < 1 + (extrabits / 8) + datalen) {
print_text(COLOR_ERROR, "data element size too short");
+ packet_hexdump(data, size);
return;
}
diff --git a/monitor/uuid.c b/monitor/uuid.c
index 8ba58c1..c348e17 100644
--- a/monitor/uuid.c
+++ b/monitor/uuid.c
return "Unknown";
}
+
+const char *uuid32_to_str(uint32_t uuid)
+{
+ if ((uuid & 0xffff0000) == 0x0000)
+ return uuid16_to_str(uuid & 0x0000ffff);
+
+ return "Unknown";
+}
diff --git a/monitor/uuid.h b/monitor/uuid.h
index 30769cd..f118cb3 100644
--- a/monitor/uuid.h
+++ b/monitor/uuid.h
#include <stdint.h>
const char *uuid16_to_str(uint16_t uuid);
+const char *uuid32_to_str(uint32_t uuid);