Parse and expose end-of-life flag.
Omaha update or noupdate response can include _key=value pairs with
arbitrary data. One of those key can be "_eol" with the one of the
values "supported", "security-only" or "eol" which notifies the device
the end-of-life status of the device with respect to updates. This
information is now exposed via GetEolStatus() to the client so it
can be properly displayed in the UI.
Bug: 27924505
TEST=Added unittest. Run `update_engine_client --eol_status` on link.
Change-Id: Icc15f25b4d0b19cc894f5afc52ac7c43c7818982
diff --git a/common_service.cc b/common_service.cc
index f0b818f..ade5349 100644
--- a/common_service.cc
+++ b/common_service.cc
@@ -33,9 +33,10 @@
#include "update_engine/common/utils.h"
#include "update_engine/connection_manager_interface.h"
#include "update_engine/omaha_request_params.h"
+#include "update_engine/omaha_utils.h"
#include "update_engine/p2p_manager.h"
-#include "update_engine/update_attempter.h"
#include "update_engine/payload_state_interface.h"
+#include "update_engine/update_attempter.h"
using base::StringPrintf;
using brillo::ErrorPtr;
@@ -325,4 +326,21 @@
*out_last_attempt_error = static_cast<int>(error_code);
return true;
}
+
+bool UpdateEngineService::GetEolStatus(ErrorPtr* error,
+ int32_t* out_eol_status) {
+ PrefsInterface* prefs = system_state_->prefs();
+
+ string str_eol_status;
+ if (prefs->Exists(kPrefsOmahaEolStatus) &&
+ !prefs->GetString(kPrefsOmahaEolStatus, &str_eol_status)) {
+ LogAndSetError(error, FROM_HERE, "Error getting the end-of-life status.");
+ return false;
+ }
+
+ // StringToEolStatus will return kSupported for invalid values.
+ *out_eol_status = static_cast<int32_t>(StringToEolStatus(str_eol_status));
+ return true;
+}
+
} // namespace chromeos_update_engine