Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Side by Side Diff: omaha_request_action.cc

Issue 4432002: AU: Separate error codes for different OmahaRequestAction failures. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git@master
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mock_http_fetcher.cc ('k') | omaha_request_action_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "update_engine/omaha_request_action.h" 5 #include "update_engine/omaha_request_action.h"
6 6
7 #include <inttypes.h> 7 #include <inttypes.h>
8 8
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 322
323 // Events are best effort transactions -- assume they always succeed. 323 // Events are best effort transactions -- assume they always succeed.
324 if (IsEvent()) { 324 if (IsEvent()) {
325 CHECK(!HasOutputPipe()) << "No output pipe allowed for event requests."; 325 CHECK(!HasOutputPipe()) << "No output pipe allowed for event requests.";
326 completer.set_code(kActionCodeSuccess); 326 completer.set_code(kActionCodeSuccess);
327 return; 327 return;
328 } 328 }
329 329
330 if (!successful) { 330 if (!successful) {
331 LOG(ERROR) << "Omaha request network transfer failed."; 331 LOG(ERROR) << "Omaha request network transfer failed.";
332 int code = GetHTTPResponseCode();
333 // Makes sure we send sane error values.
334 if (code < 0 || code >= 1000) {
335 code = 999;
336 }
337 completer.set_code(static_cast<ActionExitCode>(
338 kActionCodeOmahaRequestHTTPResponseBase + code));
332 return; 339 return;
333 } 340 }
334 if (!HasOutputPipe()) { 341 if (!HasOutputPipe()) {
335 // Just set success to whether or not the http transfer succeeded, 342 // Just set success to whether or not the http transfer succeeded,
336 // which must be true at this point in the code. 343 // which must be true at this point in the code.
337 completer.set_code(kActionCodeSuccess); 344 completer.set_code(kActionCodeSuccess);
338 return; 345 return;
339 } 346 }
340 347
341 // parse our response and fill the fields in the output object 348 // parse our response and fill the fields in the output object
342 scoped_ptr_malloc<xmlDoc, ScopedPtrXmlDocFree> doc( 349 scoped_ptr_malloc<xmlDoc, ScopedPtrXmlDocFree> doc(
343 xmlParseMemory(&response_buffer_[0], response_buffer_.size())); 350 xmlParseMemory(&response_buffer_[0], response_buffer_.size()));
344 if (!doc.get()) { 351 if (!doc.get()) {
345 LOG(ERROR) << "Omaha response not valid XML"; 352 LOG(ERROR) << "Omaha response not valid XML";
353 completer.set_code(response_buffer_.empty() ?
354 kActionCodeOmahaRequestEmptyResponseError :
355 kActionCodeOmahaRequestXMLParseError);
346 return; 356 return;
347 } 357 }
348 358
349 // If a ping was sent, update the last ping day preferences based on 359 // If a ping was sent, update the last ping day preferences based on
350 // the server daystart response. 360 // the server daystart response.
351 if (ShouldPing(ping_active_days_) || 361 if (ShouldPing(ping_active_days_) ||
352 ShouldPing(ping_roll_call_days_) || 362 ShouldPing(ping_roll_call_days_) ||
353 ping_active_days_ == kPingTimeJump || 363 ping_active_days_ == kPingTimeJump ||
354 ping_roll_call_days_ == kPingTimeJump) { 364 ping_roll_call_days_ == kPingTimeJump) {
355 LOG_IF(ERROR, !UpdateLastPingDays(doc.get(), prefs_)) 365 LOG_IF(ERROR, !UpdateLastPingDays(doc.get(), prefs_))
356 << "Failed to update the last ping day preferences!"; 366 << "Failed to update the last ping day preferences!";
357 } 367 }
358 368
359 static const char* kNamespace("x"); 369 static const char* kNamespace("x");
360 static const char* kUpdatecheckNodeXpath("/x:gupdate/x:app/x:updatecheck"); 370 static const char* kUpdatecheckNodeXpath("/x:gupdate/x:app/x:updatecheck");
361 static const char* kNsUrl("http://www.google.com/update2/response"); 371 static const char* kNsUrl("http://www.google.com/update2/response");
362 372
363 scoped_ptr_malloc<xmlXPathObject, ScopedPtrXmlXPathObjectFree> 373 scoped_ptr_malloc<xmlXPathObject, ScopedPtrXmlXPathObjectFree>
364 xpath_nodeset(GetNodeSet(doc.get(), 374 xpath_nodeset(GetNodeSet(doc.get(),
365 ConstXMLStr(kUpdatecheckNodeXpath), 375 ConstXMLStr(kUpdatecheckNodeXpath),
366 ConstXMLStr(kNamespace), 376 ConstXMLStr(kNamespace),
367 ConstXMLStr(kNsUrl))); 377 ConstXMLStr(kNsUrl)));
368 if (!xpath_nodeset.get()) { 378 if (!xpath_nodeset.get()) {
379 completer.set_code(kActionCodeOmahaRequestNoUpdateCheckNode);
369 return; 380 return;
370 } 381 }
371 xmlNodeSet* nodeset = xpath_nodeset->nodesetval; 382 xmlNodeSet* nodeset = xpath_nodeset->nodesetval;
372 CHECK(nodeset) << "XPath missing NodeSet"; 383 CHECK(nodeset) << "XPath missing NodeSet";
373 CHECK_GE(nodeset->nodeNr, 1); 384 CHECK_GE(nodeset->nodeNr, 1);
374 385
375 xmlNode* updatecheck_node = nodeset->nodeTab[0]; 386 xmlNode* updatecheck_node = nodeset->nodeTab[0];
376 // get status 387 // get status
377 if (!xmlHasProp(updatecheck_node, ConstXMLStr("status"))) { 388 if (!xmlHasProp(updatecheck_node, ConstXMLStr("status"))) {
378 LOG(ERROR) << "Response missing status"; 389 LOG(ERROR) << "Response missing status";
390 completer.set_code(kActionCodeOmahaRequestNoUpdateCheckStatus);
379 return; 391 return;
380 } 392 }
381 393
382 OmahaResponse output_object; 394 OmahaResponse output_object;
383 base::StringToInt(XmlGetProperty(updatecheck_node, "PollInterval"), 395 base::StringToInt(XmlGetProperty(updatecheck_node, "PollInterval"),
384 &output_object.poll_interval); 396 &output_object.poll_interval);
385 const string status(XmlGetProperty(updatecheck_node, "status")); 397 const string status(XmlGetProperty(updatecheck_node, "status"));
386 if (status == "noupdate") { 398 if (status == "noupdate") {
387 LOG(INFO) << "No update."; 399 LOG(INFO) << "No update.";
388 output_object.update_exists = false; 400 output_object.update_exists = false;
389 SetOutputObject(output_object); 401 SetOutputObject(output_object);
390 completer.set_code(kActionCodeSuccess); 402 completer.set_code(kActionCodeSuccess);
391 return; 403 return;
392 } 404 }
393 405
394 if (status != "ok") { 406 if (status != "ok") {
395 LOG(ERROR) << "Unknown status: " << status; 407 LOG(ERROR) << "Unknown status: " << status;
408 completer.set_code(kActionCodeOmahaRequestBadUpdateCheckStatus);
396 return; 409 return;
397 } 410 }
398 411
399 // In best-effort fashion, fetch the rest of the expected attributes 412 // In best-effort fashion, fetch the rest of the expected attributes
400 // from the updatecheck node, then return the object 413 // from the updatecheck node, then return the object
401 output_object.update_exists = true; 414 output_object.update_exists = true;
402 completer.set_code(kActionCodeSuccess); 415 completer.set_code(kActionCodeSuccess);
403 416
404 output_object.display_version = 417 output_object.display_version =
405 XmlGetProperty(updatecheck_node, "DisplayVersion"); 418 XmlGetProperty(updatecheck_node, "DisplayVersion");
406 output_object.codebase = XmlGetProperty(updatecheck_node, "codebase"); 419 output_object.codebase = XmlGetProperty(updatecheck_node, "codebase");
407 output_object.more_info_url = XmlGetProperty(updatecheck_node, "MoreInfo"); 420 output_object.more_info_url = XmlGetProperty(updatecheck_node, "MoreInfo");
408 output_object.hash = XmlGetProperty(updatecheck_node, "sha256"); 421 output_object.hash = XmlGetProperty(updatecheck_node, "sha256");
409 output_object.size = ParseInt(XmlGetProperty(updatecheck_node, "size")); 422 output_object.size = ParseInt(XmlGetProperty(updatecheck_node, "size"));
410 output_object.needs_admin = 423 output_object.needs_admin =
411 XmlGetProperty(updatecheck_node, "needsadmin") == "true"; 424 XmlGetProperty(updatecheck_node, "needsadmin") == "true";
412 output_object.prompt = XmlGetProperty(updatecheck_node, "Prompt") == "true"; 425 output_object.prompt = XmlGetProperty(updatecheck_node, "Prompt") == "true";
413 output_object.is_delta = 426 output_object.is_delta =
414 XmlGetProperty(updatecheck_node, "IsDelta") == "true"; 427 XmlGetProperty(updatecheck_node, "IsDelta") == "true";
415 output_object.deadline = XmlGetProperty(updatecheck_node, "deadline"); 428 output_object.deadline = XmlGetProperty(updatecheck_node, "deadline");
416 SetOutputObject(output_object); 429 SetOutputObject(output_object);
417 } 430 }
418 431
419 }; // namespace chromeos_update_engine 432 }; // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « mock_http_fetcher.cc ('k') | omaha_request_action_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698