diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2012-11-20 18:01:01 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-11-20 18:01:01 +0100 |
commit | a9953817d3f83b99f82f6ffb89d5d75d5648bbda (patch) | |
tree | bafe12e5070204479a85f9c0fbbaef466616378b /monitor/sdp.c | |
parent | 6986e5aa1f97115fedfe2d58ff12e1365ca6b52e (diff) | |
download | bluez-a9953817d3f83b99f82f6ffb89d5d75d5648bbda.tar.gz |
monitor: Handle UUID-32 and UUID-128 values
Diffstat (limited to 'monitor/sdp.c')
-rw-r--r-- | monitor/sdp.c | 41 |
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; } |