Index: omaha_request_action.cc |
diff --git a/omaha_request_action.cc b/omaha_request_action.cc |
index 3c203e271478904b5b1496cf61c55bdf859eef5c..9d14a6d5e25745a3354f76019e2977e9061f4807 100644 |
--- a/omaha_request_action.cc |
+++ b/omaha_request_action.cc |
@@ -10,6 +10,7 @@ |
#include <libxml/xpath.h> |
#include <libxml/xpathInternals.h> |
+#include "base/string_util.h" |
#include "chromeos/obsolete_logging.h" |
#include "update_engine/action_pipe.h" |
#include "update_engine/utils.h" |
@@ -59,15 +60,26 @@ class ScopedPtrXmlXPathContextFree { |
} |
}; |
-// Returns a properly formatted omaha request for a request to Omaha. |
-string FormatRequest(const OmahaRequestParams& params) { |
+string FormatRequest(const OmahaEvent* event, |
+ const OmahaRequestParams& params) { |
+ string body; |
+ if (event == NULL) { |
+ body = string( |
+ " <o:ping active=\"0\"></o:ping>\n" |
+ " <o:updatecheck></o:updatecheck>\n"); |
+ } else { |
+ body = StringPrintf( |
+ " <o:event eventtype=\"%d\" eventresult=\"%d\" " |
+ "errorcode=\"%d\"></o:event>\n", |
+ event->type, event->result, event->error_code); |
+ } |
return string("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
"<o:gupdate xmlns:o=\"http://www.google.com/update2/request\" " |
"version=\"" + XmlEncode(kGupdateVersion) + "\" " |
"updaterversion=\"" + XmlEncode(kGupdateVersion) + "\" " |
"protocol=\"2.0\" " |
- "machineid=\"") + XmlEncode(params.machine_id) + "\" ismachine=\"1\" " |
- "userid=\"" + XmlEncode(params.user_id) + "\">\n" |
+ "machineid=\"") + XmlEncode(params.machine_id) + |
+ "\" ismachine=\"1\" userid=\"" + XmlEncode(params.user_id) + "\">\n" |
" <o:os version=\"" + XmlEncode(params.os_version) + "\" platform=\"" + |
XmlEncode(params.os_platform) + "\" sp=\"" + |
XmlEncode(params.os_sp) + "\"></o:os>\n" |
@@ -75,9 +87,7 @@ string FormatRequest(const OmahaRequestParams& params) { |
XmlEncode(params.app_version) + "\" " |
"lang=\"" + XmlEncode(params.app_lang) + "\" track=\"" + |
XmlEncode(params.app_track) + "\" board=\"" + |
- XmlEncode(params.os_board) + "\">\n" |
- " <o:ping active=\"0\"></o:ping>\n" |
- " <o:updatecheck></o:updatecheck>\n" |
+ XmlEncode(params.os_board) + "\">\n" + body + |
" </o:app>\n" |
"</o:gupdate>\n"; |
} |
@@ -99,8 +109,10 @@ string XmlEncode(const string& input) { |
return string(reinterpret_cast<const char *>(str.get())); |
} |
-OmahaRequestAction::OmahaRequestAction(HttpFetcher* http_fetcher) |
- : http_fetcher_(http_fetcher) {} |
+OmahaRequestAction::OmahaRequestAction(OmahaEvent* event, |
+ HttpFetcher* http_fetcher) |
+ : event_(event), |
+ http_fetcher_(http_fetcher) {} |
OmahaRequestAction::~OmahaRequestAction() {} |
@@ -108,9 +120,9 @@ void OmahaRequestAction::PerformAction() { |
CHECK(HasInputObject()); |
params_ = GetInputObject(); |
http_fetcher_->set_delegate(this); |
- string request_post(FormatRequest(params_)); |
+ string request_post(FormatRequest(event_.get(), params_)); |
http_fetcher_->SetPostData(request_post.data(), request_post.size()); |
- LOG(INFO) << "Checking for update at " << params_.update_url; |
+ LOG(INFO) << "Posting an Omaha request to " << params_.update_url; |
LOG(INFO) << "Request: " << request_post; |
http_fetcher_->BeginTransfer(params_.update_url); |
} |
@@ -195,10 +207,18 @@ off_t ParseInt(const string& str) { |
void OmahaRequestAction::TransferComplete(HttpFetcher *fetcher, |
bool successful) { |
ScopedActionCompleter completer(processor_, this); |
- LOG(INFO) << "Update check response: " << string(response_buffer_.begin(), |
- response_buffer_.end()); |
+ LOG(INFO) << "Omaha request response: " << string(response_buffer_.begin(), |
+ response_buffer_.end()); |
+ |
+ // Events are best effort transactions -- assume they always succeed. |
+ if (IsEvent()) { |
+ CHECK(!HasOutputPipe()) << "No output pipe allowed for event requests."; |
+ completer.set_success(true); |
+ return; |
+ } |
+ |
if (!successful) { |
- LOG(ERROR) << "Update check network transfer failed."; |
+ LOG(ERROR) << "Omaha request network transfer failed."; |
return; |
} |
if (!HasOutputPipe()) { |