Diff between 4c92cfb6480559d4dee3b8e21c19f77d21840ad4 and bf0b30d964f6a48ac67e4bc56b159c2b38d5b64c

Changed Files

File Additions Deletions Status
src/adapter.c +52 -0 modified
src/mgmt.c +2 -46 modified

Full Patch

diff --git a/src/adapter.c b/src/adapter.c
index b12dd33..c7c0ce0 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4899,6 +4899,48 @@ static void connected_callback(uint16_t index, uint16_t length,
 	eir_data_free(&eir_data);
 }
 
+static void device_blocked_callback(uint16_t index, uint16_t length,
+					const void *param, void *user_data)
+{
+	const struct mgmt_ev_device_blocked *ev = param;
+	struct btd_adapter *adapter = user_data;
+	struct btd_device *device;
+	char addr[18];
+
+	if (length < sizeof(*ev)) {
+		error("Too small device blocked event");
+		return;
+	}
+
+	ba2str(&ev->addr.bdaddr, addr);
+	DBG("hci%u %s blocked", index, addr);
+
+	device = adapter_find_device(adapter, addr);
+	if (device)
+		device_block(device, TRUE);
+}
+
+static void device_unblocked_callback(uint16_t index, uint16_t length,
+					const void *param, void *user_data)
+{
+	const struct mgmt_ev_device_unblocked *ev = param;
+	struct btd_adapter *adapter = user_data;
+	struct btd_device *device;
+	char addr[18];
+
+	if (length < sizeof(*ev)) {
+		error("Too small device unblocked event");
+		return;
+	}
+
+	ba2str(&ev->addr.bdaddr, addr);
+	DBG("hci%u %s unblocked", index, addr);
+
+	device = adapter_find_device(adapter, addr);
+	if (device)
+		device_unblock(device, FALSE, TRUE);
+}
+
 static void connect_failed_callback(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
@@ -5073,6 +5115,16 @@ static void read_info_complete(uint8_t status, uint16_t length,
 						adapter->dev_id,
 						new_long_term_key_callback,
 						adapter, NULL);
+
+	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_BLOCKED,
+						adapter->dev_id,
+						device_blocked_callback,
+						adapter, NULL);
+	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNBLOCKED,
+						adapter->dev_id,
+						device_unblocked_callback,
+						adapter, NULL);
+
 	set_dev_class(adapter, adapter->major_class, adapter->minor_class);
 
 	set_name(adapter, btd_adapter_get_name(adapter));
diff --git a/src/mgmt.c b/src/mgmt.c
index f119fff..4dff8cd 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -380,50 +380,6 @@ static void mgmt_cmd_status(uint16_t index, void *buf, size_t len)
 			ev->status);
 }
 
-static void mgmt_device_blocked(uint16_t index, void *buf, size_t len)
-{
-	struct btd_adapter *adapter;
-	struct btd_device *device;
-	struct mgmt_ev_device_blocked *ev = buf;
-	char addr[18];
-
-	if (len < sizeof(*ev)) {
-		error("Too small mgmt_device_blocked event packet");
-		return;
-	}
-
-	ba2str(&ev->addr.bdaddr, addr);
-	DBG("Device blocked, index %u, addr %s", index, addr);
-
-	if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, false))
-		return;
-
-	if (device)
-		device_block(device, TRUE);
-}
-
-static void mgmt_device_unblocked(uint16_t index, void *buf, size_t len)
-{
-	struct btd_adapter *adapter;
-	struct btd_device *device;
-	struct mgmt_ev_device_unblocked *ev = buf;
-	char addr[18];
-
-	if (len < sizeof(*ev)) {
-		error("Too small mgmt_device_unblocked event packet");
-		return;
-	}
-
-	ba2str(&ev->addr.bdaddr, addr);
-	DBG("Device unblocked, index %u, addr %s", index, addr);
-
-	if (!get_adapter_and_device(index, &ev->addr, &adapter, &device, false))
-		return;
-
-	if (device)
-		device_unblock(device, FALSE, TRUE);
-}
-
 static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond,
 							gpointer user_data)
 {
@@ -514,10 +470,10 @@ static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond,
 		DBG("discovering event");
 		break;
 	case MGMT_EV_DEVICE_BLOCKED:
-		mgmt_device_blocked(index, buf + MGMT_HDR_SIZE, len);
+		DBG("device_blocked event");
 		break;
 	case MGMT_EV_DEVICE_UNBLOCKED:
-		mgmt_device_unblocked(index, buf + MGMT_HDR_SIZE, len);
+		DBG("device_unblocked event");
 		break;
 	case MGMT_EV_DEVICE_UNPAIRED:
 		DBG("device_unpaired event");