diff options
Diffstat (limited to 'ui/common')
-rw-r--r-- | ui/common/discover-client.c | 48 | ||||
-rw-r--r-- | ui/common/discover-client.h | 10 |
2 files changed, 58 insertions, 0 deletions
diff --git a/ui/common/discover-client.c b/ui/common/discover-client.c index dce74f9..8ad4611 100644 --- a/ui/common/discover-client.c +++ b/ui/common/discover-client.c @@ -112,6 +112,21 @@ static void device_remove(struct discover_client *client, const char *id) talloc_free(device); } +static void plugin_option_add(struct discover_client *client, + struct plugin_option *opt) +{ + talloc_steal(client, opt); + + if (client->ops.plugin_option_add) + client->ops.plugin_option_add(opt, client->ops.cb_arg); +} + +static void plugins_remove(struct discover_client *client) +{ + if (client->ops.plugins_remove) + client->ops.plugins_remove(client->ops.cb_arg); +} + void discover_client_enumerate(struct discover_client *client) { struct boot_option *opt; @@ -155,6 +170,7 @@ static int discover_client_process(void *arg) { struct discover_client *client = arg; struct pb_protocol_message *message; + struct plugin_option *p_opt; struct system_info *sysinfo; struct boot_option *opt; struct status *status; @@ -235,6 +251,20 @@ static int discover_client_process(void *arg) } update_config(client, config); break; + case PB_PROTOCOL_ACTION_PLUGIN_OPTION_ADD: + p_opt = talloc_zero(ctx, struct plugin_option); + + rc = pb_protocol_deserialise_plugin_option(p_opt, message); + if (rc) { + pb_log("%s: no plugin_option?\n", __func__); + goto out; + } + + plugin_option_add(client, p_opt); + break; + case PB_PROTOCOL_ACTION_PLUGINS_REMOVE: + plugins_remove(client); + break; default: pb_log("%s: unknown action %d\n", __func__, message->action); } @@ -404,3 +434,21 @@ int discover_client_send_url(struct discover_client *client, return pb_protocol_write_message(client->fd, message); } + +int discover_client_send_plugin_install(struct discover_client *client, + char *file) +{ + struct pb_protocol_message *message; + int len; + + len = pb_protocol_url_len(file); + + message = pb_protocol_create_message(client, + PB_PROTOCOL_ACTION_PLUGIN_INSTALL, len); + if (!message) + return -1; + + pb_protocol_serialise_url(file, message->payload, len); + + return pb_protocol_write_message(client->fd, message); +} diff --git a/ui/common/discover-client.h b/ui/common/discover-client.h index 95a5d9e..7224691 100644 --- a/ui/common/discover-client.h +++ b/ui/common/discover-client.h @@ -14,6 +14,11 @@ struct pb_boot_data { char *args_sig_file; }; +struct pb_plugin_data { + char *plugin_file; + struct plugin_option *opt; +}; + /** * struct discover_client_ops - Application supplied client info. * @device_add: PB_PROTOCOL_ACTION_ADD event callback. @@ -35,6 +40,8 @@ struct discover_client_ops { int (*boot_option_add)(struct device *dev, struct boot_option *option, void *arg); void (*device_remove)(struct device *device, void *arg); + int (*plugin_option_add)(struct plugin_option *option, void *arg); + int (*plugins_remove)(void *arg); void (*update_status)(struct status *status, void *arg); void (*update_sysinfo)(struct system_info *sysinfo, void *arg); void (*update_config)(struct config *sysinfo, void *arg); @@ -91,5 +98,8 @@ void discover_client_enumerate(struct discover_client *client); /* Send url to config to the discover server */ int discover_client_send_url(struct discover_client *client, char *url); +/* Send plugin file path to discover server to install */ +int discover_client_send_plugin_install(struct discover_client *client, + char *file); #endif |