diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2009-01-16 13:20:07 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2009-01-16 13:20:07 +0200 |
commit | f6646fcfe84b703d0657a0e827682702d64a4788 (patch) | |
tree | d9e2502a9351f277346dce9560f2eee79d296b8b | |
parent | b5fe14e46c4351fe582f009de2f0b6d6834566e5 (diff) |
Require MITM for dedicated bonding if the remote side is capable of it
-rw-r--r-- | src/dbus-hci.c | 10 | ||||
-rw-r--r-- | src/device.c | 5 | ||||
-rw-r--r-- | src/device.h | 1 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/dbus-hci.c b/src/dbus-hci.c index 994e25cc..e340d4e9 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -1277,8 +1277,14 @@ int hcid_dbus_get_io_cap(bdaddr_t *local, bdaddr_t *remote, if (*auth == 0x00) { /* If remote requests dedicated bonding follow that lead */ if (device_get_auth(device) == 0x02 || - device_get_auth(device) == 0x03) - *auth = 0x02; + device_get_auth(device) == 0x03) { + /* If the remote has NoInputNoOutput then don't require + * MITM, otherwise require it */ + if (device_get_cap(device) == 0x03) + *auth = 0x02; + else + *auth = 0x03; + } /* If remote requires MITM then also require it */ if (device_get_auth(device) & 0x01) diff --git a/src/device.c b/src/device.c index 0ae81a02..7b3131ff 100644 --- a/src/device.c +++ b/src/device.c @@ -1380,6 +1380,11 @@ void device_set_cap(struct btd_device *device, uint8_t cap) device->cap = cap; } +uint8_t device_get_cap(struct btd_device *device) +{ + return device->cap; +} + void device_set_auth(struct btd_device *device, uint8_t auth) { if (!device) diff --git a/src/device.h b/src/device.h index 75119e12..f3a5cea0 100644 --- a/src/device.h +++ b/src/device.h @@ -54,6 +54,7 @@ gboolean device_is_busy(struct btd_device *device); gboolean device_is_temporary(struct btd_device *device); void device_set_temporary(struct btd_device *device, gboolean temporary); void device_set_cap(struct btd_device *device, uint8_t cap); +uint8_t device_get_cap(struct btd_device *device); void device_set_auth(struct btd_device *device, uint8_t auth); uint8_t device_get_auth(struct btd_device *device); gboolean device_is_connected(struct btd_device *device); |