@@ -69,6 +69,15 @@ server_op_res_t save_state_string(char *key, update_state_t value)
SERVER_OK : SERVER_EERR;
}
+server_op_res_t save_sourcetype_string(char *key, sourcetype value)
+{
+ CHECK_STATE_VAR(key);
+ if (value < SOURCE_UNKNOWN || value > SOURCE_LOCAL)
+ return -EINVAL;
+ return bootloader_env_set(key, get_sourcetype_string(value)) == 0 ?
+ SERVER_OK : SERVER_EERR;
+}
+
server_op_res_t read_state(char *key, update_state_t *value)
{
char *envval;
@@ -584,6 +584,7 @@ void *network_initializer(void *data)
*/
if (!software->globals.dry_run && software->bootloader_transaction_marker) {
save_state_string((char*)BOOTVAR_TRANSACTION, STATE_IN_PROGRESS);
+ save_sourcetype_string((char*)BOOTVAR_SOURCE_TYPE, req->source);
}
notify(RUN, RECOVERY_NO_ERROR, INFOLEVEL, "Installation in progress");
@@ -391,6 +391,7 @@ static int install_from_file(char *fname, int check)
*/
if (!swcfg.globals.dry_run && swcfg.bootloader_transaction_marker) {
save_state_string((char*)BOOTVAR_TRANSACTION, STATE_IN_PROGRESS);
+ save_sourcetype_string((char*)BOOTVAR_SOURCE_TYPE, SOURCE_LOCAL);
}
swcfg.globals.dry_run = swcfg.globals.default_dry_run;
@@ -16,6 +16,7 @@
#include "swupdate_dict.h"
#define BOOTVAR_TRANSACTION "recovery_status"
+#define BOOTVAR_SOURCE_TYPE "source_type"
/*
* swupdate uses SHA256 hashes
@@ -42,4 +42,17 @@ typedef enum {
} // extern "C"
#endif
+static inline char* get_sourcetype_string(sourcetype srctype) {
+ switch (srctype) {
+ case SOURCE_UNKNOWN: return (char*)"unknown";
+ case SOURCE_WEBSERVER: return (char*)"webserver";
+ case SOURCE_SURICATTA: return (char*)"suricatta";
+ case SOURCE_DOWNLOADER: return (char*)"downloader";
+ case SOURCE_LOCAL: return (char*)"local";
+ default: break;
+ }
+ return (char*)"<nil>";
+}
+
+
#endif
Signed-off-by: Vincent Prince <vincent.prince.external@saftbatteries.com> --- core/state.c | 9 +++++++++ core/stream_interface.c | 1 + core/swupdate.c | 1 + include/swupdate.h | 1 + include/swupdate_status.h | 13 +++++++++++++ 5 files changed, 25 insertions(+)