summaryrefslogtreecommitdiffstats
path: root/hcid
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2006-02-22 23:41:17 +0000
committerMarcel Holtmann <marcel@holtmann.org>2006-02-22 23:41:17 +0000
commit705405301f91dbc159a108dcde5316098e1b8cd4 (patch)
treec88954b442f9583c27269c0e0f9d69c0adda2b80 /hcid
parent44309cd562eeefef51674711b50ae8c0f10e88a2 (diff)
Change API for remote name, alias and version information
Diffstat (limited to 'hcid')
-rw-r--r--hcid/dbus-device.c121
-rw-r--r--hcid/dbus.c48
-rw-r--r--hcid/dbus.h30
-rw-r--r--hcid/hcid.h2
-rw-r--r--hcid/security.c3
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)