struct waitset *waitset;
struct waiter *timeout_waiter;
+ bool default_enabled;
unsigned int sec_to_boot;
struct discover_boot_option *default_boot_option;
handler->waitset = waitset;
handler->dry_run = dry_run;
handler->default_boot_option = NULL;
+ handler->default_enabled = true;
list_init(&handler->unresolved_boot_options);
/* set up our mount point base */
if (handler->default_boot_option)
return;
+ if (!handler->default_enabled)
+ return;
+
handler->default_boot_option = opt;
handler->sec_to_boot = DEFAULT_BOOT_TIMEOUT_SEC;
default_timeout(handler);
boot(handler, opt, cmd, handler->dry_run, boot_status, handler);
}
+
+void device_handler_cancel_default(struct device_handler *handler)
+{
+ struct boot_status status;
+
+ if (handler->timeout_waiter)
+ waiter_remove(handler->timeout_waiter);
+
+ handler->timeout_waiter = NULL;
+ handler->default_enabled = false;
+
+ /* we only send status if we had a default boot option queued */
+ if (!handler->default_boot_option)
+ return;
+
+ handler->default_boot_option = NULL;
+
+ status.type = BOOT_STATUS_INFO;
+ status.progress = -1;
+ status.detail = NULL;
+ status.message = "Default boot cancelled";
+
+ discover_server_notify_boot_status(handler->server, &status);
+}
#endif
}
- if (message->action != PB_PROTOCOL_ACTION_BOOT) {
- pb_log("%s: invalid action %d\n", __func__, message->action);
- return 0;
- }
+ switch (message->action) {
+ case PB_PROTOCOL_ACTION_BOOT:
+ boot_command = talloc(client, struct boot_command);
+
+ rc = pb_protocol_deserialise_boot_command(boot_command,
+ message);
+ if (rc) {
+ pb_log("%s: no boot command?", __func__);
+ return 0;
+ }
+
+ device_handler_boot(client->server->device_handler,
+ boot_command);
+ break;
- boot_command = talloc(client, struct boot_command);
+ case PB_PROTOCOL_ACTION_CANCEL_DEFAULT:
+ device_handler_cancel_default(client->server->device_handler);
+ break;
- rc = pb_protocol_deserialise_boot_command(boot_command, message);
- if (rc) {
- pb_log("%s: no boot command?", __func__);
+ default:
+ pb_log("%s: invalid action %d\n", __func__, message->action);
return 0;
}
- device_handler_boot(client->server->device_handler, boot_command);
return 0;
}
/* PB_PROTOCOL_ACTION_BOOT_OPTION_REMOVE = 0x4, */
PB_PROTOCOL_ACTION_BOOT = 0x5,
PB_PROTOCOL_ACTION_STATUS = 0x6,
+ PB_PROTOCOL_ACTION_CANCEL_DEFAULT = 0x7,
};
struct pb_protocol_message {