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

Side by Side Diff: chrome/browser/chromeos/cros/cros_network_functions.cc

Issue 10827283: This updates the StaticIP configuration UI to match new mocks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Steven review changes Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/cros/cros_network_functions.h" 5 #include "chrome/browser/chromeos/cros/cros_network_functions.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/string_tokenizer.h"
9 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "chrome/browser/chromeos/cros/sms_watcher.h" 12 #include "chrome/browser/chromeos/cros/sms_watcher.h"
12 #include "chromeos/dbus/cashew_client.h" 13 #include "chromeos/dbus/cashew_client.h"
13 #include "chromeos/dbus/dbus_thread_manager.h" 14 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "chromeos/dbus/flimflam_device_client.h" 15 #include "chromeos/dbus/flimflam_device_client.h"
15 #include "chromeos/dbus/flimflam_ipconfig_client.h" 16 #include "chromeos/dbus/flimflam_ipconfig_client.h"
16 #include "chromeos/dbus/flimflam_manager_client.h" 17 #include "chromeos/dbus/flimflam_manager_client.h"
17 #include "chromeos/dbus/flimflam_network_client.h" 18 #include "chromeos/dbus/flimflam_network_client.h"
18 #include "chromeos/dbus/flimflam_profile_client.h" 19 #include "chromeos/dbus/flimflam_profile_client.h"
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 return IPCONFIG_TYPE_BOOTP; 225 return IPCONFIG_TYPE_BOOTP;
225 if (type == flimflam::kTypeZeroConf) 226 if (type == flimflam::kTypeZeroConf)
226 return IPCONFIG_TYPE_ZEROCONF; 227 return IPCONFIG_TYPE_ZEROCONF;
227 if (type == flimflam::kTypeDHCP6) 228 if (type == flimflam::kTypeDHCP6)
228 return IPCONFIG_TYPE_DHCP6; 229 return IPCONFIG_TYPE_DHCP6;
229 if (type == flimflam::kTypePPP) 230 if (type == flimflam::kTypePPP)
230 return IPCONFIG_TYPE_PPP; 231 return IPCONFIG_TYPE_PPP;
231 return IPCONFIG_TYPE_UNKNOWN; 232 return IPCONFIG_TYPE_UNKNOWN;
232 } 233 }
233 234
234 // Converts a prefix length to a netmask. (for ipv4)
235 // e.g. a netmask of 255.255.255.0 has a prefixlen of 24
236 std::string PrefixlenToNetmask(int32 prefixlen) {
237 std::string netmask;
238 for (int i = 0; i < 4; i++) {
239 int len = 8;
240 if (prefixlen >= 8) {
241 prefixlen -= 8;
242 } else {
243 len = prefixlen;
244 prefixlen = 0;
245 }
246 if (i > 0)
247 netmask += ".";
248 int num = len == 0 ? 0 : ((2L << (len - 1)) - 1) << (8 - len);
249 netmask += StringPrintf("%d", num);
250 }
251 return netmask;
252 }
253
254 // Converts a list of name servers to a string. 235 // Converts a list of name servers to a string.
255 std::string ConvertNameSerersListToString(const base::ListValue& name_servers) { 236 std::string ConvertNameSerersListToString(const base::ListValue& name_servers) {
256 std::string result; 237 std::string result;
257 for (size_t i = 0; i != name_servers.GetSize(); ++i) { 238 for (size_t i = 0; i != name_servers.GetSize(); ++i) {
258 std::string name_server; 239 std::string name_server;
259 if (!name_servers.GetString(i, &name_server)) { 240 if (!name_servers.GetString(i, &name_server)) {
260 LOG(ERROR) << "name_servers[" << i << "] is not a string."; 241 LOG(ERROR) << "name_servers[" << i << "] is not a string.";
261 continue; 242 continue;
262 } 243 }
263 if (!result.empty()) 244 if (!result.empty())
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 base::ListValue* name_servers = NULL; 279 base::ListValue* name_servers = NULL;
299 std::string name_servers_string; 280 std::string name_servers_string;
300 // store nameservers as a comma delimited list 281 // store nameservers as a comma delimited list
301 if (properties->GetListWithoutPathExpansion(flimflam::kNameServersProperty, 282 if (properties->GetListWithoutPathExpansion(flimflam::kNameServersProperty,
302 &name_servers)) { 283 &name_servers)) {
303 name_servers_string = ConvertNameSerersListToString(*name_servers); 284 name_servers_string = ConvertNameSerersListToString(*name_servers);
304 } else { 285 } else {
305 LOG(ERROR) << "Cannot get name servers."; 286 LOG(ERROR) << "Cannot get name servers.";
306 } 287 }
307 ipconfig_vector->push_back( 288 ipconfig_vector->push_back(
308 NetworkIPConfig(device_path, ParseIPConfigType(type_string), address, 289 NetworkIPConfig(device_path,
309 PrefixlenToNetmask(prefix_len), gateway, 290 ParseIPConfigType(type_string),
291 address,
292 CrosPrefixLengthToNetmask(prefix_len),
293 gateway,
310 name_servers_string)); 294 name_servers_string));
311 return true; 295 return true;
312 } 296 }
313 297
314 } // namespace 298 } // namespace
315 299
316 SMS::SMS() 300 SMS::SMS()
317 : validity(0), 301 : validity(0),
318 msgclass(0) { 302 msgclass(0) {
319 } 303 }
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 if (!found_at_least_one_device) 754 if (!found_at_least_one_device)
771 return false; // No powered device found that has a 'Networks' array. 755 return false; // No powered device found that has a 'Networks' array.
772 return true; 756 return true;
773 } 757 }
774 758
775 void CrosConfigureService(const base::DictionaryValue& properties) { 759 void CrosConfigureService(const base::DictionaryValue& properties) {
776 DBusThreadManager::Get()->GetFlimflamManagerClient()->ConfigureService( 760 DBusThreadManager::Get()->GetFlimflamManagerClient()->ConfigureService(
777 properties, base::Bind(&DoNothing)); 761 properties, base::Bind(&DoNothing));
778 } 762 }
779 763
764 std::string CrosPrefixLengthToNetmask(int32 prefix_length) {
765 std::string netmask;
766 // Return the empty string for invalid inputs.
767 if (prefix_length < 0 || prefix_length > 32)
768 return netmask;
769 for (int i = 0; i < 4; i++) {
770 int remainder = 8;
771 if (prefix_length >= 8) {
772 prefix_length -= 8;
773 } else {
774 remainder = prefix_length;
775 prefix_length = 0;
776 }
777 if (i > 0)
778 netmask += ".";
779 int value = remainder == 0 ? 0 :
780 ((2L << (remainder - 1)) - 1) << (8 - remainder);
781 netmask += StringPrintf("%d", value);
782 }
783 return netmask;
784 }
785
786 int32 CrosNetmaskToPrefixLength(const std::string& netmask) {
787 int count = 0;
788 int prefix_length = 0;
789 StringTokenizer t(netmask, ".");
790 while (t.GetNext()) {
791 std::string token = t.token();
792 // If we already found the last mask and the current one is not
793 // "0" then the netmask is invalid. For example, 255.224.255.0
794 if (prefix_length / 8 != count) {
795 if (token != "0") {
796 return -1;
797 }
798 } else if (token == "255") {
799 prefix_length += 8;
800 } else if (token == "254") {
801 prefix_length += 7;
802 } else if (token == "252") {
803 prefix_length += 6;
804 } else if (token == "248") {
805 prefix_length += 5;
806 } else if (token == "240") {
807 prefix_length += 4;
808 } else if (token == "224") {
809 prefix_length += 3;
810 } else if (token == "192") {
811 prefix_length += 2;
812 } else if (token == "128") {
813 prefix_length += 1;
814 } else if (token == "0") {
815 prefix_length += 0;
816 } else {
817 // mask is not a valid number.
818 return -1;
819 }
820 count++;
821 // If there are more than 4 numbers, then it's invalid.
822 if (count == 4) {
stevenjb 2012/08/14 01:06:38 nit: if (++count == 4), no {}
Greg Spencer (Chromium) 2012/08/14 01:19:27 Done, plus the one up above too.
823 return -1;
824 }
825 }
826 if (count < 4)
827 return -1;
828 return prefix_length;
829 }
830
780 } // namespace chromeos 831 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/cros_network_functions.h ('k') | chrome/browser/chromeos/cros/cros_network_functions_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698