Chromium Code Reviews| 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 11f59f45e84c478f84412b9bb1825bb2535c7320..1f0185077d27c280c3999e11e626485a9012f624 100644 |
| --- a/chromeos/network/onc/onc_translator_shill_to_onc.cc |
| +++ b/chromeos/network/onc/onc_translator_shill_to_onc.cc |
| @@ -66,6 +66,7 @@ class ShillToONCTranslator { |
| void TranslateWiFiWithState(); |
| void TranslateCellularWithState(); |
| void TranslateNetworkWithState(); |
| + void TranslateIPConfig(); |
| // Creates an ONC object from |dictionary| according to the signature |
| // associated to |onc_field_name| and adds it to |onc_object_| at |
| @@ -131,6 +132,8 @@ ShillToONCTranslator::CreateTranslatedONCObject() { |
| TranslateWiFiWithState(); |
| } else if (onc_signature_ == &kCellularWithStateSignature) { |
| TranslateCellularWithState(); |
| + } else if (onc_signature_ == &kIPConfigSignature) { |
| + TranslateIPConfig(); |
| } else { |
| CopyPropertiesAccordingToSignature(); |
| } |
| @@ -254,10 +257,10 @@ void ShillToONCTranslator::TranslateCellularWithState() { |
| shill::kCellularApnProperty, &dictionary)) { |
| TranslateAndAddNestedObject(::onc::cellular::kAPN, *dictionary); |
| } |
| - const base::ListValue* list = NULL; |
| + const base::ListValue* shill_apns = NULL; |
| if (shill_dictionary_->GetListWithoutPathExpansion( |
| - shill::kCellularApnListProperty, &list)) { |
| - TranslateAndAddListOfObjects(::onc::cellular::kAPNList, *list); |
| + shill::kCellularApnListProperty, &shill_apns)) { |
| + TranslateAndAddListOfObjects(::onc::cellular::kAPNList, *shill_apns); |
| } |
| } |
| @@ -299,6 +302,37 @@ void ShillToONCTranslator::TranslateNetworkWithState() { |
| onc_object_->SetStringWithoutPathExpansion( |
| ::onc::network_config::kConnectionState, onc_state); |
| } |
| + |
| + const base::DictionaryValue* shill_ipconfig = NULL; |
| + if (shill_dictionary_->GetDictionaryWithoutPathExpansion( |
| + shill::kIPConfigProperty, &shill_ipconfig)) { |
| + // ONC has a list of IPConfigs and Shill only a single IPConfig object. |
| + // Create a list with a single entry. |
|
stevenjb
2014/04/23 19:43:42
So, I think we should fudge this. In Shill, Servic
pneubeck (no reviews)
2014/04/25 10:07:34
Done.
You'll be able to use this translation
- if
|
| + ShillToONCTranslator nested_translator(*shill_ipconfig, kIPConfigSignature); |
| + scoped_ptr<base::DictionaryValue> onc_ipconfig = |
| + nested_translator.CreateTranslatedONCObject(); |
| + // If the nested object couldn't be parsed, simply omit it. |
| + if (!onc_ipconfig->empty()) { |
|
armansito
2014/04/23 18:46:36
Early return here would be better, i.e if (empty)
pneubeck (no reviews)
2014/04/25 10:07:34
I kept the pattern in this function, which doesn't
|
| + scoped_ptr<base::ListValue> onc_ipconfigs(new base::ListValue()); |
| + onc_ipconfigs->Append(onc_ipconfig.release()); |
| + onc_object_->SetWithoutPathExpansion(::onc::network_config::kIPConfigs, |
| + onc_ipconfigs.release()); |
| + } |
| + } |
| +} |
| + |
| +void ShillToONCTranslator::TranslateIPConfig() { |
| + CopyPropertiesAccordingToSignature(); |
| + std::string ip_address; |
| + if (shill_dictionary_->GetStringWithoutPathExpansion(shill::kAddressProperty, |
| + &ip_address)) { |
|
armansito
2014/04/23 18:46:36
nit: align "&ip_address" with "shill::kAddressProp
pneubeck (no reviews)
2014/04/25 10:07:34
Done.
|
| + std::string type = ::onc::ipconfig::kIPv4; |
| + if (ip_address.find(':') != std::string::npos) { |
|
stevenjb
2014/04/23 19:43:42
Hmm, I guess wwe can use this for identifying ipv6
pneubeck (no reviews)
2014/04/25 10:07:34
Missed that one. Thanks.
|
| + // ip_address is an IPv6 address and not IPv4. |
| + type = ::onc::ipconfig::kIPv6; |
| + } |
| + onc_object_->SetStringWithoutPathExpansion(::onc::ipconfig::kType, type); |
| + } |
| } |
| void ShillToONCTranslator::TranslateAndAddNestedObject( |
| @@ -345,14 +379,13 @@ void ShillToONCTranslator::TranslateAndAddListOfObjects( |
| *field_signature->value_signature->onc_array_entry_signature); |
| scoped_ptr<base::DictionaryValue> nested_object = |
| nested_translator.CreateTranslatedONCObject(); |
| + // If the nested object couldn't be parsed, simply omit it. |
| if (nested_object->empty()) |
| - // The nested object couldn't be parsed, so simply omit it. |
| continue; |
| result->Append(nested_object.release()); |
| } |
| + // If there are no entries in the list, there is no need to expose this field. |
| if (result->empty()) |
| - // There are no entries in the list, so there is no need to expose this |
| - // field. |
| return; |
| onc_object_->SetWithoutPathExpansion(onc_field_name, result.release()); |
| } |