summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/dbus-adapter.c10
-rw-r--r--hcid/dbus-api.txt9
-rw-r--r--hcid/dbus-error.c14
-rw-r--r--hcid/dbus-manager.c12
-rw-r--r--hcid/dbus-rfcomm.c2
-rw-r--r--hcid/dbus-sdp.c2
-rw-r--r--hcid/dbus-security.c2
-rwxr-xr-xhcid/dbus-test16
-rw-r--r--hcid/dbus.c49
-rw-r--r--hcid/dbus.h18
10 files changed, 56 insertions, 78 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c
index 513d875c..49c8c526 100644
--- a/hcid/dbus-adapter.c
+++ b/hcid/dbus-adapter.c
@@ -2190,16 +2190,10 @@ static struct service_data dev_services[] = {
DBusHandlerResult msg_func_device(DBusConnection *conn, DBusMessage *msg, void *data)
{
- struct hci_dbus_data *dbus_data = data;
const char *iface;
iface = dbus_message_get_interface(msg);
- if (dbus_data->path_id == ADAPTER_ROOT_ID) {
- /* Adapter is down (path unregistered) or the path is wrong */
- return error_no_such_adapter(conn, msg);
- }
-
if (!strcmp(ADAPTER_INTERFACE, iface)) {
service_handler_func_t handler;
@@ -2208,7 +2202,7 @@ DBusHandlerResult msg_func_device(DBusConnection *conn, DBusMessage *msg, void *
if (handler)
return handler(conn, msg, data);
else
- return error_not_implemented(conn, msg);
+ return error_unknown_method(conn, msg);
}
else if (!strcmp(SECURITY_INTERFACE, iface))
return handle_security_method(conn, msg, data);
@@ -2217,5 +2211,5 @@ DBusHandlerResult msg_func_device(DBusConnection *conn, DBusMessage *msg, void *
else if (!strcmp(SDP_INTERFACE, iface))
return handle_sdp_method(conn, msg, data);
else
- return error_not_implemented(conn, msg);
+ return error_unknown_method(conn, msg);
}
diff --git a/hcid/dbus-api.txt b/hcid/dbus-api.txt
index d2733970..cf030b5d 100644
--- a/hcid/dbus-api.txt
+++ b/hcid/dbus-api.txt
@@ -44,11 +44,6 @@ Errors Failed
Error returned when the argument list is invalid or
out of specification for the method.
- NotImplemented
-
- Error returned when the called method has not been
- implemented.
-
NotAuthorized
Error returned when the caller of a method is not
@@ -121,7 +116,7 @@ Manager hierarchy
Service org.bluez
Interface org.bluez.Manager
-Object path /org/bluez/Manager
+Object path /org/bluez
Methods uint32 InterfaceVersion()
@@ -150,7 +145,7 @@ Adapter hierarchy
Service org.bluez
Interface org.bluez.Adapter
-Object path /org/bluez/Adapter/{hci0,hci1,...}
+Object path /org/bluez/{hci0,hci1,...}
Methods string GetAddress()
diff --git a/hcid/dbus-error.c b/hcid/dbus-error.c
index bcd1b109..8b75efeb 100644
--- a/hcid/dbus-error.c
+++ b/hcid/dbus-error.c
@@ -48,11 +48,19 @@ DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg
"Invalid arguments"));
}
-DBusHandlerResult error_not_implemented(DBusConnection *conn, DBusMessage *msg)
+DBusHandlerResult error_unknown_method(DBusConnection *conn, DBusMessage *msg)
{
+ char error[128];
+ const char *signature = dbus_message_get_signature(msg);
+ const char *method = dbus_message_get_member(msg);
+ const char *interface = dbus_message_get_interface(msg);
+
+ snprintf(error, 128, "Method \"%s\" with signature \"%s\" on interface \"%s\" doesn't exist",
+ method, signature, interface);
+
return send_reply_and_unref(conn,
- dbus_message_new_error(msg, ERROR_INTERFACE ".NotImplemented",
- "Not implemented"));
+ dbus_message_new_error(msg, ERROR_INTERFACE ".UnknownMethod",
+ error));
}
DBusHandlerResult error_not_authorized(DBusConnection *conn, DBusMessage *msg)
diff --git a/hcid/dbus-manager.c b/hcid/dbus-manager.c
index 1fc24e39..84d08361 100644
--- a/hcid/dbus-manager.c
+++ b/hcid/dbus-manager.c
@@ -106,7 +106,7 @@ static DBusHandlerResult handle_mgr_list_devices_req(DBusConnection *conn, DBusM
if (ioctl(sk, HCIGETDEVINFO, &di) < 0)
continue;
- snprintf(path, sizeof(path), "%s/%s", ADAPTER_PATH, di.name);
+ snprintf(path, sizeof(path), "%s/%s", BASE_PATH, di.name);
dbus_message_iter_append_basic(&array_iter,
DBUS_TYPE_STRING, &path_ptr);
@@ -134,7 +134,7 @@ static DBusHandlerResult handle_mgr_default_adapter_req(DBusConnection *conn, DB
if (!reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, default_dev);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, default_dev);
dbus_message_append_args(reply, DBUS_TYPE_STRING, &path_ptr,
DBUS_TYPE_INVALID);
@@ -164,9 +164,13 @@ static DBusHandlerResult handle_manager_method(DBusConnection *conn,
DBusHandlerResult msg_func_manager(DBusConnection *conn, DBusMessage *msg, void *data)
{
- const char *iface;
+ const char *iface, *path;
iface = dbus_message_get_interface(msg);
+ path = dbus_message_get_path(msg);
+
+ if (strcmp(BASE_PATH, path))
+ return error_no_such_adapter(conn, msg);
if (!strcmp(iface, MANAGER_INTERFACE))
return handle_manager_method(conn, msg, data);
@@ -174,5 +178,5 @@ DBusHandlerResult msg_func_manager(DBusConnection *conn, DBusMessage *msg, void
if (!strcmp(iface, SECURITY_INTERFACE))
return handle_security_method(conn, msg, data);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return error_unknown_method(conn, msg);
}
diff --git a/hcid/dbus-rfcomm.c b/hcid/dbus-rfcomm.c
index c9f862e0..6b5912d8 100644
--- a/hcid/dbus-rfcomm.c
+++ b/hcid/dbus-rfcomm.c
@@ -719,5 +719,5 @@ DBusHandlerResult handle_rfcomm_method(DBusConnection *conn, DBusMessage *msg,
if (handler)
return handler(conn, msg, data);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return error_unknown_method(conn, msg);
}
diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c
index e2a46fb8..3a01b6b7 100644
--- a/hcid/dbus-sdp.c
+++ b/hcid/dbus-sdp.c
@@ -526,5 +526,5 @@ DBusHandlerResult handle_sdp_method(DBusConnection *conn, DBusMessage *msg, void
if (handler)
return handler(conn, msg, data);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return error_unknown_method(conn, msg);
}
diff --git a/hcid/dbus-security.c b/hcid/dbus-security.c
index 432956f0..b69c9441 100644
--- a/hcid/dbus-security.c
+++ b/hcid/dbus-security.c
@@ -468,7 +468,7 @@ DBusHandlerResult handle_security_method(DBusConnection *conn, DBusMessage *msg,
if (handler)
return handler(conn, msg, data);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return error_unknown_method(conn, msg);
}
int handle_passkey_request(int dev, const char *path, bdaddr_t *sba, bdaddr_t *dba)
diff --git a/hcid/dbus-test b/hcid/dbus-test
index 25373a00..2877043e 100755
--- a/hcid/dbus-test
+++ b/hcid/dbus-test
@@ -67,10 +67,10 @@ dev_signals = [ "ModeChanged",
"BondingCreated",
"BondingRemoved" ]
-dev_signals_filter = [ "/org/bluez/Adapter/hci0", "/org/bluez/Adapter/hci1",
- "/org/bluez/Adapter/hci2", "/org/bluez/Adapter/hci3",
- "/org/bluez/Adapter/hci4", "/org/bluez/Adapter/hci5",
- "/org/bluez/Adapter/hci6", "/org/bluez/Adapter/hci7" ]
+dev_signals_filter = [ "/org/bluez/hci0", "/org/bluez/hci1",
+ "/org/bluez/hci2", "/org/bluez/hci3",
+ "/org/bluez/hci4", "/org/bluez/hci5",
+ "/org/bluez/hci6", "/org/bluez/hci7" ]
class Tester:
exit_events = []
@@ -107,7 +107,7 @@ class Tester:
if a[0] == '/':
self.dev_path = a
else:
- self.dev_path = '/org/bluez/Adapter/%s' % a
+ self.dev_path = '/org/bluez/%s' % a
if not (args or self.listen):
self.usage()
@@ -148,13 +148,13 @@ class Tester:
for signal in mgr_signals:
self.bus.add_signal_receiver(self.mgr_signal_handler,
signal,'org.bluez.Manager',
- 'org.bluez', '/org/bluez/Manager')
+ 'org.bluez', '/org/bluez')
except dbus.DBusException, e:
print 'Failed to setup signal handler for manager path: %s' % e
sys.exit(1)
def dbus_mgr_setup(self):
- self.manager_obj = self.bus.get_object('org.bluez', '/org/bluez/Manager')
+ self.manager_obj = self.bus.get_object('org.bluez', '/org/bluez')
self.manager = dbus.Interface(self.manager_obj, 'org.bluez.Manager')
def dbus_setup(self):
@@ -162,7 +162,7 @@ class Tester:
def usage(self):
print 'Usage: %s [-i <dev>] [-l] [-h] <cmd> [arg1..]' % self.name
- print ' -i <dev> Specify device (e.g. "hci0" or "/org/bluez/Adapter/hci0")'
+ print ' -i <dev> Specify device (e.g. "hci0" or "/org/bluez/hci0")'
print ' -l Listen for events (no command required)'
print ' -h Show this help'
print 'Manager commands:'
diff --git a/hcid/dbus.c b/hcid/dbus.c
index 9ae09c72..2fb0f7e3 100644
--- a/hcid/dbus.c
+++ b/hcid/dbus.c
@@ -281,7 +281,7 @@ DBusMessage *dev_signal_factory(const int devid, const char *prop_name, const in
DBusMessage *signal;
char path[MAX_PATH_LENGTH];
- snprintf(path, sizeof(path)-1, "%s/hci%d", ADAPTER_PATH, devid);
+ snprintf(path, sizeof(path)-1, "%s/hci%d", BASE_PATH, devid);
signal = dbus_message_new_signal(path, ADAPTER_INTERFACE, prop_name);
if (!signal) {
@@ -320,7 +320,7 @@ static const DBusObjectPathVTable obj_mgr_vtable = {
*/
static DBusHandlerResult hci_dbus_signal_filter(DBusConnection *conn, DBusMessage *msg, void *data);
-static gboolean register_dbus_path(const char *path, uint16_t path_id, uint16_t dev_id,
+static gboolean register_dbus_path(const char *path, uint16_t dev_id,
const DBusObjectPathVTable *pvtable, gboolean fallback)
{
gboolean ret = FALSE;
@@ -336,7 +336,6 @@ static gboolean register_dbus_path(const char *path, uint16_t path_id, uint16_t
memset(data, 0, sizeof(struct hci_dbus_data));
- data->path_id = path_id;
data->dev_id = dev_id;
data->mode = SCAN_DISABLED;
data->discoverable_timeout = get_discoverable_timeout(dev_id);
@@ -420,8 +419,8 @@ gboolean hcid_dbus_register_device(uint16_t id)
struct hci_conn_list_req *cl = NULL;
struct hci_conn_info *ci = NULL;
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
- if (!register_dbus_path(path, ADAPTER_PATH_ID, id, &obj_dev_vtable, FALSE))
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
+ if (!register_dbus_path(path, id, &obj_dev_vtable, FALSE))
return FALSE;
dd = hci_open_dev(id);
@@ -463,7 +462,7 @@ gboolean hcid_dbus_register_device(uint16_t id)
/*
* Send the adapter added signal
*/
- message = dbus_message_new_signal(MANAGER_PATH, MANAGER_INTERFACE,
+ message = dbus_message_new_signal(BASE_PATH, MANAGER_INTERFACE,
"AdapterAdded");
if (message == NULL) {
error("Can't allocate D-Bus message");
@@ -531,9 +530,9 @@ gboolean hcid_dbus_unregister_device(uint16_t id)
char path[MAX_PATH_LENGTH];
char *pptr = path;
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
- message = dbus_message_new_signal(MANAGER_PATH, MANAGER_INTERFACE,
+ message = dbus_message_new_signal(BASE_PATH, MANAGER_INTERFACE,
"AdapterRemoved");
if (message == NULL) {
error("Can't allocate D-Bus message");
@@ -570,7 +569,7 @@ void hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci)
ba2str(sba, addr);
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, hci_devid(addr));
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, hci_devid(addr));
handle_passkey_request(dev, path, sba, &ci->bdaddr);
}
@@ -594,7 +593,7 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer, const u
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
/* create the authentication reply */
if (!dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
@@ -681,7 +680,7 @@ void hcid_dbus_create_conn_cancel(bdaddr_t *local, void *ptr)
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (!dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
error("Getting %s path data failed!", path);
goto failed;
@@ -724,7 +723,7 @@ void hcid_dbus_inquiry_start(bdaddr_t *local)
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (dbus_connection_get_object_path_data(connection, path, (void *) &pdata))
pdata->discover_state = STATE_DISCOVER;
@@ -860,7 +859,7 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
@@ -936,7 +935,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (!dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
error("Getting %s path data failed!", path);
@@ -1034,7 +1033,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status, char
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
/* remove from remote name request list */
if (dbus_connection_get_object_path_data(connection, path, (void *) &pdata))
@@ -1102,7 +1101,7 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle, b
goto done;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (!dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
error("Getting %s path data failed!", path);
@@ -1203,7 +1202,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status, uint16_t handle
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
if (!dbus_connection_get_object_path_data(connection, path, (void *) &pdata)) {
error("Getting %s path data failed!", path);
@@ -1363,12 +1362,7 @@ gboolean hcid_dbus_init(void)
return FALSE;
}
- if (!register_dbus_path(ADAPTER_PATH, ADAPTER_ROOT_ID, INVALID_DEV_ID,
- &obj_dev_vtable, TRUE))
- return FALSE;
-
- if (!register_dbus_path(MANAGER_PATH, MANAGER_ROOT_ID, INVALID_DEV_ID,
- &obj_mgr_vtable, FALSE))
+ if (!register_dbus_path(BASE_PATH, INVALID_DEV_ID, &obj_mgr_vtable, TRUE))
return FALSE;
if (!dbus_connection_add_filter(connection, hci_dbus_signal_filter, NULL, NULL)) {
@@ -1391,13 +1385,13 @@ void hcid_dbus_exit(void)
return;
/* Unregister all paths in Adapter path hierarchy */
- if (!dbus_connection_list_registered(connection, ADAPTER_PATH, &children))
+ if (!dbus_connection_list_registered(connection, BASE_PATH, &children))
goto done;
for (; children[i]; i++) {
char dev_path[MAX_PATH_LENGTH];
- snprintf(dev_path, sizeof(dev_path), "%s/%s", ADAPTER_PATH, children[i]);
+ snprintf(dev_path, sizeof(dev_path), "%s/%s", BASE_PATH, children[i]);
unregister_dbus_path(dev_path);
}
@@ -1405,8 +1399,7 @@ void hcid_dbus_exit(void)
dbus_free_string_array(children);
done:
- unregister_dbus_path(ADAPTER_PATH);
- unregister_dbus_path(MANAGER_PATH);
+ unregister_dbus_path(BASE_PATH);
dbus_connection_close(connection);
}
@@ -1634,7 +1627,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local)
goto failed;
}
- snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id);
+ snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
dd = hci_open_dev(id);
if (dd < 0) {
diff --git a/hcid/dbus.h b/hcid/dbus.h
index aab6f354..c56884f5 100644
--- a/hcid/dbus.h
+++ b/hcid/dbus.h
@@ -34,10 +34,8 @@
#define BASE_PATH "/org/bluez"
#define BASE_INTERFACE "org.bluez"
-#define ADAPTER_PATH BASE_PATH "/Adapter"
#define ADAPTER_INTERFACE BASE_INTERFACE ".Adapter"
-#define MANAGER_PATH BASE_PATH "/Manager"
#define MANAGER_INTERFACE BASE_INTERFACE ".Manager"
#define ERROR_INTERFACE BASE_INTERFACE ".Error"
@@ -48,19 +46,6 @@
#define SDP_INTERFACE BASE_INTERFACE ".SDP"
-#define MANAGER_PATH_MASK (1 << 15)
-#define ADAPTER_PATH_MASK (1 << 14)
-
-/* /org/bluez/Manager */
-#define MANAGER_ROOT_ID MANAGER_PATH_MASK
-
-/* /org/bluez/Adapter */
-#define ADAPTER_ROOT_ID ADAPTER_PATH_MASK
-
-/* E.g. /org/bluez/Adapter/hci0 */
-#define ADAPTER_PATH_ID (ADAPTER_PATH_MASK | 0x0001)
-
-#define INVALID_PATH_ID 0xFFFF
#define INVALID_DEV_ID 0xFFFF
#define MAX_PATH_LENGTH 64
@@ -115,7 +100,6 @@ struct active_conn_info {
struct hci_dbus_data {
uint16_t dev_id;
- uint16_t path_id;
char address[18]; /* adapter Bluetooth Address */
uint32_t timeout_id; /* discoverable timeout id */
uint32_t discoverable_timeout; /* discoverable time(msec) */
@@ -157,7 +141,7 @@ int get_default_dev_id(void);
DBusHandlerResult error_failed(DBusConnection *conn, DBusMessage *msg, int err);
DBusHandlerResult error_invalid_arguments(DBusConnection *conn, DBusMessage *msg);
-DBusHandlerResult error_not_implemented(DBusConnection *conn, DBusMessage *msg);
+DBusHandlerResult error_unknown_method(DBusConnection *conn, DBusMessage *msg);
DBusHandlerResult error_not_authorized(DBusConnection *conn, DBusMessage *msg);
DBusHandlerResult error_out_of_memory(DBusConnection *conn, DBusMessage *msg);
DBusHandlerResult error_no_such_adapter(DBusConnection *conn, DBusMessage *msg);