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_); + } } }