summaryrefslogtreecommitdiffstats
path: root/hcid/manager.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@indt.org.br>2008-07-01 10:31:38 -0300
committerLuiz Augusto von Dentz <luiz.dentz@indt.org.br>2008-07-28 10:30:22 -0300
commitd2e9d02070441523b6cb98e84b754b11e9813ecf (patch)
tree62bd27db85c2eb043c7a5c5f36221a82340cc85f /hcid/manager.c
parent7e2df7ddca88aa74c4eb54139c93a3dcc74490aa (diff)
Cleanup hci manager.
Diffstat (limited to 'hcid/manager.c')
-rw-r--r--hcid/manager.c323
1 files changed, 11 insertions, 312 deletions
diff --git a/hcid/manager.c b/hcid/manager.c
index c2d5fdf1..212bddc8 100644
--- a/hcid/manager.c
+++ b/hcid/manager.c
@@ -91,49 +91,6 @@ static inline DBusMessage *failed_strerror(DBusMessage *msg, int err)
strerror(err));
}
-static DBusMessage *interface_version(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- dbus_uint32_t version = 0;
-
- if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
- return invalid_args(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_append_args(reply, DBUS_TYPE_UINT32, &version,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
-static DBusMessage *old_default_adapter(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- char path[MAX_PATH_LENGTH], *path_ptr = path;
-
- if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
- return invalid_args(msg);
-
- if (default_adapter_id < 0)
- return no_such_adapter(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, default_adapter_id);
-
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &path_ptr,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
static int find_by_address(const char *str)
{
struct hci_dev_list_req *dl;
@@ -178,214 +135,6 @@ out:
return devid;
}
-static DBusMessage *old_find_adapter(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- char path[MAX_PATH_LENGTH], *path_ptr = path;
- struct hci_dev_info di;
- const char *pattern;
- int dev_id;
-
- if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &pattern,
- DBUS_TYPE_INVALID))
- return invalid_args(msg);
-
- /* hci_devid() would make sense to use here, except it
- is restricted to devices which are up */
- if (!strncmp(pattern, "hci", 3) && strlen(pattern) >= 4)
- dev_id = atoi(pattern + 3);
- else
- dev_id = find_by_address(pattern);
-
- if (dev_id < 0)
- return no_such_adapter(msg);
-
- if (hci_devinfo(dev_id, &di) < 0)
- return no_such_adapter(msg);
-
- if (hci_test_bit(HCI_RAW, &di.flags))
- return no_such_adapter(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, dev_id);
-
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &path_ptr,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
-static DBusMessage *old_list_adapters(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessageIter iter;
- DBusMessageIter array_iter;
- DBusMessage *reply;
- struct hci_dev_list_req *dl;
- struct hci_dev_req *dr;
- int i, sk;
-
- if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
- return invalid_args(msg);
-
- sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
- if (sk < 0)
- return failed_strerror(msg, errno);
-
- dl = g_malloc0(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
-
- dl->dev_num = HCI_MAX_DEV;
- dr = dl->dev_req;
-
- if (ioctl(sk, HCIGETDEVLIST, dl) < 0) {
- int err = errno;
- close(sk);
- g_free(dl);
- return failed_strerror(msg, err);
- }
-
- dr = dl->dev_req;
-
- reply = dbus_message_new_method_return(msg);
- if (!reply) {
- close(sk);
- g_free(dl);
- return NULL;
- }
-
- dbus_message_iter_init_append(reply, &iter);
-
- dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING, &array_iter);
-
- for (i = 0; i < dl->dev_num; i++, dr++) {
- char path[MAX_PATH_LENGTH], *path_ptr = path;
- struct hci_dev_info di;
-
- if (hci_devinfo(dr->dev_id, &di) < 0)
- continue;
-
- if (hci_test_bit(HCI_RAW, &di.flags))
- continue;
-
- snprintf(path, sizeof(path), "%s/%s", BASE_PATH, di.name);
-
- dbus_message_iter_append_basic(&array_iter,
- DBUS_TYPE_STRING, &path_ptr);
- }
-
- dbus_message_iter_close_container(&iter, &array_iter);
-
- g_free(dl);
-
- close(sk);
-
- return reply;
-}
-
-static DBusMessage *find_service(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- const char *pattern;
- struct service *service;
-
- if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &pattern,
- DBUS_TYPE_INVALID))
- return invalid_args(msg);
-
- service = search_service(pattern);
- if (!service)
- return no_such_service(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &service->object_path,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
-static DBusMessage *list_services(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- DBusMessageIter iter;
- DBusMessageIter array_iter;
-
- if (!dbus_message_has_signature(msg, DBUS_TYPE_INVALID_AS_STRING))
- return invalid_args(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_iter_init_append(reply, &iter);
- dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING, &array_iter);
-
- append_available_services(&array_iter);
-
- dbus_message_iter_close_container(&iter, &array_iter);
-
- return reply;
-}
-
-static DBusMessage *activate_service(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- const char *pattern;
- struct service *service;
- const char *busname = "org.bluez";
-
- if (!dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &pattern,
- DBUS_TYPE_INVALID))
- return invalid_args(msg);
-
- service = search_service(pattern);
- if (!service)
- return no_such_service(msg);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &busname,
- DBUS_TYPE_INVALID);
-
- return reply;
-}
-
-static GDBusMethodTable old_manager_methods[] = {
- { "InterfaceVersion", "", "u", interface_version },
- { "DefaultAdapter", "", "s", old_default_adapter },
- { "FindAdapter", "s", "s", old_find_adapter },
- { "ListAdapters", "", "as", old_list_adapters },
- { "FindService", "s", "s", find_service },
- { "ListServices", "", "as", list_services },
- { "ActivateService", "s", "s", activate_service },
- { NULL, NULL, NULL, NULL }
-};
-
-static GDBusSignalTable old_manager_signals[] = {
- { "AdapterAdded", "s" },
- { "AdapterRemoved", "s" },
- { "DefaultAdapterChanged", "s" },
- { "ServiceAdded", "s" },
- { "ServiceRemoved", "s" },
- { NULL, NULL }
-};
-
static DBusMessage *default_adapter(DBusConnection *conn,
DBusMessage *msg, void *data)
{
@@ -512,24 +261,14 @@ dbus_bool_t manager_init(DBusConnection *conn, const char *path)
{
connection = conn;
- if (hcid_dbus_use_experimental()) {
- debug("Registering experimental manager interface");
- g_dbus_register_interface(conn, "/", MANAGER_INTERFACE,
- manager_methods, manager_signals,
- NULL, NULL, NULL);
- }
-
- return g_dbus_register_interface(conn, path, MANAGER_INTERFACE,
- old_manager_methods, old_manager_signals,
+ return g_dbus_register_interface(conn, "/", MANAGER_INTERFACE,
+ manager_methods, manager_signals,
NULL, NULL, NULL);
}
void manager_cleanup(DBusConnection *conn, const char *path)
{
- g_dbus_unregister_interface(conn, path, MANAGER_INTERFACE);
-
- if (hcid_dbus_use_experimental())
- g_dbus_unregister_interface(conn, "/", MANAGER_INTERFACE);
+ g_dbus_unregister_interface(conn, "/", MANAGER_INTERFACE);
}
static gint adapter_id_cmp(gconstpointer a, gconstpointer b)
@@ -596,16 +335,9 @@ void manager_add_adapter(struct adapter *adapter)
{
const char *ptr = adapter->path + ADAPTER_PATH_INDEX;
- if (hcid_dbus_use_experimental()) {
- g_dbus_emit_signal(connection, "/",
- MANAGER_INTERFACE, "AdapterAdded",
- DBUS_TYPE_OBJECT_PATH, &ptr,
- DBUS_TYPE_INVALID);
- }
-
- g_dbus_emit_signal(connection, BASE_PATH,
+ g_dbus_emit_signal(connection, "/",
MANAGER_INTERFACE, "AdapterAdded",
- DBUS_TYPE_STRING, &adapter->path,
+ DBUS_TYPE_OBJECT_PATH, &ptr,
DBUS_TYPE_INVALID);
adapters = g_slist_append(adapters, adapter);
@@ -615,42 +347,16 @@ void manager_remove_adapter(struct adapter *adapter)
{
const char *ptr = adapter->path + ADAPTER_PATH_INDEX;
- if (hcid_dbus_use_experimental()) {
- g_dbus_emit_signal(connection, "/",
- MANAGER_INTERFACE, "AdapterRemoved",
- DBUS_TYPE_OBJECT_PATH, &ptr,
- DBUS_TYPE_INVALID);
- }
-
- g_dbus_emit_signal(connection, BASE_PATH,
+ g_dbus_emit_signal(connection, "/",
MANAGER_INTERFACE, "AdapterRemoved",
- DBUS_TYPE_STRING, &adapter->path,
+ DBUS_TYPE_OBJECT_PATH, &ptr,
DBUS_TYPE_INVALID);
if ((default_adapter_id == adapter->dev_id || default_adapter_id < 0)) {
int new_default = hci_get_route(NULL);
- default_adapter_id = new_default;
- if (new_default >= 0) {
- if (hcid_dbus_use_experimental()) {
- g_dbus_emit_signal(connection, "/",
- MANAGER_INTERFACE,
- "DefaultAdapterChanged",
- DBUS_TYPE_OBJECT_PATH, &ptr,
- DBUS_TYPE_INVALID);
- }
- g_dbus_emit_signal(connection, BASE_PATH,
- MANAGER_INTERFACE,
- "DefaultAdapterChanged",
- DBUS_TYPE_STRING, &adapter->path,
- DBUS_TYPE_INVALID);
- } else {
- g_dbus_emit_signal(connection, BASE_PATH,
- MANAGER_INTERFACE,
- "DefaultAdapterChanged",
- DBUS_TYPE_STRING, &adapter->path,
- DBUS_TYPE_INVALID);
- }
+ if (new_default >= 0)
+ manager_set_default_adapter(new_default);
}
adapters = g_slist_remove(adapters, adapter);
@@ -668,16 +374,9 @@ void manager_set_default_adapter(int id)
default_adapter_id = id;
- if (hcid_dbus_use_experimental())
- g_dbus_emit_signal(connection, "/",
- MANAGER_INTERFACE,
- "DefaultAdapterChanged",
- DBUS_TYPE_OBJECT_PATH, &ptr,
- DBUS_TYPE_INVALID);
-
- g_dbus_emit_signal(connection, BASE_PATH,
+ g_dbus_emit_signal(connection, "/",
MANAGER_INTERFACE,
"DefaultAdapterChanged",
- DBUS_TYPE_STRING, &adapter->path,
+ DBUS_TYPE_OBJECT_PATH, &ptr,
DBUS_TYPE_INVALID);
}