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..4ff7f289c2040498d7684907895fe9ce5e77976c |
--- /dev/null |
+++ b/chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc |
@@ -0,0 +1,39 @@ |
+// 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 char* if_name, std::string* ssid_out) { |
+ DCHECK(if_name); |
mark a. foltz
2017/04/26 22:25:12
DCHECK(ssid_out)
btolsch
2017/05/03 22:03:09
Done.
|
+ |
+ 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, IFNAMSIZ - 1); |
mark a. foltz
2017/04/26 22:25:11
Is wreq.ifr_name guaranteed to hold IFNAMSIZE byte
btolsch
2017/05/03 22:03:09
Yes, wreq.ifr_name is defined as IFNAMSIZ bytes (u
|
+ |
+ char ssid[IW_ESSID_MAX_SIZE + 1] = {0}; |
+ std::string maybe_ssid; |
+ wreq.u.essid.pointer = ssid; |
+ wreq.u.essid.length = IW_ESSID_MAX_SIZE; |
+ if (ioctl(ioctl_socket.get(), SIOCGIWESSID, &wreq) != -1) |
+ maybe_ssid.assign(ssid); |
mark a. foltz
2017/04/26 22:25:12
Are you certain ssid will be null terminated?
btolsch
2017/05/03 22:03:09
Yes. |ssid| above is defined with an extra byte w
|
+ |
+ if (maybe_ssid.size() > 0) { |
+ *ssid_out = std::move(maybe_ssid); |
mark a. foltz
2017/04/26 22:25:12
Can you just assign ssid to ssid_out directly?
btolsch
2017/05/03 22:03:09
D'oh, bad inlining by me. Done.
|
+ return true; |
+ } |
+ return false; |
+} |