Chromium Code Reviews| Index: net/base/net_util_linux.cc |
| diff --git a/net/base/net_util_linux.cc b/net/base/net_util_linux.cc |
| index 36c9eb706ecfdaaa4d5cff4abdc73aac357795fd..e41f0edae01004517422894427b97ab82656d081 100644 |
| --- a/net/base/net_util_linux.cc |
| +++ b/net/base/net_util_linux.cc |
| @@ -103,6 +103,21 @@ NetworkChangeNotifier::ConnectionType GetInterfaceConnectionType( |
| return NetworkChangeNotifier::CONNECTION_UNKNOWN; |
| } |
| +std::string GetInterfaceSSID(const std::string& ifname) { |
| + base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0)); |
| + if (!ioctl_socket.is_valid()) |
| + return ""; |
| + struct iwreq wreq = {}; |
| + strncpy(wreq.ifr_name, ifname.c_str(), IFNAMSIZ - 1); |
| + |
| + char ssid[IW_ESSID_MAX_SIZE + 1] = {0}; |
| + wreq.u.essid.pointer = ssid; |
| + wreq.u.essid.length = IW_ESSID_MAX_SIZE; |
| + if (ioctl(ioctl_socket.get(), SIOCGIWESSID, &wreq) != -1) |
| + return ssid; |
| + return ""; |
| +} |
| + |
| bool GetNetworkListImpl( |
| NetworkInterfaceList* networks, |
| int policy, |
| @@ -172,6 +187,25 @@ bool GetNetworkListImpl( |
| return true; |
| } |
| +std::string GetWifiSSIDFromInterfaceListInternal( |
| + const NetworkInterfaceList& interfaces, |
| + internal::GetInterfaceSSIDFunction get_interface_ssid) { |
| + std::string connected_ssid; |
| + bool first = true; |
| + for (size_t i = 0; i < interfaces.size(); ++i) { |
| + if (interfaces[i].type != NetworkChangeNotifier::CONNECTION_WIFI) |
| + return ""; |
| + std::string ssid = get_interface_ssid(interfaces[i].name); |
| + if (first) { |
|
pauljensen
2015/02/10 14:06:38
can we get rid of "first" and instead just use "i
meacer
2015/02/11 00:24:53
Done.
|
| + first = false; |
| + connected_ssid = ssid; |
| + } else if (ssid != connected_ssid) { |
| + return ""; |
| + } |
| + } |
| + return connected_ssid; |
| +} |
| + |
| } // namespace internal |
| bool GetNetworkList(NetworkInterfaceList* networks, int policy) { |
| @@ -186,4 +220,13 @@ bool GetNetworkList(NetworkInterfaceList* networks, int policy) { |
| &internal::AddressTrackerLinux::GetInterfaceName); |
| } |
| +std::string GetWifiSSID() { |
| + NetworkInterfaceList networks; |
| + if (GetNetworkList(&networks, net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES)) { |
| + return internal::GetWifiSSIDFromInterfaceListInternal( |
| + networks, internal::GetInterfaceSSID); |
| + } |
| + return ""; |
| +} |
| + |
| } // namespace net |