Index: chromeos/network/network_state.cc |
diff --git a/chromeos/network/network_state.cc b/chromeos/network/network_state.cc |
index bac4c6012fbe6bee79df4aef9c1ac945b42644eb..8355028fb5f151469987ba26a77ebd82bb62a958 100644 |
--- a/chromeos/network/network_state.cc |
+++ b/chromeos/network/network_state.cc |
@@ -4,9 +4,25 @@ |
#include "chromeos/network/network_state.h" |
+#include "base/stringprintf.h" |
#include "base/values.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
+namespace { |
+ |
+bool ConvertListValueToStringVector(const base::ListValue& string_list, |
+ std::vector<std::string>* result) { |
+ for (size_t i = 0; i < string_list.GetSize(); ++i) { |
+ std::string str; |
+ if (!string_list.GetString(i, &str)) |
+ return false; |
+ result->push_back(str); |
+ } |
+ return true; |
+} |
+ |
+} // namespace |
+ |
namespace chromeos { |
NetworkState::NetworkState(const std::string& path) |
@@ -33,6 +49,14 @@ bool NetworkState::PropertyChanged(const std::string& key, |
return GetStringValue(key, value, &connection_state_); |
} else if (key == flimflam::kErrorProperty) { |
return GetStringValue(key, value, &error_); |
+ } else if (key == IPConfigProperty(flimflam::kAddressProperty)) { |
+ return GetStringValue(key, value, &ip_address_); |
+ } else if (key == IPConfigProperty(flimflam::kNameServersProperty)) { |
+ dns_servers_.clear(); |
+ const base::ListValue* dns_servers; |
+ if (value.GetAsList(&dns_servers) && |
+ ConvertListValueToStringVector(*dns_servers, &dns_servers_)) |
+ return true; |
} else if (key == flimflam::kActivationStateProperty) { |
return GetStringValue(key, value, &activation_state_); |
} else if (key == flimflam::kRoamingStateProperty) { |
@@ -69,6 +93,16 @@ void NetworkState::GetProperties(base::DictionaryValue* dictionary) const { |
connection_state()); |
dictionary->SetStringWithoutPathExpansion(flimflam::kErrorProperty, |
error()); |
+ base::DictionaryValue* ipconfig_properties = new DictionaryValue; |
+ ipconfig_properties->SetStringWithoutPathExpansion(flimflam::kAddressProperty, |
+ ip_address()); |
+ base::ListValue* name_servers = new ListValue; |
+ name_servers->AppendStrings(dns_servers()); |
+ ipconfig_properties->SetWithoutPathExpansion(flimflam::kNameServersProperty, |
+ name_servers); |
+ dictionary->SetWithoutPathExpansion(shill::kIPConfigProperty, |
+ ipconfig_properties); |
+ |
dictionary->SetStringWithoutPathExpansion(flimflam::kActivationStateProperty, |
activation_state()); |
dictionary->SetStringWithoutPathExpansion(flimflam::kRoamingStateProperty, |
@@ -116,4 +150,9 @@ bool NetworkState::StateIsConnecting(const std::string& connection_state) { |
connection_state == flimflam::kStateCarrier); |
} |
+// static |
+std::string NetworkState::IPConfigProperty(const char* key) { |
+ return base::StringPrintf("%s.%s", shill::kIPConfigProperty, key); |
+} |
+ |
} // namespace chromeos |