| OLD | NEW |
| 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 <string> | 5 #include <string> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/memory/ptr_util.h" |
| 12 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 13 #include "base/values.h" | 14 #include "base/values.h" |
| 14 #include "chromeos/network/network_profile_handler.h" | 15 #include "chromeos/network/network_profile_handler.h" |
| 15 #include "chromeos/network/network_state.h" | 16 #include "chromeos/network/network_state.h" |
| 16 #include "chromeos/network/network_util.h" | 17 #include "chromeos/network/network_util.h" |
| 17 #include "chromeos/network/onc/onc_signature.h" | 18 #include "chromeos/network/onc/onc_signature.h" |
| 18 #include "chromeos/network/onc/onc_translation_tables.h" | 19 #include "chromeos/network/onc/onc_translation_tables.h" |
| 19 #include "chromeos/network/onc/onc_translator.h" | 20 #include "chromeos/network/onc/onc_translator.h" |
| 20 #include "chromeos/network/onc/onc_utils.h" | 21 #include "chromeos/network/onc/onc_utils.h" |
| 21 #include "chromeos/network/shill_property_util.h" | 22 #include "chromeos/network/shill_property_util.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 TranslateAndAddNestedObject(::onc::openvpn::kVerifyX509); | 206 TranslateAndAddNestedObject(::onc::openvpn::kVerifyX509); |
| 206 | 207 |
| 207 // Shill supports only one RemoteCertKU but ONC requires a list. If existing, | 208 // Shill supports only one RemoteCertKU but ONC requires a list. If existing, |
| 208 // wraps the value into a list. | 209 // wraps the value into a list. |
| 209 std::string certKU; | 210 std::string certKU; |
| 210 if (shill_dictionary_->GetStringWithoutPathExpansion( | 211 if (shill_dictionary_->GetStringWithoutPathExpansion( |
| 211 shill::kOpenVPNRemoteCertKUProperty, &certKU)) { | 212 shill::kOpenVPNRemoteCertKUProperty, &certKU)) { |
| 212 std::unique_ptr<base::ListValue> certKUs(new base::ListValue); | 213 std::unique_ptr<base::ListValue> certKUs(new base::ListValue); |
| 213 certKUs->AppendString(certKU); | 214 certKUs->AppendString(certKU); |
| 214 onc_object_->SetWithoutPathExpansion(::onc::openvpn::kRemoteCertKU, | 215 onc_object_->SetWithoutPathExpansion(::onc::openvpn::kRemoteCertKU, |
| 215 certKUs.release()); | 216 std::move(certKUs)); |
| 216 } | 217 } |
| 217 | 218 |
| 218 for (const OncFieldSignature* field_signature = onc_signature_->fields; | 219 for (const OncFieldSignature* field_signature = onc_signature_->fields; |
| 219 field_signature->onc_field_name != NULL; ++field_signature) { | 220 field_signature->onc_field_name != NULL; ++field_signature) { |
| 220 const std::string& onc_field_name = field_signature->onc_field_name; | 221 const std::string& onc_field_name = field_signature->onc_field_name; |
| 221 if (onc_field_name == ::onc::openvpn::kRemoteCertKU || | 222 if (onc_field_name == ::onc::openvpn::kRemoteCertKU || |
| 222 onc_field_name == ::onc::openvpn::kServerCAPEMs) { | 223 onc_field_name == ::onc::openvpn::kServerCAPEMs) { |
| 223 CopyProperty(field_signature); | 224 CopyProperty(field_signature); |
| 224 continue; | 225 continue; |
| 225 } | 226 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 243 shill_str, field_signature->value_signature->onc_type); | 244 shill_str, field_signature->value_signature->onc_type); |
| 244 | 245 |
| 245 if (translated.get() == NULL) { | 246 if (translated.get() == NULL) { |
| 246 LOG(ERROR) << "Shill property '" << shill_property_name | 247 LOG(ERROR) << "Shill property '" << shill_property_name |
| 247 << "' with value " << *shill_value | 248 << "' with value " << *shill_value |
| 248 << " couldn't be converted to base::Value::Type " | 249 << " couldn't be converted to base::Value::Type " |
| 249 << field_signature->value_signature->onc_type << ": " | 250 << field_signature->value_signature->onc_type << ": " |
| 250 << GetName(); | 251 << GetName(); |
| 251 } else { | 252 } else { |
| 252 onc_object_->SetWithoutPathExpansion(onc_field_name, | 253 onc_object_->SetWithoutPathExpansion(onc_field_name, |
| 253 translated.release()); | 254 std::move(translated)); |
| 254 } | 255 } |
| 255 } else { | 256 } else { |
| 256 LOG(ERROR) << "Shill property '" << shill_property_name << "' has value " | 257 LOG(ERROR) << "Shill property '" << shill_property_name << "' has value " |
| 257 << *shill_value << ", but expected a string: " << GetName(); | 258 << *shill_value << ", but expected a string: " << GetName(); |
| 258 } | 259 } |
| 259 } | 260 } |
| 260 } | 261 } |
| 261 | 262 |
| 262 void ShillToONCTranslator::TranslateIPsec() { | 263 void ShillToONCTranslator::TranslateIPsec() { |
| 263 CopyPropertiesAccordingToSignature(); | 264 CopyPropertiesAccordingToSignature(); |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 if (shill_dictionary_->GetStringWithoutPathExpansion( | 583 if (shill_dictionary_->GetStringWithoutPathExpansion( |
| 583 shill::kProxyConfigProperty, &proxy_config_str) && | 584 shill::kProxyConfigProperty, &proxy_config_str) && |
| 584 !proxy_config_str.empty()) { | 585 !proxy_config_str.empty()) { |
| 585 std::unique_ptr<base::DictionaryValue> proxy_config_value( | 586 std::unique_ptr<base::DictionaryValue> proxy_config_value( |
| 586 ReadDictionaryFromJson(proxy_config_str)); | 587 ReadDictionaryFromJson(proxy_config_str)); |
| 587 if (proxy_config_value) { | 588 if (proxy_config_value) { |
| 588 std::unique_ptr<base::DictionaryValue> proxy_settings = | 589 std::unique_ptr<base::DictionaryValue> proxy_settings = |
| 589 ConvertProxyConfigToOncProxySettings(std::move(proxy_config_value)); | 590 ConvertProxyConfigToOncProxySettings(std::move(proxy_config_value)); |
| 590 if (proxy_settings) { | 591 if (proxy_settings) { |
| 591 onc_object_->SetWithoutPathExpansion( | 592 onc_object_->SetWithoutPathExpansion( |
| 592 ::onc::network_config::kProxySettings, proxy_settings.release()); | 593 ::onc::network_config::kProxySettings, std::move(proxy_settings)); |
| 593 } | 594 } |
| 594 } | 595 } |
| 595 } | 596 } |
| 596 } | 597 } |
| 597 | 598 |
| 598 void ShillToONCTranslator::TranslateIPConfig() { | 599 void ShillToONCTranslator::TranslateIPConfig() { |
| 599 CopyPropertiesAccordingToSignature(); | 600 CopyPropertiesAccordingToSignature(); |
| 600 std::string shill_ip_method; | 601 std::string shill_ip_method; |
| 601 shill_dictionary_->GetStringWithoutPathExpansion(shill::kMethodProperty, | 602 shill_dictionary_->GetStringWithoutPathExpansion(shill::kMethodProperty, |
| 602 &shill_ip_method); | 603 &shill_ip_method); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 NOTREACHED() << "Unable to find signature for field: " << onc_field_name; | 663 NOTREACHED() << "Unable to find signature for field: " << onc_field_name; |
| 663 return; | 664 return; |
| 664 } | 665 } |
| 665 ShillToONCTranslator nested_translator(dictionary, onc_source_, | 666 ShillToONCTranslator nested_translator(dictionary, onc_source_, |
| 666 *field_signature->value_signature, | 667 *field_signature->value_signature, |
| 667 network_state_); | 668 network_state_); |
| 668 std::unique_ptr<base::DictionaryValue> nested_object = | 669 std::unique_ptr<base::DictionaryValue> nested_object = |
| 669 nested_translator.CreateTranslatedONCObject(); | 670 nested_translator.CreateTranslatedONCObject(); |
| 670 if (nested_object->empty()) | 671 if (nested_object->empty()) |
| 671 return; | 672 return; |
| 672 onc_object_->SetWithoutPathExpansion(onc_field_name, nested_object.release()); | 673 onc_object_->SetWithoutPathExpansion(onc_field_name, |
| 674 std::move(nested_object)); |
| 673 } | 675 } |
| 674 | 676 |
| 675 void ShillToONCTranslator::SetNestedOncValue( | 677 void ShillToONCTranslator::SetNestedOncValue( |
| 676 const std::string& onc_dictionary_name, | 678 const std::string& onc_dictionary_name, |
| 677 const std::string& onc_field_name, | 679 const std::string& onc_field_name, |
| 678 const base::Value& value) { | 680 const base::Value& value) { |
| 679 base::DictionaryValue* nested; | 681 base::DictionaryValue* nested = nullptr; |
| 680 if (!onc_object_->GetDictionaryWithoutPathExpansion(onc_dictionary_name, | 682 if (!onc_object_->GetDictionaryWithoutPathExpansion(onc_dictionary_name, |
| 681 &nested)) { | 683 &nested)) { |
| 682 nested = new base::DictionaryValue; | 684 nested = onc_object_->SetDictionaryWithoutPathExpansion( |
| 683 onc_object_->SetWithoutPathExpansion(onc_dictionary_name, nested); | 685 onc_dictionary_name, base::MakeUnique<base::DictionaryValue>()); |
| 684 } | 686 } |
| 685 nested->SetWithoutPathExpansion(onc_field_name, value.DeepCopy()); | 687 nested->SetWithoutPathExpansion(onc_field_name, |
| 688 base::MakeUnique<base::Value>(value)); |
| 686 } | 689 } |
| 687 | 690 |
| 688 void ShillToONCTranslator::TranslateAndAddListOfObjects( | 691 void ShillToONCTranslator::TranslateAndAddListOfObjects( |
| 689 const std::string& onc_field_name, | 692 const std::string& onc_field_name, |
| 690 const base::ListValue& list) { | 693 const base::ListValue& list) { |
| 691 const OncFieldSignature* field_signature = | 694 const OncFieldSignature* field_signature = |
| 692 GetFieldSignature(*onc_signature_, onc_field_name); | 695 GetFieldSignature(*onc_signature_, onc_field_name); |
| 693 if (field_signature->value_signature->onc_type != base::Value::Type::LIST) { | 696 if (field_signature->value_signature->onc_type != base::Value::Type::LIST) { |
| 694 LOG(ERROR) << "ONC Field name: '" << onc_field_name << "' has type '" | 697 LOG(ERROR) << "ONC Field name: '" << onc_field_name << "' has type '" |
| 695 << field_signature->value_signature->onc_type | 698 << field_signature->value_signature->onc_type |
| (...skipping 14 matching lines...) Expand all Loading... |
| 710 std::unique_ptr<base::DictionaryValue> nested_object = | 713 std::unique_ptr<base::DictionaryValue> nested_object = |
| 711 nested_translator.CreateTranslatedONCObject(); | 714 nested_translator.CreateTranslatedONCObject(); |
| 712 // If the nested object couldn't be parsed, simply omit it. | 715 // If the nested object couldn't be parsed, simply omit it. |
| 713 if (nested_object->empty()) | 716 if (nested_object->empty()) |
| 714 continue; | 717 continue; |
| 715 result->Append(std::move(nested_object)); | 718 result->Append(std::move(nested_object)); |
| 716 } | 719 } |
| 717 // If there are no entries in the list, there is no need to expose this field. | 720 // If there are no entries in the list, there is no need to expose this field. |
| 718 if (result->empty()) | 721 if (result->empty()) |
| 719 return; | 722 return; |
| 720 onc_object_->SetWithoutPathExpansion(onc_field_name, result.release()); | 723 onc_object_->SetWithoutPathExpansion(onc_field_name, std::move(result)); |
| 721 } | 724 } |
| 722 | 725 |
| 723 void ShillToONCTranslator::CopyPropertiesAccordingToSignature() { | 726 void ShillToONCTranslator::CopyPropertiesAccordingToSignature() { |
| 724 CopyPropertiesAccordingToSignature(onc_signature_); | 727 CopyPropertiesAccordingToSignature(onc_signature_); |
| 725 } | 728 } |
| 726 | 729 |
| 727 void ShillToONCTranslator::CopyPropertiesAccordingToSignature( | 730 void ShillToONCTranslator::CopyPropertiesAccordingToSignature( |
| 728 const OncValueSignature* value_signature) { | 731 const OncValueSignature* value_signature) { |
| 729 if (value_signature->base_signature) | 732 if (value_signature->base_signature) |
| 730 CopyPropertiesAccordingToSignature(value_signature->base_signature); | 733 CopyPropertiesAccordingToSignature(value_signature->base_signature); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 751 if (shill_value->GetType() != field_signature->value_signature->onc_type) { | 754 if (shill_value->GetType() != field_signature->value_signature->onc_type) { |
| 752 LOG(ERROR) << "Shill property '" << shill_property_name << "' with value " | 755 LOG(ERROR) << "Shill property '" << shill_property_name << "' with value " |
| 753 << *shill_value << " has base::Value::Type " | 756 << *shill_value << " has base::Value::Type " |
| 754 << shill_value->GetType() << " but ONC field '" | 757 << shill_value->GetType() << " but ONC field '" |
| 755 << field_signature->onc_field_name << "' requires type " | 758 << field_signature->onc_field_name << "' requires type " |
| 756 << field_signature->value_signature->onc_type << ": " | 759 << field_signature->value_signature->onc_type << ": " |
| 757 << GetName(); | 760 << GetName(); |
| 758 return; | 761 return; |
| 759 } | 762 } |
| 760 | 763 |
| 761 onc_object_->SetWithoutPathExpansion(field_signature->onc_field_name, | 764 onc_object_->SetWithoutPathExpansion( |
| 762 shill_value->DeepCopy()); | 765 field_signature->onc_field_name, |
| 766 base::MakeUnique<base::Value>(*shill_value)); |
| 763 } | 767 } |
| 764 | 768 |
| 765 void ShillToONCTranslator::TranslateWithTableAndSet( | 769 void ShillToONCTranslator::TranslateWithTableAndSet( |
| 766 const std::string& shill_property_name, | 770 const std::string& shill_property_name, |
| 767 const StringTranslationEntry table[], | 771 const StringTranslationEntry table[], |
| 768 const std::string& onc_field_name) { | 772 const std::string& onc_field_name) { |
| 769 std::string shill_value; | 773 std::string shill_value; |
| 770 if (!shill_dictionary_->GetStringWithoutPathExpansion(shill_property_name, | 774 if (!shill_dictionary_->GetStringWithoutPathExpansion(shill_property_name, |
| 771 &shill_value)) { | 775 &shill_value)) { |
| 772 return; | 776 return; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 796 const NetworkState* network_state) { | 800 const NetworkState* network_state) { |
| 797 CHECK(onc_signature != NULL); | 801 CHECK(onc_signature != NULL); |
| 798 | 802 |
| 799 ShillToONCTranslator translator(shill_dictionary, onc_source, *onc_signature, | 803 ShillToONCTranslator translator(shill_dictionary, onc_source, *onc_signature, |
| 800 network_state); | 804 network_state); |
| 801 return translator.CreateTranslatedONCObject(); | 805 return translator.CreateTranslatedONCObject(); |
| 802 } | 806 } |
| 803 | 807 |
| 804 } // namespace onc | 808 } // namespace onc |
| 805 } // namespace chromeos | 809 } // namespace chromeos |
| OLD | NEW |