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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "update_engine/omaha_request_prep_action.h"
6 #include <sys/utsname.h>
7 #include <string>
8 #include "update_engine/utils.h"
9
10 using std::string;
11
12 // This gathers local system information and prepares info used by the
13 // update check action.
14
15 namespace chromeos_update_engine {
16
17 void OmahaRequestPrepAction::PerformAction() {
18 // TODO(adlr): honor force_full_update_
19 const string machine_id(GetMachineId());
20 const string version(GetLsbValue("GOOGLE_RELEASE"));
21 const string sp(version + "_" + GetMachineType());
22 const string track(GetLsbValue("GOOGLE_TRACK"));
23
24 UpdateCheckParams out(machine_id, // machine_id
25 machine_id, // user_id (use machine_id)
26 UpdateCheckParams::kOsPlatform,
27 UpdateCheckParams::kOsVersion,
28 sp, // e.g. 0.2.3.3_i686
29 UpdateCheckParams::kAppId,
30 version, // app version (from lsb-release)
31 "en-US", //lang
32 track); // track
33
34 CHECK(HasOutputPipe());
35 SetOutputObject(out);
36 processor_->ActionComplete(this, true);
37 }
38
39 std::string OmahaRequestPrepAction::GetMachineId() const {
40 FILE* fp = popen("/sbin/ifconfig", "r");
41 if (!fp)
42 return "";
43 string data;
44 for (;;) {
45 char buffer[1000];
46 size_t r = fread(buffer, 1, sizeof(buffer), fp);
47 if (r <= 0)
48 break;
49 data.insert(data.end(), buffer, buffer + r);
50 }
51 fclose(fp);
52 // scan data for MAC address
53 string::size_type pos = data.find(" HWaddr ");
54 if (pos == string::npos)
55 return "";
56 // 3 * 6 - 1 is the number of bytes of the hwaddr.
57 return data.substr(pos + strlen(" HWaddr "), 3 * 6 - 1);
58 }
59
60 std::string OmahaRequestPrepAction::GetLsbValue(const std::string& key) const {
61 string files[] = {utils::kStatefulPartition + "/etc/lsb-release",
62 "/etc/lsb-release"};
63 for (unsigned int i = 0; i < arraysize(files); i++) {
64 string file_data;
65 if (!utils::ReadFileToString(root_ + files[i], &file_data))
66 continue;
67 string::size_type pos = 0;
68 if (!utils::StringHasPrefix(file_data, key + "=")) {
69 pos = file_data.find(string("\n") + key + "=");
70 if (pos != string::npos)
71 pos++; // advance past \n
72 }
73 if (pos == string::npos)
74 continue;
75 pos += key.size() + 1; // advance past the key and the '='
76 string::size_type endpos = file_data.find('\n', pos);
77 string::size_type length =
78 (endpos == string::npos ? string::npos : endpos - pos);
79 return file_data.substr(pos, length);
80 }
81 // not found
82 return "";
83 }
84
85 std::string OmahaRequestPrepAction::GetMachineType() const {
86 struct utsname buf;
87 string ret;
88 if (uname(&buf) == 0)
89 ret = buf.machine;
90 return ret;
91 }
92
93 } // namespace chromeos_update_engine
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698