Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(418)

Unified Diff: net/base/net_util_posix.cc

Issue 23726043: Added NetworkInterface::network_prefix (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/net_util.cc ('k') | net/base/net_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/net_util_posix.cc
diff --git a/net/base/net_util_posix.cc b/net/base/net_util_posix.cc
index 904d8028bc26e22d76bc05bda11705838d010326..50ff6e7a4181160c202910d31892240a243001f5 100644
--- a/net/base/net_util_posix.cc
+++ b/net/base/net_util_posix.cc
@@ -9,6 +9,7 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/posix/eintr_wrapper.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/string_tokenizer.h"
#include "base/strings/string_util.h"
#include "base/threading/thread_restrictions.h"
@@ -66,24 +67,33 @@ bool FileURLToFilePath(const GURL& url, base::FilePath* path) {
bool GetNetworkList(NetworkInterfaceList* networks) {
#if defined(OS_ANDROID)
std::string network_list = android::GetNetworkList();
- base::StringTokenizer network_interfaces(network_list, ";");
+ base::StringTokenizer network_interfaces(network_list, "\n");
while (network_interfaces.GetNext()) {
std::string network_item = network_interfaces.token();
- base::StringTokenizer network_tokenizer(network_item, ",");
- std::string name;
- if (!network_tokenizer.GetNext())
- continue;
- name = network_tokenizer.token();
+ base::StringTokenizer network_tokenizer(network_item, "\t");
+ CHECK(network_tokenizer.GetNext());
+ std::string name = network_tokenizer.token();
- std::string literal_address;
- if (!network_tokenizer.GetNext())
- continue;
- literal_address = network_tokenizer.token();
+ CHECK(network_tokenizer.GetNext());
+ std::string interface_address = network_tokenizer.token();
+
+ base::StringTokenizer address_tokenizer(interface_address, "/");
+
+ CHECK(address_tokenizer.GetNext());
+ std::string literal_address = address_tokenizer.token();
+
+ CHECK(address_tokenizer.GetNext());
+ std::string network_prefix = address_tokenizer.token();
IPAddressNumber address;
- if (!ParseIPLiteralToNumber(literal_address, &address))
- continue;
- networks->push_back(NetworkInterface(name, address));
+ CHECK(ParseIPLiteralToNumber(literal_address, &address));
+
+ unsigned net_mask = 0;
+ CHECK(base::StringToUint(network_prefix, &net_mask));
+ CHECK_LE(net_mask, address.size() * 8);
+
+ networks->push_back(
+ NetworkInterface(name, address, static_cast<uint8>(net_mask)));
}
return true;
#else
@@ -133,10 +143,19 @@ bool GetNetworkList(NetworkInterfaceList* networks) {
// Skip non-IP addresses.
continue;
}
+
IPEndPoint address;
std::string name = interface->ifa_name;
if (address.FromSockAddr(addr, addr_size)) {
- networks->push_back(NetworkInterface(name, address.address()));
+ uint8 net_mask = 0;
+ if (interface->ifa_netmask) {
+ IPEndPoint netmask;
+ if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) {
+ net_mask = MaskPrefixLength(netmask.address());
+ }
+ }
+
+ networks->push_back(NetworkInterface(name, address.address(), net_mask));
}
}
« no previous file with comments | « net/base/net_util.cc ('k') | net/base/net_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698