X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ui%2Fcommon%2Fdiscover-client.c;h=14f36da4e9004871f7704e8f76dcaea2a3fe253b;hb=71da0c6cb80e3708213a08c06e71f099534bcd2a;hp=fbf70bae9cbbe56897e18dfd9c119d64637b3a1f;hpb=85bd33ca9777c386359b9b3899888316354a4e1f;p=petitboot diff --git a/ui/common/discover-client.c b/ui/common/discover-client.c index fbf70ba..14f36da 100644 --- a/ui/common/discover-client.c +++ b/ui/common/discover-client.c @@ -60,6 +60,7 @@ static void device_add(struct discover_client *client, struct device *device) 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); @@ -77,6 +78,7 @@ static void boot_option_add(struct discover_client *client, 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); @@ -110,6 +112,24 @@ static void device_remove(struct discover_client *client, const char *id) 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) { @@ -363,3 +383,21 @@ int discover_client_send_config(struct discover_client *client, return pb_protocol_write_message(client->fd, message); } + +int discover_client_send_url(struct discover_client *client, + char *url) +{ + struct pb_protocol_message *message; + int len; + + len = pb_protocol_url_len(url); + + message = pb_protocol_create_message(client, + PB_PROTOCOL_ACTION_ADD_URL, len); + if (!message) + return -1; + + pb_protocol_serialise_url(url, message->payload, len); + + return pb_protocol_write_message(client->fd, message); +}