diff --git a/src/device.c b/src/device.c
index 82759a4..0230203 100644
--- a/src/device.c
+++ b/src/device.c
gboolean trusted;
gboolean paired;
gboolean blocked;
+ gboolean bonded;
gboolean authorizing;
gint ref;
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);
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);
}
/* Delete the link key from storage */
textfile_casedel(filename, dstaddr);
+ device_set_bonded(device, FALSE);
create_name(filename, PATH_MAX, STORAGEDIR, srcaddr,
"aliases");
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 bd8a431..18b21ae 100644
--- a/src/device.h
+++ b/src/device.h
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 86a413e..d5462f6 100644
--- a/src/event.c
+++ b/src/event.c
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;
}