OLD | NEW |
| (Empty) |
1 // Copyright 2010 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 | |
16 // Definitions for the request and response data structures that are part of | |
17 // the xml protocol. Each attribute or element that occurs in the xml protocol | |
18 // has a definition here. The request and response xml artifacts are defined | |
19 // inside their corresponding namespaces. | |
20 | |
21 #ifndef OMAHA_COMMON_PROTOCOL_DEFINITION_H_ | |
22 #define OMAHA_COMMON_PROTOCOL_DEFINITION_H_ | |
23 | |
24 #include <vector> | |
25 #include "omaha/common/const_goopdate.h" | |
26 #include "omaha/common/install_manifest.h" | |
27 #include "omaha/common/ping_event.h" | |
28 | |
29 namespace omaha { | |
30 | |
31 namespace xml { | |
32 | |
33 namespace request { | |
34 | |
35 // Defines the structure of the Omaha protocol update request. | |
36 // The structure of the request is: | |
37 // | |
38 // Request | --- OS | |
39 // | -<- App | --- UpdateCheck | |
40 // | --- Data | |
41 // | --- Ping | |
42 // | -<- PingEvent | |
43 // | |
44 // The xml parser traverses this data structure in order to serialize it. The | |
45 // names of the members of structures closely match the names of the elements | |
46 // and attributes in the xml document. | |
47 // | |
48 // TODO(omaha): briefly document the members. | |
49 | |
50 struct OS { | |
51 CString platform; | |
52 CString version; | |
53 CString service_pack; | |
54 CString arch; | |
55 }; | |
56 | |
57 struct UpdateCheck { | |
58 UpdateCheck() : is_valid(false), is_update_disabled(false) {} | |
59 | |
60 // TODO(omaha): this member is not serialized. Use pointers to indicate | |
61 // optional elements instead of is_valid. | |
62 bool is_valid; | |
63 | |
64 bool is_update_disabled; | |
65 | |
66 CString tt_token; | |
67 }; | |
68 | |
69 // For now, only a single "install" data is supported. | |
70 struct Data { | |
71 CString install_data_index; | |
72 }; | |
73 | |
74 // didrun element. The element is named "ping" for legacy reasons. | |
75 struct Ping { | |
76 Ping() : active(ACTIVE_UNKNOWN), | |
77 days_since_last_active_ping(0), | |
78 days_since_last_roll_call(0) {} | |
79 | |
80 ActiveStates active; | |
81 int days_since_last_active_ping; | |
82 int days_since_last_roll_call; | |
83 }; | |
84 | |
85 struct App { | |
86 App() : install_time_diff_sec(0) {} | |
87 | |
88 CString app_id; | |
89 | |
90 CString version; | |
91 | |
92 CString next_version; | |
93 | |
94 CString ap; | |
95 | |
96 CString lang; | |
97 | |
98 CString iid; | |
99 | |
100 CString brand_code; | |
101 | |
102 CString client_id; | |
103 | |
104 CString experiments; | |
105 | |
106 int install_time_diff_sec; | |
107 | |
108 // Optional update check. | |
109 UpdateCheck update_check; | |
110 | |
111 // Optional data. | |
112 Data data; | |
113 | |
114 // Optional 'did run' ping. | |
115 Ping ping; | |
116 | |
117 // Progress/result pings. | |
118 PingEventVector ping_events; | |
119 }; | |
120 | |
121 struct Request { | |
122 Request() : is_machine(false), check_period_sec(-1) {} | |
123 | |
124 bool is_machine; | |
125 | |
126 CString uid; | |
127 | |
128 CString protocol_version; | |
129 | |
130 CString omaha_version; | |
131 | |
132 CString install_source; | |
133 | |
134 CString origin_url; | |
135 | |
136 // Identifies the source of the request as a test/production prober system. | |
137 CString test_source; | |
138 | |
139 // Unique identifier for this request, used to associate the same request | |
140 // received multiple times on the server. | |
141 CString request_id; | |
142 | |
143 // Unique identifier for this session, used to correlate multiple requests | |
144 // associated with a single operation by the Omaha client. | |
145 CString session_id; | |
146 | |
147 // Time between update checks in seconds. | |
148 // TODO(omaha): see if we can enforce by convention that -1 means it is | |
149 // using the default value. | |
150 int check_period_sec; | |
151 | |
152 OS os; | |
153 | |
154 std::vector<App> apps; | |
155 }; | |
156 | |
157 } // namespace request | |
158 | |
159 namespace response { | |
160 | |
161 // Defines an Omaha protocol update response. The structure of the response is: | |
162 // | |
163 // Response | --- DayStart | |
164 // | -<- App | --- UpdateCheck | --- Urls | |
165 // | --- InstallManifest | --- Packages | |
166 // | --- Actions | |
167 // | --- Data | |
168 // | --- Ping | |
169 // | -<- Event | |
170 // | |
171 // The xml parser traverses the xml dom and populates the data members of | |
172 // the response. The names of the members of structures closely match the names | |
173 // of the elements and attributes in the xml document. | |
174 // | |
175 // TODO(omaha): briefly document the members. | |
176 | |
177 struct UpdateCheck { | |
178 CString status; | |
179 | |
180 CString tt_token; | |
181 | |
182 CString error_url; // URL describing error. | |
183 | |
184 std::vector<CString> urls; | |
185 | |
186 InstallManifest install_manifest; | |
187 }; | |
188 | |
189 // For now, only a single "install" data is supported. | |
190 struct Data { | |
191 CString status; | |
192 | |
193 CString install_data_index; | |
194 CString install_data; | |
195 }; | |
196 | |
197 struct Ping { | |
198 CString status; | |
199 }; | |
200 | |
201 struct Event { | |
202 CString status; | |
203 }; | |
204 | |
205 struct App { | |
206 CString status; | |
207 | |
208 // TODO(omaha): rename to app_id. | |
209 CString appid; | |
210 | |
211 CString experiments; | |
212 | |
213 UpdateCheck update_check; | |
214 | |
215 std::vector<Data> data; | |
216 | |
217 Ping ping; | |
218 | |
219 std::vector<Event> events; | |
220 }; | |
221 | |
222 struct DayStart { | |
223 DayStart() : elapsed_seconds(0) {} | |
224 | |
225 int elapsed_seconds; | |
226 }; | |
227 | |
228 struct Response { | |
229 CString protocol; | |
230 DayStart day_start; | |
231 std::vector<App> apps; | |
232 }; | |
233 | |
234 } // namespace response | |
235 | |
236 } // namespace xml | |
237 | |
238 } // namespace omaha | |
239 | |
240 #endif // OMAHA_COMMON_PROTOCOL_DEFINITION_H_ | |
241 | |
OLD | NEW |