diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2011-07-26 18:26:53 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-26 18:26:53 -0700 |
commit | 492a85adb19817e840967b052d9dc02e6fb34aac (patch) | |
tree | 26d6ceeafaf381644c1efb1353141c25e843d671 | |
parent | ffaf795f0242a879ca6eaef903675e1da79d7dea (diff) | |
parent | 3e28ead202ff45d0fd66876f6a9cd3e8c3dbf42e (diff) | |
download | bluez-492a85adb19817e840967b052d9dc02e6fb34aac.tar.gz |
Merge "Fix unpair device when disconnected for No Bonding"
-rw-r--r-- | src/device.c | 19 | ||||
-rw-r--r-- | src/device.h | 1 | ||||
-rw-r--r-- | src/event.c | 8 |
3 files changed, 25 insertions, 3 deletions
diff --git a/src/device.c b/src/device.c index fba43d9d..8805c27b 100644 --- a/src/device.c +++ b/src/device.c @@ -132,6 +132,7 @@ struct btd_device { gboolean trusted; gboolean paired; gboolean blocked; + gboolean bonded; gboolean authorizing; gint ref; @@ -896,6 +897,9 @@ void device_remove_connection(struct btd_device *device, DBusConnection *conn) device->disconnects = g_slist_remove(device->disconnects, msg); } + if (device_is_paired(device) && !device->bonded) + device_set_paired(device, FALSE); + emit_property_changed(conn, device->path, DEVICE_INTERFACE, "Connected", DBUS_TYPE_BOOLEAN, &device->connected); @@ -978,8 +982,10 @@ struct btd_device *device_create(DBusConnection *conn, if (read_blocked(&src, &device->bdaddr)) device_block(conn, device); - if (read_link_key(&src, &device->bdaddr, NULL, NULL) == 0) + if (read_link_key(&src, &device->bdaddr, NULL, NULL) == 0) { device->paired = TRUE; + device_set_bonded(device, TRUE); + } return btd_device_ref(device); } @@ -1030,6 +1036,7 @@ void device_remove_bonding(struct btd_device *device) /* Delete the link key from storage */ textfile_casedel(filename, dstaddr); + device_set_bonded(device, FALSE); btd_adapter_remove_bonding(device->adapter, &device->bdaddr); } @@ -1859,6 +1866,16 @@ void device_set_temporary(struct btd_device *device, gboolean temporary) device->temporary = temporary; } +void device_set_bonded(struct btd_device *device, gboolean bonded) +{ + if (!device) + return; + + DBG("bonded %d", bonded); + + device->bonded = bonded; +} + void device_set_type(struct btd_device *device, device_type_t type) { if (!device) diff --git a/src/device.h b/src/device.h index 17d9a3e2..11ab7c7a 100644 --- a/src/device.h +++ b/src/device.h @@ -74,6 +74,7 @@ gboolean device_is_trusted(struct btd_device *device); void device_set_paired(struct btd_device *device, gboolean paired); void device_set_temporary(struct btd_device *device, gboolean temporary); void device_set_type(struct btd_device *device, device_type_t type); +void device_set_bonded(struct btd_device *device, gboolean bonded); gboolean device_is_connected(struct btd_device *device); DBusMessage *device_create_bonding(struct btd_device *device, DBusConnection *conn, DBusMessage *msg, diff --git a/src/event.c b/src/event.c index 7f3e3573..cc9e99e0 100644 --- a/src/event.c +++ b/src/event.c @@ -451,8 +451,12 @@ int btd_event_link_key_notify(bdaddr_t *local, bdaddr_t *peer, ret = write_link_key(local, peer, key, key_type, pin_length); - if (ret == 0 && device_is_temporary(device)) - device_set_temporary(device, FALSE); + if (ret == 0) { + device_set_bonded(device, TRUE); + + if (device_is_temporary(device)) + device_set_temporary(device, FALSE); + } return ret; } |