From: Michael Brudevold <michael.brudevold@xxxxxxxxxxxxxxxxxxxx> --- src/eir.c | 21 +++++++++++++++++++++ src/eir.h | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/src/eir.c b/src/eir.c index 2f9ee036f..fabfd6402 100644 --- a/src/eir.c +++ b/src/eir.c @@ -342,6 +342,15 @@ void eir_parse(struct eir_data *eir, const uint8_t *eir_data, uint8_t eir_len) eir->did_version = data[6] | (data[7] << 8); break; + case EIR_LE_DEVICE_ADDRESS: + if (data_len < sizeof(bdaddr_t) + 1) + break; + + memcpy(&eir->addr, data, sizeof(bdaddr_t)); + eir->addr_type = data[sizeof(bdaddr_t)] & 0x1 ? + BDADDR_LE_RANDOM : BDADDR_LE_PUBLIC; + break; + case EIR_SVC_DATA16: eir_parse_uuid16_data(eir, data, data_len); break; @@ -354,6 +363,18 @@ void eir_parse(struct eir_data *eir, const uint8_t *eir_data, uint8_t eir_len) eir_parse_uuid128_data(eir, data, data_len); break; + case EIR_LE_SC_CONF: + if (data_len < 16) + break; + eir->hash = util_memdup(data, 16); + break; + + case EIR_LE_SC_RAND: + if (data_len < 16) + break; + eir->randomizer = util_memdup(data, 16); + break; + case EIR_MANUFACTURER_DATA: eir_parse_msd(eir, data, data_len); break; diff --git a/src/eir.h b/src/eir.h index 6154e23ec..241e6fac9 100644 --- a/src/eir.h +++ b/src/eir.h @@ -33,9 +33,12 @@ #define EIR_PUB_TRGT_ADDR 0x17 /* LE: Public Target Address */ #define EIR_RND_TRGT_ADDR 0x18 /* LE: Random Target Address */ #define EIR_GAP_APPEARANCE 0x19 /* GAP appearance */ +#define EIR_LE_DEVICE_ADDRESS 0x1B /* LE: Bluetooth Device Address */ #define EIR_SOLICIT32 0x1F /* LE: Solicit UUIDs, 32-bit */ #define EIR_SVC_DATA32 0x20 /* LE: Service data, 32-bit UUID */ #define EIR_SVC_DATA128 0x21 /* LE: Service data, 128-bit UUID */ +#define EIR_LE_SC_CONF 0x22 /* LE: Secure Connections Confirmation Value */ +#define EIR_LE_SC_RAND 0x23 /* LE: Secure Connections Random Value */ #define EIR_TRANSPORT_DISCOVERY 0x26 /* Transport Discovery Service */ #define EIR_MANUFACTURER_DATA 0xFF /* Manufacturer Specific Data */ @@ -80,6 +83,7 @@ struct eir_data { uint8_t *hash; uint8_t *randomizer; bdaddr_t addr; + uint8_t addr_type; uint16_t did_vendor; uint16_t did_product; uint16_t did_version; -- 2.25.1