diff options
| -rw-r--r-- | hcid/dbus-hci.c | 4 | ||||
| -rw-r--r-- | hcid/hcid.h | 2 | ||||
| -rw-r--r-- | hcid/server.c | 24 | ||||
| -rw-r--r-- | hcid/server.h | 2 | 
4 files changed, 32 insertions, 0 deletions
diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index 62209956..69c289d6 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 98dcd366..03b12807 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 70bed47a..da240112 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 5c0f86dc..f60ab88b 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);  | 
