diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2006-03-17 02:56:47 +0000 |
---|---|---|
committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2006-03-17 02:56:47 +0000 |
commit | 7858540a0474675cdfcbef5711ad1c49fc0b736c (patch) | |
tree | f280abe7795366867f2b833213b2788230d51b8f /hcid/dbus.c | |
parent | ad51f992f0c529a928edad39a045864a02e641af (diff) |
added signature verification and code cleanup
Diffstat (limited to 'hcid/dbus.c')
-rw-r--r-- | hcid/dbus.c | 152 |
1 files changed, 75 insertions, 77 deletions
diff --git a/hcid/dbus.c b/hcid/dbus.c index 64f0ad18..31ca507c 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -105,27 +105,39 @@ static const char *phone_minor_cls[] = { void discovered_device_free(void *data, void *user_data) { struct discovered_dev_info *dev = data; + if (dev) { - free(dev->addr); + free(dev->bdaddr); free(dev); } } -int remote_name_find_by_address(const void *a, const void *b) +int bonding_requests_find(const void *data, const void *user_data) +{ + const struct bonding_request_info *dev = data; + const bdaddr_t *bdaddr = user_data; + + if (memcmp(dev->bdaddr, bdaddr, sizeof(*bdaddr)) == 0) + return 0; + + return -1; +} + +int remote_name_find_by_bdaddr(const void *data, const void *user_data) { - const struct discovered_dev_info *dev = a; - const bdaddr_t *addr = b; + const struct discovered_dev_info *dev = data; + const bdaddr_t *baddr = user_data; - if (memcmp(dev->addr, addr, sizeof(*addr)) == 0) + if (memcmp(dev->bdaddr, baddr, sizeof(*baddr)) == 0) return 0; return -1; } -int remote_name_find_by_name_status(const void *a, const void *b) +int remote_name_find_by_name_status(const void *data, const void *user_data) { - const struct discovered_dev_info *dev = a; - const name_status_t *name_status = b; + const struct discovered_dev_info *dev = data; + const name_status_t *name_status = user_data; if (dev->name_status == *name_status) return 0; @@ -133,67 +145,53 @@ int remote_name_find_by_name_status(const void *a, const void *b) return -1; } -static int remote_name_append(struct slist **list, bdaddr_t *addr, name_status_t name_status) +static int remote_name_append(struct slist **list, bdaddr_t *bdaddr, name_status_t name_status) { - struct discovered_dev_info *data = NULL; - struct slist *tmp_list; + struct discovered_dev_info *dev = NULL; + struct slist *l; /* ignore repeated entries */ - tmp_list = slist_find(*list, addr, remote_name_find_by_address); + l = slist_find(*list, bdaddr, remote_name_find_by_bdaddr); - if (tmp_list) { + if (l) { /* device found, update the attributes */ - data = tmp_list->data; - data->name_status = name_status; + dev = l->data; + dev->name_status = name_status; return -1; } - data = malloc(sizeof(*data)); - if (!data) + dev = malloc(sizeof(*dev)); + if (!dev) return -1; - data->addr = malloc(sizeof(*data->addr)); - memcpy(data->addr, addr, sizeof(*data->addr)); - data->name_status = name_status; + dev->bdaddr = malloc(sizeof(*dev->bdaddr)); + memcpy(dev->bdaddr, bdaddr, sizeof(*dev->bdaddr)); + dev->name_status = name_status; - *list = slist_append(*list, data); + *list = slist_append(*list, dev); return 0; } -static int remote_name_remove(struct slist **list, bdaddr_t *addr) +static int remote_name_remove(struct slist **list, bdaddr_t *bdaddr) { - struct discovered_dev_info *data; - struct slist *tmp_list; + struct discovered_dev_info *dev; + struct slist *l; int ret_val = -1; - tmp_list = slist_find(*list, addr, remote_name_find_by_address); + l = slist_find(*list, bdaddr, remote_name_find_by_bdaddr); - if (tmp_list) { - data = tmp_list->data; - *list = slist_remove(*list, data); - free(data->addr); - free(data); + if (l) { + dev = l->data; + *list = slist_remove(*list, dev); + free(dev->bdaddr); + free(dev); ret_val = 0; } return ret_val; } -static int bonding_requests_find(const void *a, const void *b) -{ - const struct bonding_request_info *dev = a; - const bdaddr_t *peer = b; - - if (!dev) - return -1; - - if (memcmp(dev->addr, peer, sizeof(*peer)) == 0) - return 0; - - return -1; -} - static DBusMessage *dbus_msg_new_authentication_return(DBusMessage *msg, uint8_t status) { @@ -284,7 +282,7 @@ DBusMessage *dev_signal_factory(const int devid, const char *prop_name, const in signal = dbus_message_new_signal(path, ADAPTER_INTERFACE, prop_name); if (!signal) { - error("Can't allocate D-BUS inquiry complete message"); + error("Can't allocate D-BUS message"); return NULL; } @@ -439,7 +437,7 @@ gboolean hcid_dbus_register_device(uint16_t id) message = dbus_message_new_signal(MANAGER_PATH, MANAGER_INTERFACE, "AdapterAdded"); if (message == NULL) { - error("Can't allocate D-BUS remote name message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -449,7 +447,7 @@ gboolean hcid_dbus_register_device(uint16_t id) DBUS_TYPE_INVALID); if (!dbus_connection_send(connection, message, NULL)) { - error("Can't send D-BUS added device message"); + error("Can't send D-BUS adapter added message"); goto failed; } @@ -480,7 +478,7 @@ gboolean hcid_dbus_unregister_device(uint16_t id) message = dbus_message_new_signal(MANAGER_PATH, MANAGER_INTERFACE, "AdapterRemoved"); if (message == NULL) { - error("Can't allocate D-Bus remote name message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -550,7 +548,7 @@ void hcid_dbus_bonding_created_complete(bdaddr_t *local, bdaddr_t *peer, const u msg_signal = dbus_message_new_signal(path, ADAPTER_INTERFACE, name); if (msg_signal == NULL) { - error("Can't allocate D-Bus remote name message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -582,7 +580,7 @@ void hcid_dbus_bonding_created_complete(bdaddr_t *local, bdaddr_t *peer, const u dbus_message_unref(dev->msg); pdata->bonding_requests = slist_remove(pdata->bonding_requests, dev); - free(dev->addr); + free(dev->bdaddr); free(dev); } } @@ -619,7 +617,7 @@ void hcid_dbus_inquiry_start(bdaddr_t *local) message = dbus_message_new_signal(path, ADAPTER_INTERFACE, "DiscoveryStarted"); if (message == NULL) { - error("Can't allocate D-Bus inquiry start message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -637,8 +635,8 @@ failed: static inline int remote_name_resolve(struct hci_dbus_data *dbus_data) { - struct discovered_dev_info *data; - struct slist *tmp_list = NULL; + struct discovered_dev_info *dev; + struct slist *l = NULL; remote_name_req_cp cp; int dd; name_status_t name_status = NAME_PENDING; @@ -647,13 +645,13 @@ static inline int remote_name_resolve(struct hci_dbus_data *dbus_data) if (!dbus_data->discovered_devices) return -1; - tmp_list = slist_find(dbus_data->discovered_devices, &name_status, remote_name_find_by_name_status); + l = slist_find(dbus_data->discovered_devices, &name_status, remote_name_find_by_name_status); - if (!tmp_list) + if (!l) return -1; - data = tmp_list->data; - if (!data) + dev = l->data; + if (!dev) return -1; dd = hci_open_dev(dbus_data->dev_id); @@ -661,7 +659,7 @@ static inline int remote_name_resolve(struct hci_dbus_data *dbus_data) return -1; memset(&cp, 0, sizeof(cp)); - bacpy(&cp.bdaddr, data->addr); + bacpy(&cp.bdaddr, dev->bdaddr); cp.pscan_rep_mode = 0x02; hci_send_cmd(dd, OGF_LINK_CTL, OCF_REMOTE_NAME_REQ, @@ -717,7 +715,7 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local) message = dbus_message_new_signal(path, ADAPTER_INTERFACE, "DiscoveryCompleted"); if (message == NULL) { - error("Can't allocate D-Bus inquiry complete message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -743,7 +741,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i DBusMessageIter array_iter; char path[MAX_PATH_LENGTH]; struct hci_dbus_data *pdata = NULL; - struct slist *list = NULL; + struct slist *l = NULL; struct discovered_dev_info *dev; char *local_addr, *peer_addr, *name = NULL; const char *major_ptr; @@ -775,7 +773,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i signal_device = dbus_message_new_signal(path, ADAPTER_INTERFACE, "RemoteDeviceFound"); if (signal_device == NULL) { - error("Can't allocate D-Bus inquiry result message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -815,15 +813,15 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i dbus_message_iter_close_container(&iter, &array_iter); if (dbus_connection_send(connection, signal_device, NULL) == FALSE) { - error("Can't send D-Bus inquiry result message"); + error("Can't send D-Bus remote device found signal"); goto failed; } /* send the remote name signal */ - list = slist_find(pdata->discovered_devices, peer, remote_name_find_by_address); + l = slist_find(pdata->discovered_devices, peer, remote_name_find_by_bdaddr); - if (list) { - dev = list->data; + if (l) { + dev = l->data; if (dev->name_status == NAME_SENT) goto failed; /* don't sent the name again */ } @@ -831,7 +829,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i signal_name = dbus_message_new_signal(path, ADAPTER_INTERFACE, "RemoteNameUpdated"); if (signal_name == NULL) { - error("Can't allocate D-Bus inquiry result message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -846,7 +844,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i DBUS_TYPE_INVALID); if (dbus_connection_send(connection, signal_name, NULL) == FALSE) - error("Can't send D-Bus inquiry result message"); + error("Can't send D-Bus remote name updated signal"); name_status = NAME_SENT; } @@ -904,7 +902,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, char message = dbus_message_new_signal(path, ADAPTER_INTERFACE, "RemoteNameUpdated"); if (message == NULL) { - error("Can't allocate D-Bus remote name message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -914,7 +912,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, char DBUS_TYPE_INVALID); if (dbus_connection_send(connection, message, NULL) == FALSE) { - error("Can't send D-Bus remote name message"); + error("Can't send D-Bus remote name updated signal"); goto failed; } @@ -938,12 +936,12 @@ request_next: message = dbus_message_new_signal(path, ADAPTER_INTERFACE, "DiscoveryCompleted"); if (message == NULL) { - error("Can't allocate D-Bus inquiry complete message"); + error("Can't allocate D-Bus message"); goto failed; } if (dbus_connection_send(connection, message, NULL) == FALSE) { - error("Can't send D-Bus inquiry complete message"); + error("Can't send D-Bus discovery completed signal"); goto failed; } @@ -973,7 +971,7 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle, b struct bonding_request_info *dev = NULL; char *local_addr, *peer_addr; bdaddr_t tmp; - int dd, id; + int dd = -1, id; baswap(&tmp, local); local_addr = batostr(&tmp); baswap(&tmp, peer); peer_addr = batostr(&tmp); @@ -1052,7 +1050,7 @@ failed: if (dev->bonding_state != PAIRING) { dbus_message_unref(dev->msg); pdata->bonding_requests = slist_remove(pdata->bonding_requests, dev); - free(dev->addr); + free(dev->bdaddr); free(dev); } } @@ -1296,7 +1294,7 @@ static void system_bus_reconnect(void) if (ioctl(sk, HCIGETDEVLIST, (void *) dl) < 0) { info("Can't get device list: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); goto failed; } @@ -1483,7 +1481,7 @@ void hcid_dbus_setname_complete(bdaddr_t *local) signal = dev_signal_factory(id, "NameChanged", DBUS_TYPE_STRING, &pname, DBUS_TYPE_INVALID); if (dbus_connection_send(connection, signal, NULL) == FALSE) { - error("Can't send D-Bus signal"); + error("Can't send D-Bus name changed signal"); goto failed; } @@ -1577,7 +1575,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local) message = dbus_message_new_signal(path, ADAPTER_INTERFACE, "ModeChanged"); if (message == NULL) { - error("Can't allocate D-Bus inquiry complete message"); + error("Can't allocate D-Bus message"); goto failed; } @@ -1586,7 +1584,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local) DBUS_TYPE_INVALID); if (dbus_connection_send(connection, message, NULL) == FALSE) { - error("Can't send D-Bus ModeChanged signal"); + error("Can't send D-Bus mode changed signal"); goto failed; } |