aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaikumar Ganesh <jaikumar@google.com>2011-07-26 18:26:53 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-07-26 18:26:53 -0700
commit492a85adb19817e840967b052d9dc02e6fb34aac (patch)
tree26d6ceeafaf381644c1efb1353141c25e843d671
parentffaf795f0242a879ca6eaef903675e1da79d7dea (diff)
parent3e28ead202ff45d0fd66876f6a9cd3e8c3dbf42e (diff)
downloadbluez-492a85adb19817e840967b052d9dc02e6fb34aac.tar.gz
Merge "Fix unpair device when disconnected for No Bonding"
-rw-r--r--src/device.c19
-rw-r--r--src/device.h1
-rw-r--r--src/event.c8
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;
}