client->devices[client->n_devices - 1] = device;
talloc_steal(client, device);
+ list_init(&device->boot_options);
if (client->ops.device_add)
client->ops.device_add(device, client->ops.cb_arg);
assert(dev);
talloc_steal(dev, opt);
+ list_add(&dev->boot_options, &opt->list);
if (client->ops.boot_option_add)
client->ops.boot_option_add(dev, opt, client->ops.cb_arg);
talloc_free(device);
}
+void discover_client_enumerate(struct discover_client *client)
+{
+ struct boot_option *opt;
+ struct device *device;
+ int i;
+
+ for (i = 0; i < client->n_devices; i++) {
+ device = client->devices[i];
+ if (client->ops.device_add)
+ client->ops.device_add(device, client->ops.cb_arg);
+
+ list_for_each_entry(&device->boot_options, opt, list)
+ if (client->ops.boot_option_add)
+ client->ops.boot_option_add(device, opt,
+ client->ops.cb_arg);
+ }
+}
+
static void update_status(struct discover_client *client,
struct boot_status *status)
{
return pb_protocol_write_message(client->fd, message);
}
+
+int discover_client_send_reinit(struct discover_client *client)
+{
+ struct pb_protocol_message *message;
+
+ message = pb_protocol_create_message(client,
+ PB_PROTOCOL_ACTION_REINIT, 0);
+
+ if (!message)
+ return -1;
+
+ return pb_protocol_write_message(client->fd, message);
+}
+
+int discover_client_send_config(struct discover_client *client,
+ struct config *config)
+{
+ struct pb_protocol_message *message;
+ int len;
+
+ len = pb_protocol_config_len(config);
+
+ message = pb_protocol_create_message(client,
+ PB_PROTOCOL_ACTION_CONFIG, len);
+ if (!message)
+ return -1;
+
+ pb_protocol_serialise_config(config, message->payload, len);
+
+ return pb_protocol_write_message(client->fd, message);
+}