diff --git a/lib/mgmt.h b/lib/mgmt.h
index f45321c..3578ecd 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
#define MGMT_EV_USER_CONFIRM_REQUEST 0x000F
struct mgmt_ev_user_confirm_request {
bdaddr_t bdaddr;
+ uint8_t confirm_hint;
uint32_t value;
} __packed;
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index bb53e82..be94267 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
return 0;
}
+struct confirm_data {
+ int index;
+ bdaddr_t bdaddr;
+};
+
+static gboolean confirm_accept(gpointer user_data)
+{
+ struct confirm_data *data = user_data;
+ struct controller_info *info = &controllers[data->index];
+
+ DBG("auto-accepting incoming pairing request");
+
+ if (data->index > max_index || !info->valid)
+ return FALSE;
+
+ mgmt_confirm_reply(data->index, &data->bdaddr, TRUE);
+
+ return FALSE;
+}
+
static void mgmt_user_confirm_request(int sk, uint16_t index, void *buf,
size_t len)
{
ba2str(&ev->bdaddr, addr);
- DBG("hci%u %s", index, addr);
+ DBG("hci%u %s confirm_hint %u", index, addr, ev->confirm_hint);
if (index > max_index) {
error("Unexpected index %u in user_confirm_request event",
return;
}
+ if (ev->confirm_hint) {
+ struct confirm_data *data;
+
+ data = g_new0(struct confirm_data, 1);
+ data->index = index;
+ bacpy(&data->bdaddr, &ev->bdaddr);
+
+ g_timeout_add_seconds_full(G_PRIORITY_DEFAULT, 1,
+ confirm_accept, data, g_free);
+ return;
+ }
+
info = &controllers[index];
err = btd_event_user_confirm(&info->bdaddr, &ev->bdaddr,