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

Unified Diff: src/platform/update_engine/omaha_request_prep_action.cc

Issue 465067: Missed new files in last commit
Patch Set: Created 11 years 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 side-by-side diff with in-line comments
Download patch
Index: src/platform/update_engine/omaha_request_prep_action.cc
diff --git a/src/platform/update_engine/omaha_request_prep_action.cc b/src/platform/update_engine/omaha_request_prep_action.cc
new file mode 100644
index 0000000000000000000000000000000000000000..21d579954d55c78acf263d886793e1c20920392d
--- /dev/null
+++ b/src/platform/update_engine/omaha_request_prep_action.cc
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "update_engine/omaha_request_prep_action.h"
+#include <sys/utsname.h>
+#include <string>
+#include "update_engine/utils.h"
+
+using std::string;
+
+// This gathers local system information and prepares info used by the
+// update check action.
+
+namespace chromeos_update_engine {
+
+void OmahaRequestPrepAction::PerformAction() {
+ // TODO(adlr): honor force_full_update_
+ const string machine_id(GetMachineId());
+ const string version(GetLsbValue("GOOGLE_RELEASE"));
+ const string sp(version + "_" + GetMachineType());
+ const string track(GetLsbValue("GOOGLE_TRACK"));
+
+ UpdateCheckParams out(machine_id, // machine_id
+ machine_id, // user_id (use machine_id)
+ UpdateCheckParams::kOsPlatform,
+ UpdateCheckParams::kOsVersion,
+ sp, // e.g. 0.2.3.3_i686
+ UpdateCheckParams::kAppId,
+ version, // app version (from lsb-release)
+ "en-US", //lang
+ track); // track
+
+ CHECK(HasOutputPipe());
+ SetOutputObject(out);
+ processor_->ActionComplete(this, true);
+}
+
+std::string OmahaRequestPrepAction::GetMachineId() const {
+ FILE* fp = popen("/sbin/ifconfig", "r");
+ if (!fp)
+ return "";
+ string data;
+ for (;;) {
+ char buffer[1000];
+ size_t r = fread(buffer, 1, sizeof(buffer), fp);
+ if (r <= 0)
+ break;
+ data.insert(data.end(), buffer, buffer + r);
+ }
+ fclose(fp);
+ // scan data for MAC address
+ string::size_type pos = data.find(" HWaddr ");
+ if (pos == string::npos)
+ return "";
+ // 3 * 6 - 1 is the number of bytes of the hwaddr.
+ return data.substr(pos + strlen(" HWaddr "), 3 * 6 - 1);
+}
+
+std::string OmahaRequestPrepAction::GetLsbValue(const std::string& key) const {
+ string files[] = {utils::kStatefulPartition + "/etc/lsb-release",
+ "/etc/lsb-release"};
+ for (unsigned int i = 0; i < arraysize(files); i++) {
+ string file_data;
+ if (!utils::ReadFileToString(root_ + files[i], &file_data))
+ continue;
+ string::size_type pos = 0;
+ if (!utils::StringHasPrefix(file_data, key + "=")) {
+ pos = file_data.find(string("\n") + key + "=");
+ if (pos != string::npos)
+ pos++; // advance past \n
+ }
+ if (pos == string::npos)
+ continue;
+ pos += key.size() + 1; // advance past the key and the '='
+ string::size_type endpos = file_data.find('\n', pos);
+ string::size_type length =
+ (endpos == string::npos ? string::npos : endpos - pos);
+ return file_data.substr(pos, length);
+ }
+ // not found
+ return "";
+}
+
+std::string OmahaRequestPrepAction::GetMachineType() const {
+ struct utsname buf;
+ string ret;
+ if (uname(&buf) == 0)
+ ret = buf.machine;
+ return ret;
+}
+
+} // namespace chromeos_update_engine

Powered by Google App Engine
This is Rietveld 408576698