OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium 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 "chrome/browser/extensions/api/music_manager_private/device_id.h" | 5 #include "chrome/browser/extensions/api/music_manager_private/device_id.h" |
6 | 6 |
7 #include <sys/socket.h> // Must be included before ifaddrs.h. | 7 #include <sys/socket.h> // Must be included before ifaddrs.h. |
8 #include <ifaddrs.h> | 8 #include <ifaddrs.h> |
9 #include <net/if.h> | 9 #include <net/if.h> |
10 #include <sys/ioctl.h> | 10 #include <sys/ioctl.h> |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
22 | 22 |
23 namespace { | 23 namespace { |
24 | 24 |
25 using extensions::api::DeviceId; | 25 using extensions::api::DeviceId; |
26 | 26 |
27 typedef base::Callback<bool(const void* bytes, size_t size)> | 27 typedef base::Callback<bool(const void* bytes, size_t size)> |
28 IsValidMacAddressCallback; | 28 IsValidMacAddressCallback; |
29 | 29 |
30 const char kDiskByUuidDirectoryName[] = "/dev/disk/by-uuid"; | 30 const char kDiskByUuidDirectoryName[] = "/dev/disk/by-uuid"; |
31 const char* kDeviceNames[] = { | 31 const char* const kDeviceNames[] = { |
32 "sda1", "hda1", "dm-0", "xvda1", "sda2", "hda2", "dm-1", "xvda2", | 32 "sda1", "hda1", "dm-0", "xvda1", "sda2", "hda2", "dm-1", "xvda2", |
33 }; | 33 }; |
34 // Fedora 15 uses biosdevname feature where Embedded ethernet uses the | 34 // Fedora 15 uses biosdevname feature where Embedded ethernet uses the |
35 // "em" prefix and PCI cards use the p[0-9]c[0-9] format based on PCI | 35 // "em" prefix and PCI cards use the p[0-9]c[0-9] format based on PCI |
36 // slot and card information. | 36 // slot and card information. |
37 const char* kNetDeviceNamePrefixes[] = { | 37 const char* const kNetDeviceNamePrefixes[] = { |
38 "eth", "em", "en", "wl", "ww", "p0", "p1", "p2", "p3", "p4", "p5", "p6", | 38 "eth", "em", "en", "wl", "ww", "p0", "p1", "p2", "p3", "p4", "p5", "p6", |
39 "p7", "p8", "p9", "wlan" | 39 "p7", "p8", "p9", "wlan" |
40 }; | 40 }; |
41 | 41 |
42 // Map from device name to disk uuid | 42 // Map from device name to disk uuid |
43 typedef std::map<base::FilePath, base::FilePath> DiskEntries; | 43 typedef std::map<base::FilePath, base::FilePath> DiskEntries; |
44 | 44 |
45 std::string GetDiskUuid() { | 45 std::string GetDiskUuid() { |
46 base::ThreadRestrictions::AssertIOAllowed(); | 46 base::ThreadRestrictions::AssertIOAllowed(); |
47 | 47 |
48 DiskEntries disk_uuids; | 48 DiskEntries disk_uuids; |
49 base::FileEnumerator files(base::FilePath(kDiskByUuidDirectoryName), | 49 base::FileEnumerator files(base::FilePath(kDiskByUuidDirectoryName), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 } | 92 } |
93 | 93 |
94 class MacAddressProcessor { | 94 class MacAddressProcessor { |
95 public: | 95 public: |
96 explicit MacAddressProcessor( | 96 explicit MacAddressProcessor( |
97 const IsValidMacAddressCallback& is_valid_mac_address) | 97 const IsValidMacAddressCallback& is_valid_mac_address) |
98 : is_valid_mac_address_(is_valid_mac_address) { | 98 : is_valid_mac_address_(is_valid_mac_address) { |
99 } | 99 } |
100 | 100 |
101 bool ProcessInterface(struct ifaddrs *ifaddr, | 101 bool ProcessInterface(struct ifaddrs *ifaddr, |
102 const char* prefixes[], | 102 const char* const prefixes[], |
103 size_t prefixes_count) { | 103 size_t prefixes_count) { |
104 const int MAC_LENGTH = 6; | 104 const int MAC_LENGTH = 6; |
105 struct ifreq ifinfo; | 105 struct ifreq ifinfo; |
106 | 106 |
107 memset(&ifinfo, 0, sizeof(ifinfo)); | 107 memset(&ifinfo, 0, sizeof(ifinfo)); |
108 strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1); | 108 strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1); |
109 | 109 |
110 int sd = socket(AF_INET, SOCK_DGRAM, 0); | 110 int sd = socket(AF_INET, SOCK_DGRAM, 0); |
111 int result = ioctl(sd, SIOCGIFHWADDR, &ifinfo); | 111 int result = ioctl(sd, SIOCGIFHWADDR, &ifinfo); |
112 close(sd); | 112 close(sd); |
(...skipping 12 matching lines...) Expand all Loading... |
125 // Got one! | 125 // Got one! |
126 found_mac_address_ = | 126 found_mac_address_ = |
127 base::StringToLowerASCII(base::HexEncode(mac_address, MAC_LENGTH)); | 127 base::StringToLowerASCII(base::HexEncode(mac_address, MAC_LENGTH)); |
128 return false; | 128 return false; |
129 } | 129 } |
130 | 130 |
131 std::string mac_address() const { return found_mac_address_; } | 131 std::string mac_address() const { return found_mac_address_; } |
132 | 132 |
133 private: | 133 private: |
134 bool IsValidPrefix(const char* name, | 134 bool IsValidPrefix(const char* name, |
135 const char* prefixes[], | 135 const char* const prefixes[], |
136 size_t prefixes_count) { | 136 size_t prefixes_count) { |
137 for (size_t i = 0; i < prefixes_count; i++) { | 137 for (size_t i = 0; i < prefixes_count; i++) { |
138 if (strncmp(prefixes[i], name, strlen(prefixes[i])) == 0) | 138 if (strncmp(prefixes[i], name, strlen(prefixes[i])) == 0) |
139 return true; | 139 return true; |
140 } | 140 } |
141 return false; | 141 return false; |
142 } | 142 } |
143 | 143 |
144 const IsValidMacAddressCallback& is_valid_mac_address_; | 144 const IsValidMacAddressCallback& is_valid_mac_address_; |
145 std::string found_mac_address_; | 145 std::string found_mac_address_; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 content::BrowserThread::PostTask( | 197 content::BrowserThread::PostTask( |
198 content::BrowserThread::FILE, | 198 content::BrowserThread::FILE, |
199 FROM_HERE, | 199 FROM_HERE, |
200 base::Bind(GetRawDeviceIdImpl, | 200 base::Bind(GetRawDeviceIdImpl, |
201 base::Bind(DeviceId::IsValidMacAddress), | 201 base::Bind(DeviceId::IsValidMacAddress), |
202 callback)); | 202 callback)); |
203 } | 203 } |
204 | 204 |
205 } // namespace api | 205 } // namespace api |
206 } // namespace extensions | 206 } // namespace extensions |
OLD | NEW |