blob: 0ac09df16a9bdafd1aa9cd639269159d5afde2c5 [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Jay Srinivasan08262882012-12-28 19:29:43 -080016
Gilad Arnoldcf175a02014-07-10 16:48:47 -070017#ifndef UPDATE_ENGINE_OMAHA_RESPONSE_H_
18#define UPDATE_ENGINE_OMAHA_RESPONSE_H_
Jay Srinivasan08262882012-12-28 19:29:43 -080019
20#include <fcntl.h>
21#include <sys/stat.h>
22#include <sys/types.h>
23
Zentaro Kavanagh0ff621c2018-07-13 13:06:56 -070024#include <limits>
Jay Srinivasan08262882012-12-28 19:29:43 -080025#include <string>
26#include <vector>
27
28namespace chromeos_update_engine {
29
30// This struct encapsulates the data Omaha's response for the request.
31// The strings in this struct are not XML escaped.
32struct OmahaResponse {
Jay Srinivasan08262882012-12-28 19:29:43 -080033 // True iff there is an update to be downloaded.
Alex Deymo8e18f932015-03-27 16:16:59 -070034 bool update_exists = false;
Jay Srinivasan08262882012-12-28 19:29:43 -080035
36 // If non-zero, server-dictated poll interval in seconds.
Alex Deymo8e18f932015-03-27 16:16:59 -070037 int poll_interval = 0;
Jay Srinivasan08262882012-12-28 19:29:43 -080038
39 // These are only valid if update_exists is true:
Chris Sosa3b748432013-06-20 16:42:59 -070040 std::string version;
Aaron Wood7dcdedf2017-09-06 17:17:41 -070041 std::string system_version;
Jay Srinivasan08262882012-12-28 19:29:43 -080042
Sen Jiang0affc2c2017-02-10 15:55:05 -080043 struct Package {
44 // The ordered list of URLs in the Omaha response. Each item is a complete
45 // URL (i.e. in terms of Omaha XML, each value is a urlBase + packageName)
46 std::vector<std::string> payload_urls;
47 uint64_t size = 0;
48 uint64_t metadata_size = 0;
49 std::string metadata_signature;
50 std::string hash;
Sen Jiangcdd52062017-05-18 15:33:10 -070051 // True if the payload described in this response is a delta payload.
52 // False if it's a full payload.
53 bool is_delta = false;
Sen Jiang0affc2c2017-02-10 15:55:05 -080054 };
55 std::vector<Package> packages;
Jay Srinivasan08262882012-12-28 19:29:43 -080056
57 std::string more_info_url;
Jay Srinivasan08262882012-12-28 19:29:43 -080058 std::string deadline;
Alex Deymo8e18f932015-03-27 16:16:59 -070059 int max_days_to_scatter = 0;
Jay Srinivasan08262882012-12-28 19:29:43 -080060 // The number of URL-related failures to tolerate before moving on to the
61 // next URL in the current pass. This is a configurable value from the
62 // Omaha Response attribute, if ever we need to fine tune the behavior.
Alex Deymo8e18f932015-03-27 16:16:59 -070063 uint32_t max_failure_count_per_url = 0;
64 bool prompt = false;
Jay Srinivasan08262882012-12-28 19:29:43 -080065
Alex Vakulenko072359c2014-07-18 11:41:07 -070066 // True if the Omaha rule instructs us to disable the back-off logic
Jay Srinivasan08262882012-12-28 19:29:43 -080067 // on the client altogether. False otherwise.
Alex Deymo8e18f932015-03-27 16:16:59 -070068 bool disable_payload_backoff = false;
David Zeuthen8f191b22013-08-06 12:27:50 -070069
70 // True if the Omaha rule instructs us to disable p2p for downloading.
Alex Deymo8e18f932015-03-27 16:16:59 -070071 bool disable_p2p_for_downloading = false;
David Zeuthen8f191b22013-08-06 12:27:50 -070072
73 // True if the Omaha rule instructs us to disable p2p for sharing.
Alex Deymo8e18f932015-03-27 16:16:59 -070074 bool disable_p2p_for_sharing = false;
David Zeuthene7f89172013-10-31 10:21:04 -070075
Sen Jiangfe284402018-03-21 14:03:50 -070076 // True if the Omaha rule instructs us to powerwash.
77 bool powerwash_required = false;
78
David Zeuthene7f89172013-10-31 10:21:04 -070079 // If not blank, a base-64 encoded representation of the PEM-encoded
80 // public key in the response.
81 std::string public_key_rsa;
David Zeuthen639aa362014-02-03 16:23:44 -080082
83 // If not -1, the number of days since the epoch Jan 1, 2007 0:00
84 // PST, according to the Omaha Server's clock and timezone (PST8PDT,
85 // aka "Pacific Time".)
Alex Deymo8e18f932015-03-27 16:16:59 -070086 int install_date_days = -1;
Marton Hunyady199152d2018-05-07 19:08:48 +020087
88 // True if the returned image is a rollback for the device.
89 bool is_rollback = false;
Zentaro Kavanagh0ff621c2018-07-13 13:06:56 -070090
91 struct RollbackKeyVersion {
92 // Kernel key version. 0xffff if the value is unknown.
93 uint16_t kernel_key = std::numeric_limits<uint16_t>::max();
94 // Kernel version. 0xffff if the value is unknown.
95 uint16_t kernel = std::numeric_limits<uint16_t>::max();
96 // Firmware key verison. 0xffff if the value is unknown.
97 uint16_t firmware_key = std::numeric_limits<uint16_t>::max();
98 // Firmware version. 0xffff if the value is unknown.
99 uint16_t firmware = std::numeric_limits<uint16_t>::max();
100 };
101
102 // Key versions of the returned rollback image. Values are 0xffff if the
103 // image not a rollback, or the fields were not present.
104 RollbackKeyVersion rollback_key_version;
Jay Srinivasan08262882012-12-28 19:29:43 -0800105};
Alex Vakulenkoa3cf75a2016-01-20 07:56:15 -0800106static_assert(sizeof(off_t) == 8, "off_t not 64 bit");
Jay Srinivasan08262882012-12-28 19:29:43 -0800107
108} // namespace chromeos_update_engine
109
Gilad Arnoldcf175a02014-07-10 16:48:47 -0700110#endif // UPDATE_ENGINE_OMAHA_RESPONSE_H_