Index: chromeos/network/onc/onc_translator_shill_to_onc.cc |
diff --git a/chromeos/network/onc/onc_translator_shill_to_onc.cc b/chromeos/network/onc/onc_translator_shill_to_onc.cc |
index 1b1ba7082c874bd936b9ed4f52b7b877c0eb319c..764dc02e8815d19c1ce6f1d2ac11ffecb67b5623 100644 |
--- a/chromeos/network/onc/onc_translator_shill_to_onc.cc |
+++ b/chromeos/network/onc/onc_translator_shill_to_onc.cc |
@@ -10,6 +10,7 @@ |
#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/logging.h" |
+#include "base/strings/string_util.h" |
#include "base/values.h" |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_util.h" |
@@ -77,6 +78,9 @@ class ShillToONCTranslator { |
void TranslateCellularDevice(); |
void TranslateNetworkWithState(); |
void TranslateIPConfig(); |
+ void TranslateSavedOrStaticIPConfig(const std::string& nameserver_property); |
+ void TranslateSavedIPConfig(); |
+ void TranslateStaticIPConfig(); |
// Creates an ONC object from |dictionary| according to the signature |
// associated to |onc_field_name| and adds it to |onc_object_| at |
@@ -157,6 +161,10 @@ ShillToONCTranslator::CreateTranslatedONCObject() { |
TranslateCellularWithState(); |
} else if (onc_signature_ == &kIPConfigSignature) { |
TranslateIPConfig(); |
+ } else if (onc_signature_ == &kSavedIPConfigSignature) { |
+ TranslateSavedIPConfig(); |
+ } else if (onc_signature_ == &kStaticIPConfigSignature) { |
+ TranslateStaticIPConfig(); |
} else { |
CopyPropertiesAccordingToSignature(); |
} |
@@ -371,8 +379,7 @@ void ShillToONCTranslator::TranslateNetworkWithState() { |
// Since Name is a read only field in Shill unless it's a VPN, it is copied |
// here, but not when going the other direction (if it's not a VPN). |
std::string name; |
- shill_dictionary_->GetStringWithoutPathExpansion(shill::kNameProperty, |
- &name); |
+ shill_dictionary_->GetStringWithoutPathExpansion(shill::kNameProperty, &name); |
onc_object_->SetStringWithoutPathExpansion(::onc::network_config::kName, |
name); |
@@ -410,6 +417,9 @@ void ShillToONCTranslator::TranslateNetworkWithState() { |
TranslateAndAddListOfObjects(::onc::network_config::kIPConfigs, |
*shill_ipconfigs); |
} |
+ |
+ TranslateAndAddNestedObject(::onc::network_config::kSavedIPConfig); |
+ TranslateAndAddNestedObject(::onc::network_config::kStaticIPConfig); |
} |
void ShillToONCTranslator::TranslateIPConfig() { |
@@ -431,6 +441,34 @@ void ShillToONCTranslator::TranslateIPConfig() { |
onc_object_->SetStringWithoutPathExpansion(::onc::ipconfig::kType, type); |
} |
+void ShillToONCTranslator::TranslateSavedOrStaticIPConfig( |
+ const std::string& nameserver_property) { |
+ CopyPropertiesAccordingToSignature(); |
+ // Saved IP config nameservers are stored as a comma separated list. |
pneubeck (no reviews)
2014/09/04 12:38:45
nit: Saved and static ...
stevenjb
2014/09/04 15:26:21
Done.
|
+ std::string shill_nameservers; |
+ shill_dictionary_->GetStringWithoutPathExpansion( |
+ nameserver_property, &shill_nameservers); |
+ std::vector<std::string> onc_nameserver_vector; |
+ if (Tokenize(shill_nameservers, ",", &onc_nameserver_vector) > 0) { |
+ scoped_ptr<base::ListValue> onc_nameservers(new base::ListValue); |
+ for (std::vector<std::string>::iterator iter = |
+ onc_nameserver_vector.begin(); |
+ iter != onc_nameserver_vector.end(); ++iter) { |
+ onc_nameservers->AppendString(*iter); |
+ } |
+ onc_object_->SetWithoutPathExpansion(::onc::ipconfig::kNameServers, |
+ onc_nameservers.release()); |
+ } |
+} |
+ |
+void ShillToONCTranslator::TranslateSavedIPConfig() { |
+ TranslateSavedOrStaticIPConfig(shill::kSavedIPNameServersProperty); |
+} |
+ |
+void ShillToONCTranslator::TranslateStaticIPConfig() { |
+ TranslateSavedOrStaticIPConfig(shill::kStaticIPNameServersProperty); |
+} |
+ |
void ShillToONCTranslator::TranslateAndAddNestedObject( |
const std::string& onc_field_name) { |
TranslateAndAddNestedObject(onc_field_name, *shill_dictionary_); |
@@ -509,6 +547,8 @@ void ShillToONCTranslator::CopyPropertiesAccordingToSignature( |
const OncValueSignature* value_signature) { |
if (value_signature->base_signature) |
CopyPropertiesAccordingToSignature(value_signature->base_signature); |
+ if (!value_signature->fields) |
+ return; |
for (const OncFieldSignature* field_signature = value_signature->fields; |
field_signature->onc_field_name != NULL; ++field_signature) { |
CopyProperty(field_signature); |