OSDN Git Service

Adding adapter_resolve_names to adapter.c.
authorAlok Barsode <alok.barsode@azingo.com>
Thu, 2 Jul 2009 12:38:35 +0000 (18:08 +0530)
committerJohan Hedberg <johan.hedberg@nokia.com>
Thu, 2 Jul 2009 14:08:48 +0000 (17:08 +0300)
src/adapter.c
src/adapter.h
src/dbus-hci.c
src/dbus-hci.h
src/security.c

index e29b997..c0953dc 100644 (file)
@@ -258,6 +258,58 @@ int pending_remote_name_cancel(struct btd_adapter *adapter)
        return err;
 }
 
+int adapter_resolve_names(struct btd_adapter *adapter)
+{
+       remote_name_req_cp cp;
+       struct remote_dev_info *dev, match;
+       int dd, err;
+
+       memset(&match, 0, sizeof(struct remote_dev_info));
+       bacpy(&match.bdaddr, BDADDR_ANY);
+       match.name_status = NAME_REQUIRED;
+
+       dev = adapter_search_found_devices(adapter, &match);
+       if (!dev)
+               return -ENODATA;
+
+       dd = hci_open_dev(adapter->dev_id);
+       if (dd < 0)
+               return -errno;
+
+       /* send at least one request or return failed if the list is empty */
+       do {
+               /* flag to indicate the current remote name requested */
+               dev->name_status = NAME_REQUESTED;
+
+               memset(&cp, 0, sizeof(cp));
+               bacpy(&cp.bdaddr, &dev->bdaddr);
+               cp.pscan_rep_mode = 0x02;
+
+               err = hci_send_cmd(dd, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ,
+                                               REMOTE_NAME_REQ_CP_SIZE, &cp);
+
+               if (!err)
+                       break;
+
+               error("Unable to send HCI remote name req: %s (%d)",
+                                               strerror(errno), errno);
+
+               /* if failed, request the next element */
+               /* remove the element from the list */
+               adapter_remove_found_device(adapter, &dev->bdaddr);
+
+               /* get the next element */
+               dev = adapter_search_found_devices(adapter, &match);
+       } while (dev);
+
+       hci_close_dev(dd);
+
+       if (err < 0)
+               err = -errno;
+
+       return err;
+}
+
 static const char *mode2str(uint8_t mode)
 {
        switch(mode) {
index 1d31cc1..288b604 100644 (file)
@@ -97,6 +97,8 @@ struct btd_device *adapter_create_device(DBusConnection *conn,
 
 int pending_remote_name_cancel(struct btd_adapter *adapter);
 
+int adapter_resolve_names(struct btd_adapter *adapter);
+
 void clear_found_devices_list(struct btd_adapter *adapter);
 
 struct btd_adapter *adapter_create(DBusConnection *conn, int id,
index 9d00012..bd5200f 100644 (file)
@@ -434,74 +434,6 @@ void hcid_dbus_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer,
        device_simple_pairing_complete(device, status);
 }
 
-int found_device_req_name(struct btd_adapter *adapter)
-{
-       struct hci_request rq;
-       evt_cmd_status rp;
-       remote_name_req_cp cp;
-       struct remote_dev_info *dev, match;
-       int dd, req_sent = 0;
-       uint16_t dev_id = adapter_get_dev_id(adapter);
-
-       memset(&match, 0, sizeof(struct remote_dev_info));
-       bacpy(&match.bdaddr, BDADDR_ANY);
-       match.name_status = NAME_REQUIRED;
-
-       dev = adapter_search_found_devices(adapter, &match);
-       if (!dev)
-               return -ENODATA;
-
-       dd = hci_open_dev(dev_id);
-       if (dd < 0)
-               return -errno;
-
-       memset(&rq, 0, sizeof(rq));
-       rq.ogf    = OGF_LINK_CTL;
-       rq.ocf    = OCF_REMOTE_NAME_REQ;
-       rq.cparam = &cp;
-       rq.clen   = REMOTE_NAME_REQ_CP_SIZE;
-       rq.rparam = &rp;
-       rq.rlen   = EVT_CMD_STATUS_SIZE;
-       rq.event  = EVT_CMD_STATUS;
-
-       /* send at least one request or return failed if the list is empty */
-       do {
-               /* flag to indicate the current remote name requested */
-               dev->name_status = NAME_REQUESTED;
-
-               memset(&rp, 0, sizeof(rp));
-               memset(&cp, 0, sizeof(cp));
-               bacpy(&cp.bdaddr, &dev->bdaddr);
-               cp.pscan_rep_mode = 0x02;
-
-               if (hci_send_req(dd, &rq, HCI_REQ_TIMEOUT) < 0)
-                       error("Unable to send HCI remote name req: %s (%d)",
-                                               strerror(errno), errno);
-
-               if (!rp.status) {
-                       req_sent = 1;
-                       break;
-               }
-
-               error("Remote name request failed with status 0x%02x",
-                                                               rp.status);
-
-               /* if failed, request the next element */
-               /* remove the element from the list */
-               adapter_remove_found_device(adapter, &dev->bdaddr);
-
-               /* get the next element */
-               dev = adapter_search_found_devices(adapter, &match);
-       } while (dev);
-
-       hci_close_dev(dd);
-
-       if (!req_sent)
-               return -ENODATA;
-
-       return 0;
-}
-
 static char *extract_eir_name(uint8_t *data, uint8_t *type)
 {
        if (!data || !type)
@@ -674,7 +606,7 @@ proceed:
        adapter_remove_found_device(adapter, peer);
 
        /* check if there is more devices to request names */
-       if (found_device_req_name(adapter) == 0)
+       if (adapter_resolve_names(adapter) == 0)
                return;
 
        state = adapter_get_state(adapter);
index fb1daba..ff8961a 100644 (file)
@@ -23,7 +23,6 @@
  */
 
 int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci);
-int found_device_req_name(struct btd_adapter *adapter);
 void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi, uint8_t *data);
 void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class);
 void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, char *name);
index f5c98fb..905cf61 100644 (file)
@@ -630,7 +630,7 @@ static void inquiry_complete(bdaddr_t *local, uint8_t status, gboolean periodic)
                return;
        }
 
-       if (found_device_req_name(adapter) == 0)
+       if (adapter_resolve_names(adapter) == 0)
                return;
 
        state = adapter_get_state(adapter);