+void discover_server_notify_device_add(struct discover_server *server,
+ struct device *device)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_device_add_message(server, client, device);
+
+}
+
+void discover_server_notify_boot_option_add(struct discover_server *server,
+ struct boot_option *boot_option)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_boot_option_add_message(server, client, boot_option);
+}
+
+void discover_server_notify_device_remove(struct discover_server *server,
+ struct device *device)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_device_remove_message(server, client, device->id);
+
+}
+
+void discover_server_notify_boot_status(struct discover_server *server,
+ struct status *status)
+{
+ struct statuslog_entry *entry;
+ struct client *client;
+
+ /* Duplicate the status struct to add to the backlog */
+ entry = talloc(server, struct statuslog_entry);
+ if (!entry) {
+ pb_log("Failed to allocated saved status!\n");
+ } else {
+ entry->status = talloc(entry, struct status);
+ if (entry->status) {
+ entry->status->type = status->type;
+ entry->status->message = talloc_strdup(entry->status,
+ status->message);
+ entry->status->backlog = true;
+ list_add_tail(&server->status, &entry->list);
+ } else {
+ talloc_free(entry);
+ }
+ }
+
+ list_for_each_entry(&server->clients, client, list)
+ write_boot_status_message(server, client, status);
+}
+
+void discover_server_notify_system_info(struct discover_server *server,
+ const struct system_info *sysinfo)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_system_info_message(server, client, sysinfo);
+}
+
+void discover_server_notify_config(struct discover_server *server,
+ const struct config *config)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_config_message(server, client, config);
+}
+
+void discover_server_notify_plugin_option_add(struct discover_server *server,
+ struct plugin_option *opt)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_plugin_option_add_message(server, client, opt);
+}
+
+void discover_server_notify_plugins_remove(struct discover_server *server)
+{
+ struct client *client;
+
+ list_for_each_entry(&server->clients, client, list)
+ write_plugins_remove_message(server, client);
+}
+
+void discover_server_set_device_source(struct discover_server *server,
+ struct device_handler *handler)
+{
+ server->device_handler = handler;
+}
+
+struct discover_server *discover_server_init(struct waitset *waitset)