update_device.py: support OTA zip if use omaha too.
Pass the offset and size to UpdateHandler.
Also added support for payload offset in update_payload.Payload.
Test: applied a local OTA
Change-Id: Ib116ef2c23a11e298118f203814c4ea8dd1629af
diff --git a/scripts/update_payload/payload.py b/scripts/update_payload/payload.py
index d1a99ec..184f805 100644
--- a/scripts/update_payload/payload.py
+++ b/scripts/update_payload/payload.py
@@ -101,13 +101,15 @@
hasher=hasher)
- def __init__(self, payload_file):
+ def __init__(self, payload_file, payload_file_offset=0):
"""Initialize the payload object.
Args:
payload_file: update payload file object open for reading
+ payload_file_offset: the offset of the actual payload
"""
self.payload_file = payload_file
+ self.payload_file_offset = payload_file_offset
self.manifest_hasher = None
self.is_init = False
self.header = None
@@ -159,7 +161,8 @@
return common.Read(
self.payload_file, self.header.metadata_signature_len,
- offset=self.header.size + self.header.manifest_len)
+ offset=self.payload_file_offset + self.header.size +
+ self.header.manifest_len)
def ReadDataBlob(self, offset, length):
"""Reads and returns a single data blob from the update payload.
@@ -175,7 +178,8 @@
PayloadError if a read error occurred.
"""
return common.Read(self.payload_file, length,
- offset=self.data_offset + offset)
+ offset=self.payload_file_offset + self.data_offset +
+ offset)
def Init(self):
"""Initializes the payload object.
@@ -194,6 +198,7 @@
self.manifest_hasher = hashlib.sha256()
# Read the file header.
+ self.payload_file.seek(self.payload_file_offset)
self.header = self._ReadHeader()
# Read the manifest.
@@ -246,7 +251,7 @@
def ResetFile(self):
"""Resets the offset of the payload file to right past the manifest."""
- self.payload_file.seek(self.data_offset)
+ self.payload_file.seek(self.payload_file_offset + self.data_offset)
def IsDelta(self):
"""Returns True iff the payload appears to be a delta."""