btio: Add support for getting the Encryption Key Size via btio

Some profiles specify some restriction depending on the length
of the key used to encrypt the link, this adds an way to retrieve
that value from the kernel.
This commit is contained in:
Vinicius Costa Gomes 2012-01-24 10:57:19 -03:00 committed by Marcel Holtmann
parent bdf5939520
commit 38c6525979
2 changed files with 20 additions and 0 deletions

View File

@ -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);

View File

@ -52,6 +52,7 @@ typedef enum {
BT_IO_OPT_DEST_BDADDR,
BT_IO_OPT_DEFER_TIMEOUT,
BT_IO_OPT_SEC_LEVEL,
BT_IO_OPT_KEY_SIZE,
BT_IO_OPT_CHANNEL,
BT_IO_OPT_SOURCE_CHANNEL,
BT_IO_OPT_DEST_CHANNEL,