Parse multiple packages from Omaha response.
The multi-payload info are stored in OmahaResponse and InstallPlan, but
we still can only apply the first payload for now.
Bug: 36252799
Test: mma -j
Test: update_engine_unittests
Change-Id: I5ca63944ae9082670d0e67888409374f140d4245
(cherry picked from commit 2aba8a87d4fac245a2e2d238b3159f8eabce630f)
diff --git a/update_attempter_android.cc b/update_attempter_android.cc
index 6b055af..a39379f 100644
--- a/update_attempter_android.cc
+++ b/update_attempter_android.cc
@@ -145,23 +145,25 @@
install_plan_.download_url = payload_url;
install_plan_.version = "";
base_offset_ = payload_offset;
- install_plan_.payload_size = payload_size;
- if (!install_plan_.payload_size) {
+ InstallPlan::Payload payload;
+ payload.size = payload_size;
+ if (!payload.size) {
if (!base::StringToUint64(headers[kPayloadPropertyFileSize],
- &install_plan_.payload_size)) {
- install_plan_.payload_size = 0;
+ &payload.size)) {
+ payload.size = 0;
}
}
if (!brillo::data_encoding::Base64Decode(headers[kPayloadPropertyFileHash],
- &install_plan_.payload_hash)) {
+ &payload.hash)) {
LOG(WARNING) << "Unable to decode base64 file hash: "
<< headers[kPayloadPropertyFileHash];
}
if (!base::StringToUint64(headers[kPayloadPropertyMetadataSize],
- &install_plan_.metadata_size)) {
- install_plan_.metadata_size = 0;
+ &payload.metadata_size)) {
+ payload.metadata_size = 0;
}
- install_plan_.metadata_signature = "";
+ install_plan_.payloads.push_back(payload);
+
// The |public_key_rsa| key would override the public key stored on disk.
install_plan_.public_key_rsa = "";
@@ -430,7 +432,7 @@
status_ = status;
for (auto observer : daemon_state_->service_observers()) {
observer->SendStatusUpdate(
- 0, download_progress_, status_, "", install_plan_.payload_size);
+ 0, download_progress_, status_, "", install_plan_.payloads[0].size);
}
last_notify_time_ = TimeTicks::Now();
}
@@ -509,15 +511,15 @@
prefs_->GetInt64(kPrefsUpdateStateNextDataOffset, &next_data_offset);
uint64_t resume_offset =
manifest_metadata_size + manifest_signature_size + next_data_offset;
- if (!install_plan_.payload_size) {
+ if (!install_plan_.payloads[0].size) {
fetcher->AddRange(base_offset_ + resume_offset);
- } else if (resume_offset < install_plan_.payload_size) {
+ } else if (resume_offset < install_plan_.payloads[0].size) {
fetcher->AddRange(base_offset_ + resume_offset,
- install_plan_.payload_size - resume_offset);
+ install_plan_.payloads[0].size - resume_offset);
}
} else {
- if (install_plan_.payload_size) {
- fetcher->AddRange(base_offset_, install_plan_.payload_size);
+ if (install_plan_.payloads[0].size) {
+ fetcher->AddRange(base_offset_, install_plan_.payloads[0].size);
} else {
// If no payload size is passed we assume we read until the end of the
// stream.