diff options
Diffstat (limited to 'btio/btio.c')
-rw-r--r-- | btio/btio.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/btio/btio.c b/btio/btio.c index a45a9cc3..77ddb1df 100644 --- a/btio/btio.c +++ b/btio/btio.c @@ -511,6 +511,21 @@ static int set_priority(int sock, uint32_t prio) return 0; } +static gboolean get_key_size(int sock, int *size, GError **err) +{ + struct bt_security sec; + socklen_t len; + + memset(&sec, 0, sizeof(sec)); + len = sizeof(sec); + if (getsockopt(sock, SOL_BLUETOOTH, BT_SECURITY, &sec, &len) == 0) { + *size = sec.key_size; + return TRUE; + } + + return FALSE; +} + static gboolean l2cap_set(int sock, int sec_level, uint16_t imtu, uint16_t omtu, uint8_t mode, int master, int flushable, uint32_t priority, GError **err) @@ -875,6 +890,10 @@ static gboolean l2cap_get(int sock, GError **err, BtIOOption opt1, va_arg(args, int *), err)) return FALSE; break; + case BT_IO_OPT_KEY_SIZE: + if (!get_key_size(sock, va_arg(args, int *), err)) + return FALSE; + break; case BT_IO_OPT_PSM: *(va_arg(args, uint16_t *)) = src.l2_psm ? btohs(src.l2_psm) : btohs(dst.l2_psm); |