Index: chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc |
diff --git a/chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc b/chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f042bbe33f583352ca9655a22c91c517d14a7cbf |
--- /dev/null |
+++ b/chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc |
@@ -0,0 +1,38 @@ |
+// Copyright (c) 2017 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 "chrome/browser/media/router/discovery/discovery_network_list_wifi.h" |
+ |
+#include <string.h> |
+#include <sys/ioctl.h> |
+#include <sys/socket.h> |
+#include <sys/types.h> |
+ |
+#include <linux/wireless.h> |
+ |
+#include "base/files/scoped_file.h" |
+#include "base/logging.h" |
+#include "net/base/network_interfaces_linux.h" |
+ |
+bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) { |
+ DCHECK(ssid_out); |
+ |
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0)); |
+ if (!ioctl_socket.is_valid()) |
+ return false; |
+ struct iwreq wreq = {}; |
+ strncpy(wreq.ifr_name, if_name.data(), 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 false; |
+ } |
+ if (ssid[0] != 0) { |
+ ssid_out->assign(ssid); |
+ return true; |
+ } |
+ return false; |
+} |