summaryrefslogtreecommitdiff
path: root/monitor/sdp.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-11-20 18:01:01 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-11-20 18:01:01 +0100
commita9953817d3f83b99f82f6ffb89d5d75d5648bbda (patch)
treebafe12e5070204479a85f9c0fbbaef466616378b /monitor/sdp.c
parent6986e5aa1f97115fedfe2d58ff12e1365ca6b52e (diff)
downloadbluez-a9953817d3f83b99f82f6ffb89d5d75d5648bbda.tar.gz
monitor: Handle UUID-32 and UUID-128 values
Diffstat (limited to 'monitor/sdp.c')
-rw-r--r--monitor/sdp.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/monitor/sdp.c b/monitor/sdp.c
index 2cdcf00c3..805e37e0a 100644
--- a/monitor/sdp.c
+++ b/monitor/sdp.c
@@ -53,9 +53,17 @@ static void print_uint(uint8_t indent, const uint8_t *data, uint32_t size)
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) {
@@ -63,6 +71,28 @@ static void print_uuid(uint8_t indent, const uint8_t *data, uint32_t 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;
}
}
@@ -72,6 +102,11 @@ static void print_string(uint8_t indent, const uint8_t *data, uint32_t size)
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;
@@ -81,10 +116,10 @@ static struct {
} 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 },
@@ -174,6 +209,7 @@ static void decode_data_elements(uint8_t indent,
if (size < 1 + (extrabits / 8)) {
print_text(COLOR_ERROR, "data element descriptor too short");
+ packet_hexdump(data, size);
return;
}
@@ -181,6 +217,7 @@ static void decode_data_elements(uint8_t indent,
if (size < 1 + (extrabits / 8) + datalen) {
print_text(COLOR_ERROR, "data element size too short");
+ packet_hexdump(data, size);
return;
}