diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2006-02-22 23:41:17 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2006-02-22 23:41:17 +0000 |
commit | 705405301f91dbc159a108dcde5316098e1b8cd4 (patch) | |
tree | c88954b442f9583c27269c0e0f9d69c0adda2b80 | |
parent | 44309cd562eeefef51674711b50ae8c0f10e88a2 (diff) |
Change API for remote name, alias and version information
-rw-r--r-- | hcid/dbus-device.c | 121 | ||||
-rw-r--r-- | hcid/dbus.c | 48 | ||||
-rw-r--r-- | hcid/dbus.h | 30 | ||||
-rw-r--r-- | hcid/hcid.h | 2 | ||||
-rw-r--r-- | hcid/security.c | 3 |
5 files changed, 34 insertions, 170 deletions
diff --git a/hcid/dbus-device.c b/hcid/dbus-device.c index 811d06b2..96dc7fba 100644 --- a/hcid/dbus-device.c +++ b/hcid/dbus-device.c @@ -175,7 +175,7 @@ static DBusMessage* handle_dev_set_name_req(DBusMessage *msg, void *data) return reply; } -static DBusMessage* handle_dev_get_alias_req(DBusMessage *msg, void *data) +static DBusMessage* handle_dev_get_remote_alias_req(DBusMessage *msg, void *data) { struct hci_dbus_data *dbus_data = data; DBusMessageIter iter; @@ -201,7 +201,7 @@ static DBusMessage* handle_dev_get_alias_req(DBusMessage *msg, void *data) return reply; } -static DBusMessage* handle_dev_set_alias_req(DBusMessage *msg, void *data) +static DBusMessage* handle_dev_set_remote_alias_req(DBusMessage *msg, void *data) { struct hci_dbus_data *dbus_data = data; DBusConnection *connection = get_dbus_connection(); @@ -224,17 +224,7 @@ static DBusMessage* handle_dev_set_alias_req(DBusMessage *msg, void *data) set_device_alias(dbus_data->dev_id, &bdaddr, str_ptr); - signal = dev_signal_factory(dbus_data->dev_id, "AliasChanged", - DBUS_TYPE_STRING, &addr_ptr, - DBUS_TYPE_STRING, &str_ptr, - DBUS_TYPE_INVALID); - if (signal) { - dbus_connection_send(connection, signal, NULL); - dbus_connection_flush(connection); - dbus_message_unref(signal); - } - - signal = dev_signal_factory(dbus_data->dev_id, "RemoteAlias", + signal = dev_signal_factory(dbus_data->dev_id, DEV_SIG_REMOTE_ALIAS_CHANGED, DBUS_TYPE_STRING, &addr_ptr, DBUS_TYPE_STRING, &str_ptr, DBUS_TYPE_INVALID); @@ -539,110 +529,40 @@ static DBusMessage* handle_dev_last_used_req(DBusMessage *msg, void *data) return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED); } -static DBusMessage* handle_dev_remote_alias_req(DBusMessage *msg, void *data) +static DBusMessage* handle_dev_get_remote_name_req(DBusMessage *msg, void *data) { - /*FIXME: */ - return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED); -} - -static DBusMessage* handle_dev_remote_name_req(DBusMessage *msg, void *data) -{ - DBusConnection *connection = get_dbus_connection(); - DBusMessage *reply = NULL; - DBusMessage *signal = NULL; struct hci_dbus_data *dbus_data = data; + DBusMessage *reply = NULL; const char *str_bdaddr; char *name; - char path[MAX_PATH_LENGTH]; bdaddr_t bdaddr; struct hci_dev_info di; - struct hci_request rq; - remote_name_req_cp cp; - evt_cmd_status rp; - int dd = -1; - dbus_message_get_args(msg, NULL, - DBUS_TYPE_STRING, &str_bdaddr, - DBUS_TYPE_INVALID); + dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &str_bdaddr, + DBUS_TYPE_INVALID); str2ba(str_bdaddr, &bdaddr); + if (hci_devinfo(dbus_data->dev_id, &di) < 0) { syslog(LOG_ERR, "Can't get device info"); - reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV); - goto failed; + return bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV); } - /* Try retrieve from local cache */ name = get_peer_name(&di.bdaddr, &bdaddr); - if (name) { - - reply = dbus_message_new_method_return(msg); - - snprintf(path, sizeof(path), "%s/hci%d", DEVICE_PATH, dbus_data->dev_id); + if (!name) + return bluez_new_failure_msg(msg, BLUEZ_EDBUS_RECORD_NOT_FOUND); - signal = dbus_message_new_signal(path, DEVICE_INTERFACE, - DEV_SIG_REMOTE_NAME); - - dbus_message_append_args(signal, - DBUS_TYPE_STRING, &str_bdaddr, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_INVALID); - - if (dbus_connection_send(connection, signal, NULL) == FALSE) { - syslog(LOG_ERR, "Can't send D-BUS remote name signal message"); - goto failed; - } - - dbus_message_unref(signal); - free(name); - - } else { - - /* Send HCI command */ - dd = hci_open_dev(dbus_data->dev_id); - if (dd < 0) { - syslog(LOG_ERR, "Unable to open device %d: %s (%d)", - dbus_data->dev_id, strerror(errno), errno); - reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET | errno); - goto failed; - } - - memset(&cp, 0, sizeof(cp)); - cp.bdaddr = bdaddr; - cp.pscan_rep_mode = 0x02; - - 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; - - if (hci_send_req(dd, &rq, 100) < 0) { - syslog(LOG_ERR, "Unable to send remote name request: %s (%d)", - strerror(errno), errno); - reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET | errno); - goto failed; - } + reply = dbus_message_new_method_return(msg); - if (rp.status) { - syslog(LOG_ERR, "Remote name request failed"); - reply = bluez_new_failure_msg(msg, BLUEZ_EBT_OFFSET | rp.status); - goto failed; - } - } + dbus_message_append_args(reply, DBUS_TYPE_STRING, &name, + DBUS_TYPE_INVALID); - reply = dbus_message_new_method_return(msg); -failed: - if (dd >= 0) - hci_close_dev(dd); + free(name); return reply; } -static DBusMessage* handle_dev_remote_version_req(DBusMessage *msg, void *data) +static DBusMessage* handle_dev_get_remote_version_req(DBusMessage *msg, void *data) { /*FIXME: */ return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED); @@ -884,7 +804,6 @@ static DBusMessage* handle_dev_encryption_key_size_req(DBusMessage *msg, void *d static const struct service_data dev_services[] = { { DEV_GET_ADDRESS, handle_dev_get_address_req, DEV_GET_ADDRESS_SIGNATURE }, - { DEV_GET_ALIAS, handle_dev_get_alias_req, DEV_GET_ALIAS_SIGNATURE }, { DEV_GET_COMPANY, handle_dev_get_company_req, DEV_GET_COMPANY_SIGNATURE }, { DEV_GET_DISCOVERABLE_TO, handle_dev_get_discoverable_to_req, DEV_GET_DISCOVERABLE_TO_SIGNATURE }, { DEV_GET_FEATURES, handle_dev_get_features_req, DEV_GET_FEATURES_SIGNATURE }, @@ -897,7 +816,6 @@ static const struct service_data dev_services[] = { { DEV_IS_CONNECTABLE, handle_dev_is_connectable_req, DEV_IS_CONNECTABLE_SIGNATURE }, { DEV_IS_DISCOVERABLE, handle_dev_is_discoverable_req, DEV_IS_DISCOVERABLE_SIGNATURE }, - { DEV_SET_ALIAS, handle_dev_set_alias_req, DEV_SET_ALIAS_SIGNATURE }, { DEV_SET_CLASS, handle_dev_set_class_req, DEV_SET_CLASS_SIGNATURE }, { DEV_SET_DISCOVERABLE_TO, handle_dev_set_discoverable_to_req, DEV_SET_DISCOVERABLE_TO_SIGNATURE }, { DEV_SET_MODE, handle_dev_set_mode_req, DEV_SET_MODE_SIGNATURE }, @@ -911,9 +829,10 @@ static const struct service_data dev_services[] = { { DEV_LAST_SEEN, handle_dev_last_seen_req, DEV_LAST_SEEN_SIGNATURE }, { DEV_LAST_USED, handle_dev_last_used_req, DEV_LAST_USED_SIGNATURE }, - { DEV_REMOTE_ALIAS, handle_dev_remote_alias_req, DEV_REMOTE_ALIAS_SIGNATURE }, - { DEV_REMOTE_NAME, handle_dev_remote_name_req, DEV_REMOTE_NAME_SIGNATURE }, - { DEV_REMOTE_VERSION, handle_dev_remote_version_req, DEV_REMOTE_VERSION_SIGNATURE }, + { DEV_SET_REMOTE_ALIAS, handle_dev_set_remote_alias_req, DEV_SET_REMOTE_ALIAS_SIGNATURE }, + { DEV_GET_REMOTE_ALIAS, handle_dev_get_remote_alias_req, DEV_GET_REMOTE_ALIAS_SIGNATURE }, + { DEV_GET_REMOTE_NAME, handle_dev_get_remote_name_req, DEV_GET_REMOTE_NAME_SIGNATURE }, + { DEV_GET_REMOTE_VERSION, handle_dev_get_remote_version_req, DEV_GET_REMOTE_VERSION_SIGNATURE }, { DEV_CREATE_BONDING, handle_dev_create_bonding_req, DEV_CREATE_BONDING_SIGNATURE }, { DEV_LIST_BONDINGS, handle_dev_list_bondings_req, DEV_LIST_BONDINGS_SIGNATURE }, diff --git a/hcid/dbus.c b/hcid/dbus.c index b92e9b77..be348b2c 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -643,7 +643,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name) snprintf(path, sizeof(path), "%s/hci%d", DEVICE_PATH, id); message = dbus_message_new_signal(path, DEVICE_INTERFACE, - DEV_REMOTE_NAME); + DEV_SIG_REMOTE_NAME_CHANGED); if (message == NULL) { syslog(LOG_ERR, "Can't allocate D-BUS remote name message"); goto failed; @@ -669,52 +669,6 @@ failed: bt_free(peer_addr); } -void hcid_dbus_remote_name_failed(bdaddr_t *local, bdaddr_t *peer, uint8_t status) -{ - DBusMessage *message = NULL; - char path[MAX_PATH_LENGTH]; - char *local_addr, *peer_addr; - bdaddr_t tmp; - int id; - - baswap(&tmp, local); local_addr = batostr(&tmp); - baswap(&tmp, peer); peer_addr = batostr(&tmp); - - id = hci_devid(local_addr); - if (id < 0) { - syslog(LOG_ERR, "No matching device id for %s", local_addr); - goto failed; - } - - snprintf(path, sizeof(path), "%s/hci%d", DEVICE_PATH, id); - - message = dbus_message_new_signal(path, DEVICE_INTERFACE, - DEV_SIG_REMOTE_NAME_FAILED); - if (message == NULL) { - syslog(LOG_ERR, "Can't allocate D-BUS remote name message"); - goto failed; - } - - dbus_message_append_args(message, - DBUS_TYPE_STRING, &peer_addr, - DBUS_TYPE_BYTE, &status, - DBUS_TYPE_INVALID); - - if (dbus_connection_send(connection, message, NULL) == FALSE) { - syslog(LOG_ERR, "Can't send D-BUS remote name message"); - goto failed; - } - - dbus_connection_flush(connection); - -failed: - if (message) - dbus_message_unref(message); - - bt_free(local_addr); - bt_free(peer_addr); -} - void hcid_dbus_conn_complete(bdaddr_t *local, bdaddr_t *peer) { } diff --git a/hcid/dbus.h b/hcid/dbus.h index 0be5da36..666bf2de 100644 --- a/hcid/dbus.h +++ b/hcid/dbus.h @@ -109,7 +109,6 @@ int get_default_dev_id(void); BlueZ D-Bus Device path definitions "/org/bluez/Device" *========================================================================*/ #define DEV_GET_ADDRESS "GetAddress" -#define DEV_GET_ALIAS "GetAlias" #define DEV_GET_COMPANY "GetCompany" #define DEV_GET_DISCOVERABLE_TO "GetDiscoverableTimeout" #define DEV_GET_FEATURES "GetFeatures" @@ -120,7 +119,6 @@ int get_default_dev_id(void); #define DEV_GET_VERSION "GetVersion" #define DEV_IS_CONNECTABLE "IsConnectable" #define DEV_IS_DISCOVERABLE "IsDiscoverable" -#define DEV_SET_ALIAS "SetAlias" #define DEV_SET_CLASS "SetClass" #define DEV_SET_DISCOVERABLE_TO "SetDiscoverableTimeout" #define DEV_SET_MODE "SetMode" @@ -131,9 +129,10 @@ int get_default_dev_id(void); #define DEV_DISCOVER_SERVICE "DiscoverService" #define DEV_LAST_SEEN "LastSeen" #define DEV_LAST_USED "LastUsed" -#define DEV_REMOTE_ALIAS "RemoteAlias" -#define DEV_REMOTE_NAME "RemoteName" -#define DEV_REMOTE_VERSION "RemoteVersion" +#define DEV_SET_REMOTE_ALIAS "SetRemoteAlias" +#define DEV_GET_REMOTE_ALIAS "GetRemoteAlias" +#define DEV_GET_REMOTE_NAME "GetRemoteName" +#define DEV_GET_REMOTE_VERSION "GetRemoteVersion" #define DEV_CREATE_BONDING "CreateBonding" #define DEV_LIST_BONDINGS "ListBondings" #define DEV_HAS_BONDING_NAME "HasBonding" @@ -144,8 +143,6 @@ int get_default_dev_id(void); /*FIXME: maybe this section can be moved to a internal header file */ /* Device service signature */ #define DEV_GET_ADDRESS_SIGNATURE __END_SIG__ -#define DEV_GET_ALIAS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ - __END_SIG__ #define DEV_GET_COMPANY_SIGNATURE __END_SIG__ #define DEV_GET_DISCOVERABLE_TO_SIGNATURE __END_SIG__ #define DEV_GET_FEATURES_SIGNATURE __END_SIG__ @@ -156,9 +153,6 @@ int get_default_dev_id(void); #define DEV_GET_VERSION_SIGNATURE __END_SIG__ #define DEV_IS_CONNECTABLE_SIGNATURE __END_SIG__ #define DEV_IS_DISCOVERABLE_SIGNATURE __END_SIG__ -#define DEV_SET_ALIAS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ - DBUS_TYPE_STRING_AS_STRING \ - __END_SIG__ #define DEV_SET_CLASS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ @@ -177,11 +171,14 @@ int get_default_dev_id(void); __END_SIG__ #define DEV_LAST_USED_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ -#define DEV_REMOTE_ALIAS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ +#define DEV_SET_REMOTE_ALIAS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ + DBUS_TYPE_STRING_AS_STRING \ + __END_SIG__ +#define DEV_GET_REMOTE_ALIAS_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ -#define DEV_REMOTE_NAME_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ +#define DEV_GET_REMOTE_NAME_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ -#define DEV_REMOTE_VERSION_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ +#define DEV_GET_REMOTE_VERSION_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ #define DEV_CREATE_BONDING_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ @@ -199,11 +196,8 @@ int get_default_dev_id(void); /* Signals sent in the Manager path */ #define DEV_SIG_MODE_CHANGED "ModeChanged" #define DEV_SIG_NAME_CHANGED "NameChanged" -#define DEV_SIG_ALIAS_CHANGED "AliasChanged" -#define DEV_SIG_REMOTE_NAME "RemoteName" -#define DEV_SIG_REMOTE_NAME_FAILED "RemoteNameFailed" -#define DEV_SIG_REMOTE_ALIAS "RemoteAlias" -#define DEV_SIG_REMOTE_VERSION "RemoteVersion" +#define DEV_SIG_REMOTE_NAME_CHANGED "RemoteNameChange" +#define DEV_SIG_REMOTE_ALIAS_CHANGED "RemoteAliasChanged" #define DEV_SIG_BONDING_CREATED "BondingCreated" #define DEV_SIG_BONDING_FAILED "BondingFailed" #define DEV_SIG_BONDING_REMOVED "BondingRemoved" diff --git a/hcid/hcid.h b/hcid/hcid.h index 52e44f32..87afaaa2 100644 --- a/hcid/hcid.h +++ b/hcid/hcid.h @@ -128,7 +128,6 @@ void hcid_dbus_inquiry_start(bdaddr_t *local); void hcid_dbus_inquiry_complete(bdaddr_t *local); void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi); void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name); -void hcid_dbus_remote_name_failed(bdaddr_t *local, bdaddr_t *peer, uint8_t status); void hcid_dbus_conn_complete(bdaddr_t *local, bdaddr_t *peer); void hcid_dbus_disconn_complete(bdaddr_t *local, bdaddr_t *peer, uint8_t reason); void hcid_dbus_bonding_created_complete(bdaddr_t *local, bdaddr_t *peer, const uint8_t status); @@ -139,7 +138,6 @@ static inline void hcid_dbus_inquiry_start(bdaddr_t *local) {} static inline void hcid_dbus_inquiry_complete(bdaddr_t *local) {} static inline void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi) {} static inline void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name) {} -static inline void hcid_dbus_remote_name_failed(bdaddr_t *local, bdaddr_t *peer, uint8_t status) {} static inline void hcid_dbus_conn_complete(bdaddr_t *local, bdaddr_t *peer) {} static inline void hcid_dbus_disconn_complete(bdaddr_t *local, bdaddr_t *peer, uint8_t reason) {} static inline void hcid_dbus_bonding_created_complete(bdaddr_t *local, bdaddr_t *peer, const uint8_t status) {} diff --git a/hcid/security.c b/hcid/security.c index 2c76f167..ba00fb80 100644 --- a/hcid/security.c +++ b/hcid/security.c @@ -426,8 +426,7 @@ static inline void remote_name_information(int dev, bdaddr_t *sba, void *ptr) memcpy(name, evt->name, 248); write_device_name(sba, &dba, name); hcid_dbus_remote_name(sba, &dba, name); - } else - hcid_dbus_remote_name_failed(sba, &dba, evt->status); + } } static inline void remote_version_information(int dev, bdaddr_t *sba, void *ptr) |