Android: Support offset different from 0.
The non-Brillo update workflow expects to pass an offset that can be
different from 0. This patch uses this base offset to fetch the right
subset of the paylod URL.
Bug: 25631949
TEST=Deployed on a device. Passing --offset to udpate_engine_client makes the HTTP request include the offset.
Change-Id: I8f37907fff6feb8d9e654cb1cbcf7b9dac3217e2
diff --git a/update_attempter_android.cc b/update_attempter_android.cc
index 131efbb..7a9a2ec 100644
--- a/update_attempter_android.cc
+++ b/update_attempter_android.cc
@@ -115,6 +115,7 @@
install_plan_.download_url = payload_url;
install_plan_.version = "";
install_plan_.payload_size = payload_size;
+ base_offset_ = payload_offset;
// TODO(deymo): Retrieve the payload_hash from the properties.
install_plan_.payload_hash = "";
install_plan_.metadata_size = 0;
@@ -349,19 +350,27 @@
// Resuming an update so fetch the update manifest metadata first.
int64_t manifest_metadata_size = 0;
prefs_->GetInt64(kPrefsManifestMetadataSize, &manifest_metadata_size);
- fetcher->AddRange(0, manifest_metadata_size);
+ fetcher->AddRange(base_offset_, manifest_metadata_size);
// If there're remaining unprocessed data blobs, fetch them. Be careful not
// to request data beyond the end of the payload to avoid 416 HTTP response
// error codes.
int64_t next_data_offset = 0;
prefs_->GetInt64(kPrefsUpdateStateNextDataOffset, &next_data_offset);
uint64_t resume_offset = manifest_metadata_size + next_data_offset;
- if (!install_plan_.payload_size ||
- resume_offset < install_plan_.payload_size) {
- fetcher->AddRange(resume_offset);
+ if (!install_plan_.payload_size) {
+ fetcher->AddRange(base_offset_ + resume_offset);
+ } else if (resume_offset < install_plan_.payload_size) {
+ fetcher->AddRange(base_offset_ + resume_offset,
+ install_plan_.payload_size - resume_offset);
}
} else {
- fetcher->AddRange(0);
+ if (install_plan_.payload_size) {
+ fetcher->AddRange(base_offset_, install_plan_.payload_size);
+ } else {
+ // If no payload size is passed we assume we read until the end of the
+ // stream.
+ fetcher->AddRange(base_offset_);
+ }
}
}