| 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 |