| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ | 5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ |
| 6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ | 6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ |
| 7 | 7 |
| 8 #include <inttypes.h> | 8 #include <inttypes.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include <google/protobuf/repeated_field.h> | 12 #include <google/protobuf/repeated_field.h> |
| 13 #include <gtest/gtest_prod.h> // for FRIEND_TEST | 13 #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| 14 | 14 |
| 15 #include "update_engine/file_writer.h" | 15 #include "update_engine/file_writer.h" |
| 16 #include "update_engine/omaha_hash_calculator.h" | 16 #include "update_engine/omaha_hash_calculator.h" |
| 17 #include "update_engine/update_metadata.pb.h" | 17 #include "update_engine/update_metadata.pb.h" |
| 18 | 18 |
| 19 namespace chromeos_update_engine { | 19 namespace chromeos_update_engine { |
| 20 | 20 |
| 21 class PrefsInterface; | 21 class PrefsInterface; |
| 22 | 22 |
| 23 // This class performs the actions in a delta update synchronously. The delta | 23 // This class performs the actions in a delta update synchronously. The delta |
| 24 // update itself should be passed in in chunks as it is received. | 24 // update itself should be passed in in chunks as it is received. |
| 25 | 25 |
| 26 class DeltaPerformer : public FileWriter { | 26 class DeltaPerformer : public FileWriter { |
| 27 public: | 27 public: |
| 28 enum MetadataParseResult { |
| 29 kMetadataParseSuccess, |
| 30 kMetadataParseError, |
| 31 kMetadataParseInsufficientData, |
| 32 }; |
| 33 |
| 28 DeltaPerformer(PrefsInterface* prefs) | 34 DeltaPerformer(PrefsInterface* prefs) |
| 29 : prefs_(prefs), | 35 : prefs_(prefs), |
| 30 fd_(-1), | 36 fd_(-1), |
| 31 kernel_fd_(-1), | 37 kernel_fd_(-1), |
| 32 manifest_valid_(false), | 38 manifest_valid_(false), |
| 33 manifest_metadata_size_(0), | 39 manifest_metadata_size_(0), |
| 34 next_operation_num_(0), | 40 next_operation_num_(0), |
| 35 buffer_offset_(0), | 41 buffer_offset_(0), |
| 36 last_updated_buffer_offset_(kuint64max), | 42 last_updated_buffer_offset_(kuint64max), |
| 37 block_size_(0) {} | 43 block_size_(0) {} |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 // persistent preferences and the new update check response hash. | 99 // persistent preferences and the new update check response hash. |
| 94 static bool CanResumeUpdate(PrefsInterface* prefs, | 100 static bool CanResumeUpdate(PrefsInterface* prefs, |
| 95 std::string update_check_response_hash); | 101 std::string update_check_response_hash); |
| 96 | 102 |
| 97 // Resets the persistent update progress state to indicate that an update | 103 // Resets the persistent update progress state to indicate that an update |
| 98 // can't be resumed. Performs a quick update-in-progress reset if |quick| is | 104 // can't be resumed. Performs a quick update-in-progress reset if |quick| is |
| 99 // true, otherwise resets all progress-related update state. Returns true on | 105 // true, otherwise resets all progress-related update state. Returns true on |
| 100 // success, false otherwise. | 106 // success, false otherwise. |
| 101 static bool ResetUpdateProgress(PrefsInterface* prefs, bool quick); | 107 static bool ResetUpdateProgress(PrefsInterface* prefs, bool quick); |
| 102 | 108 |
| 109 // Attempts to parse the update metadata starting from the beginning of |
| 110 // |payload| into |manifest|. On success, sets |metadata_size| to the total |
| 111 // metadata bytes (including the delta magic and metadata size fields), and |
| 112 // returns kMetadataParseSuccess. Returns kMetadataParseInsufficientData if |
| 113 // more data is needed to parse the complete metadata. Returns |
| 114 // kMetadataParseError if the metadata can't be parsed given the payload. |
| 115 static MetadataParseResult ParsePayloadMetadata( |
| 116 const std::vector<char>& payload, |
| 117 DeltaArchiveManifest* manifest, |
| 118 uint64_t* metadata_size); |
| 119 |
| 103 void set_current_kernel_hash(const std::vector<char>& hash) { | 120 void set_current_kernel_hash(const std::vector<char>& hash) { |
| 104 current_kernel_hash_ = hash; | 121 current_kernel_hash_ = hash; |
| 105 } | 122 } |
| 106 | 123 |
| 107 void set_current_rootfs_hash(const std::vector<char>& hash) { | 124 void set_current_rootfs_hash(const std::vector<char>& hash) { |
| 108 current_rootfs_hash_ = hash; | 125 current_rootfs_hash_ = hash; |
| 109 } | 126 } |
| 110 | 127 |
| 111 private: | 128 private: |
| 112 friend class DeltaPerformerTest; | 129 friend class DeltaPerformerTest; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 // verification. | 222 // verification. |
| 206 std::vector<char> current_kernel_hash_; | 223 std::vector<char> current_kernel_hash_; |
| 207 std::vector<char> current_rootfs_hash_; | 224 std::vector<char> current_rootfs_hash_; |
| 208 | 225 |
| 209 DISALLOW_COPY_AND_ASSIGN(DeltaPerformer); | 226 DISALLOW_COPY_AND_ASSIGN(DeltaPerformer); |
| 210 }; | 227 }; |
| 211 | 228 |
| 212 } // namespace chromeos_update_engine | 229 } // namespace chromeos_update_engine |
| 213 | 230 |
| 214 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ | 231 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_DELTA_PERFORMER_H__ |
| OLD | NEW |