From 9a3a941ae455e4481392fb3e5d6b87750d0d9609 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 12 Mar 2008 19:21:33 +0000 Subject: [PATCH] Hook up server probe/remove callbacks --- hcid/dbus-hci.c | 4 ++++ hcid/hcid.h | 2 ++ hcid/server.c | 24 ++++++++++++++++++++++++ hcid/server.h | 2 ++ 4 files changed, 32 insertions(+) diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index 622099561..69c289d6a 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -378,6 +378,8 @@ int unregister_adapter_path(const char *path) info("Unregister path: %s", path); + __remove_servers(path); + dbus_connection_get_object_user_data(connection, path, (void *) &adapter); @@ -515,6 +517,8 @@ int hcid_dbus_register_device(uint16_t id) DBUS_TYPE_STRING, &pptr, DBUS_TYPE_INVALID); + __probe_servers(path); + return 0; failed: diff --git a/hcid/hcid.h b/hcid/hcid.h index 98dcd3661..03b128079 100644 --- a/hcid/hcid.h +++ b/hcid/hcid.h @@ -213,3 +213,5 @@ int write_device_profiles(bdaddr_t *src, bdaddr_t *dst, const char *profiles); gboolean plugin_init(void); void plugin_cleanup(void); +void __probe_servers(const char *adapter); +void __remove_servers(const char *adapter); diff --git a/hcid/server.c b/hcid/server.c index 70bed47aa..da2401122 100644 --- a/hcid/server.c +++ b/hcid/server.c @@ -42,3 +42,27 @@ void bt_unregister_server(struct bt_server *server) { servers = g_slist_remove(servers, server); } + +void __probe_servers(const char *adapter) +{ + GSList *list; + + for (list = servers; list; list = list->next) { + struct bt_server *server = list->data; + + if (server->probe) + server->probe(adapter); + } +} + +void __remove_servers(const char *adapter) +{ + GSList *list; + + for (list = servers; list; list = list->next) { + struct bt_server *server = list->data; + + if (server->remove) + server->remove(adapter); + } +} diff --git a/hcid/server.h b/hcid/server.h index 5c0f86dc7..f60ab88bd 100644 --- a/hcid/server.h +++ b/hcid/server.h @@ -23,6 +23,8 @@ struct bt_server { const char *uuid; + int (*probe) (const char *adapter); + void (*remove) (const char *adapter); }; int bt_register_server(struct bt_server *server);