Move PIN code storage access to core daemon
diff --git a/plugins/hciops.c b/plugins/hciops.c
index 56ce978..b8bf00e 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -870,51 +870,18 @@
 static void pin_code_request(int index, bdaddr_t *dba)
 {
 	struct dev_info *dev = &devs[index];
-	pin_code_reply_cp pr;
-	struct hci_conn_info_req *cr;
-	struct hci_conn_info *ci;
-	char da[18], pin[17];
-	int pinlen;
+	char addr[18];
+	int err;
 
-	memset(&pr, 0, sizeof(pr));
-	bacpy(&pr.bdaddr, dba);
+	ba2str(dba, addr);
+	DBG("hci%d PIN request for %s", index, addr);
 
-	ba2str(dba, da);
-	DBG("hci%d PIN request for %s", index, da);
-
-	cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
-
-	bacpy(&cr->bdaddr, dba);
-	cr->type = ACL_LINK;
-	if (ioctl(dev->sk, HCIGETCONNINFO, (unsigned long) cr) < 0) {
-		error("Can't get conn info: %s (%d)", strerror(errno), errno);
-		goto reject;
+	err = btd_event_request_pin(&dev->bdaddr, dba);
+	if (err < 0) {
+		error("PIN code negative reply: %s", strerror(-err));
+		hci_send_cmd(dev->sk, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY,
+								6, dba);
 	}
-	ci = cr->conn_info;
-
-	memset(pin, 0, sizeof(pin));
-	pinlen = read_pin_code(&dev->bdaddr, dba, pin);
-
-	if (pinlen > 0) {
-		dev->pin_length = pinlen;
-		memcpy(pr.pin_code, pin, pinlen);
-		pr.pin_len = pinlen;
-		hci_send_cmd(dev->sk, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
-						PIN_CODE_REPLY_CP_SIZE, &pr);
-	} else {
-		/* Request PIN from passkey agent */
-		if (btd_event_request_pin(&dev->bdaddr, ci) < 0)
-			goto reject;
-	}
-
-	g_free(cr);
-
-	return;
-
-reject:
-	g_free(cr);
-
-	hci_send_cmd(dev->sk, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
 }
 
 static void start_inquiry(bdaddr_t *local, uint8_t status, gboolean periodic)
diff --git a/src/event.c b/src/event.c
index 009560e..2a1edf1 100644
--- a/src/event.c
+++ b/src/event.c
@@ -129,12 +129,14 @@
 	error("Sending PIN code reply failed: %s (%d)", strerror(-err), -err);
 }
 
-int btd_event_request_pin(bdaddr_t *sba, struct hci_conn_info *ci)
+int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba)
 {
 	struct btd_adapter *adapter;
 	struct btd_device *device;
+	char pin[17];
+	int pinlen;
 
-	if (!get_adapter_and_device(sba, &ci->bdaddr, &adapter, &device, TRUE))
+	if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
 		return -ENODEV;
 
 	/* Check if the adapter is not pairable and if there isn't a bonding in
@@ -142,6 +144,13 @@
 	if (!adapter_is_pairable(adapter) && !device_is_bonding(device, NULL))
 		return -EPERM;
 
+	memset(pin, 0, sizeof(pin));
+	pinlen = read_pin_code(sba, dba, pin);
+	if (pinlen > 0) {
+		btd_adapter_pincode_reply(adapter, dba, pin);
+		return 0;
+	}
+
 	return device_request_authentication(device, AUTH_TYPE_PINCODE, 0,
 								pincode_cb);
 }
diff --git a/src/event.h b/src/event.h
index 4321949..83528a4 100644
--- a/src/event.h
+++ b/src/event.h
@@ -22,7 +22,7 @@
  *
  */
 
-int btd_event_request_pin(bdaddr_t *sba, struct hci_conn_info *ci);
+int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba);
 void btd_event_advertising_report(bdaddr_t *local, le_advertising_info *info);
 void btd_event_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi, uint8_t *data);
 void btd_event_set_legacy_pairing(bdaddr_t *local, bdaddr_t *peer, gboolean legacy);