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

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
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..7165d0701b887c7bc0fc12c0fb844bbce3c589f2 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"
@@ -69,21 +70,27 @@ bool GetNetworkList(NetworkInterfaceList* networks) {
base::StringTokenizer network_interfaces(network_list, ";");
while (network_interfaces.GetNext()) {
std::string network_item = network_interfaces.token();
- base::StringTokenizer network_tokenizer(network_item, ",");
+ base::StringTokenizer network_tokenizer(network_item, "/");
std::string name;
- if (!network_tokenizer.GetNext())
- continue;
+ CHECK(network_tokenizer.GetNext());
name = network_tokenizer.token();
std::string literal_address;
- if (!network_tokenizer.GetNext())
- continue;
+ CHECK(network_tokenizer.GetNext());
literal_address = network_tokenizer.token();
+ std::string network_prefix;
+ CHECK(network_tokenizer.GetNext());
+ network_prefix = network_tokenizer.token();
+
+ unsigned net_mask = 0;
+ CHECK(base::StringToUint(network_tokenizer.token(), &net_mask));
+ CHECK(net_mask <= 255);
szym 2013/09/23 19:58:42 CHECK_LE
Vitaly Buka (NO REVIEWS) 2013/09/23 20:06:11 Done.
+
IPAddressNumber address;
- if (!ParseIPLiteralToNumber(literal_address, &address))
- continue;
- networks->push_back(NetworkInterface(name, address));
+ CHECK(ParseIPLiteralToNumber(literal_address, &address));
+ networks->push_back(
+ NetworkInterface(name, address, static_cast<uint8>(net_mask)));
}
return true;
#else
@@ -133,10 +140,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));
}
}

Powered by Google App Engine
This is Rietveld 408576698