OSDN Git Service

core: Fix creating 128-bit uuid_t based on GATT service
authorClaudio Takahasi <claudio.takahasi@openbossa.org>
Mon, 24 Mar 2014 19:25:42 +0000 (16:25 -0300)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 24 Mar 2014 20:18:34 +0000 (22:18 +0200)
sdp_uuid128_create() gets the 128-bit UUID on big-endian (human-readable
format) byte order. Service declaration attributes puts the UUIDs in the
attribute value field using little endian order. This patch converts the
128-bit UUID from little-endian to big-endian before creating uuid_t.

src/attrib-server.c

index 953a3f2..114c8a1 100644 (file)
@@ -318,9 +318,13 @@ static uint32_t attrib_create_sdp_new(struct gatt_server *server,
 
        if (a->len == 2)
                sdp_uuid16_create(&svc, get_le16(a->data));
-       else if (a->len == 16)
-               sdp_uuid128_create(&svc, a->data);
-       else
+       else if (a->len == 16) {
+               uint8_t be128[16];
+
+               /* Converting from LE to BE */
+               bswap_128(a->data, be128);
+               sdp_uuid128_create(&svc, be128);
+       } else
                return 0;
 
        record = server_record_new(&svc, handle, end);