| Index: chromeos/network/onc/onc_translator_onc_to_shill.cc
|
| diff --git a/chromeos/network/onc/onc_translator_onc_to_shill.cc b/chromeos/network/onc/onc_translator_onc_to_shill.cc
|
| index cd8a4eb788d2abc00fc50e0d297a4aea8e02754f..6f38700e5d0d1d777c37598bde00afe7573f66ac 100644
|
| --- a/chromeos/network/onc/onc_translator_onc_to_shill.cc
|
| +++ b/chromeos/network/onc/onc_translator_onc_to_shill.cc
|
| @@ -53,6 +53,8 @@ class LocalTranslator {
|
| private:
|
| void TranslateOpenVPN();
|
| void TranslateVPN();
|
| + void TranslateWiFi();
|
| + void TranslateEAP();
|
| void TranslateNetworkConfiguration();
|
|
|
| // Copies all entries from |onc_object_| to |shill_dictionary_| for which a
|
| @@ -86,6 +88,10 @@ void LocalTranslator::TranslateFields() {
|
| TranslateVPN();
|
| else if (onc_signature_ == &kOpenVPNSignature)
|
| TranslateOpenVPN();
|
| + else if (onc_signature_ == &kWiFiSignature)
|
| + TranslateWiFi();
|
| + else if (onc_signature_ == &kEAPSignature)
|
| + TranslateEAP();
|
| else
|
| CopyFieldsAccordingToSignature();
|
| }
|
| @@ -115,13 +121,58 @@ void LocalTranslator::TranslateOpenVPN() {
|
| }
|
|
|
| void LocalTranslator::TranslateVPN() {
|
| - TranslateWithTableAndSet(kType, kVPNTypeTable,
|
| + std::string type;
|
| + onc_object_->GetStringWithoutPathExpansion(kType, &type);
|
| + TranslateWithTableAndSet(type, kVPNTypeTable,
|
| flimflam::kProviderTypeProperty);
|
| +
|
| + CopyFieldsAccordingToSignature();
|
| +}
|
| +
|
| +void LocalTranslator::TranslateWiFi() {
|
| + std::string security;
|
| + onc_object_->GetStringWithoutPathExpansion(wifi::kSecurity, &security);
|
| + TranslateWithTableAndSet(security, kWiFiSecurityTable,
|
| + flimflam::kSecurityProperty);
|
| +
|
| + CopyFieldsAccordingToSignature();
|
| +}
|
| +
|
| +void LocalTranslator::TranslateEAP() {
|
| + std::string outer;
|
| + onc_object_->GetStringWithoutPathExpansion(eap::kOuter, &outer);
|
| + TranslateWithTableAndSet(outer, kEAPOuterTable, flimflam::kEapMethodProperty);
|
| +
|
| + // Translate the inner protocol only for outer tunneling protocols.
|
| + if (outer == eap::kPEAP || outer == eap::kEAP_TTLS) {
|
| + // In ONC the Inner protocol defaults to "Automatic".
|
| + std::string inner = eap::kAutomatic;
|
| + // ONC's Inner == "Automatic" translates to omitting the Phase2 property in
|
| + // Shill.
|
| + onc_object_->GetStringWithoutPathExpansion(eap::kInner, &inner);
|
| + if (inner != eap::kAutomatic) {
|
| + const StringTranslationEntry* table =
|
| + outer == eap::kPEAP ? kEAP_PEAP_InnerTable : kEAP_TTLS_InnerTable;
|
| + TranslateWithTableAndSet(inner, table, flimflam::kEapPhase2AuthProperty);
|
| + }
|
| + }
|
| +
|
| CopyFieldsAccordingToSignature();
|
| }
|
|
|
| void LocalTranslator::TranslateNetworkConfiguration() {
|
| - TranslateWithTableAndSet(kType, kNetworkTypeTable, flimflam::kTypeProperty);
|
| + std::string type;
|
| + onc_object_->GetStringWithoutPathExpansion(kType, &type);
|
| + TranslateWithTableAndSet(type, kNetworkTypeTable, flimflam::kTypeProperty);
|
| +
|
| + // Shill doesn't allow setting the name for non-VPN networks.
|
| + if (type == kVPN) {
|
| + std::string name;
|
| + onc_object_->GetStringWithoutPathExpansion(kName, &name);
|
| + shill_dictionary_->SetStringWithoutPathExpansion(
|
| + flimflam::kNameProperty, name);
|
| + }
|
| +
|
| CopyFieldsAccordingToSignature();
|
| }
|
|
|
| @@ -149,13 +200,9 @@ void LocalTranslator::AddValueAccordingToSignature(
|
| }
|
|
|
| void LocalTranslator::TranslateWithTableAndSet(
|
| - const std::string& onc_field_name,
|
| + const std::string& onc_value,
|
| const StringTranslationEntry table[],
|
| const std::string& shill_property_name) {
|
| - std::string onc_value;
|
| - if (!onc_object_->GetStringWithoutPathExpansion(onc_field_name, &onc_value))
|
| - return;
|
| -
|
| for (int i = 0; table[i].onc_value != NULL; ++i) {
|
| if (onc_value != table[i].onc_value)
|
| continue;
|
| @@ -166,8 +213,7 @@ void LocalTranslator::TranslateWithTableAndSet(
|
| // As we previously validate ONC, this case should never occur. If it still
|
| // occurs, we should check here. Otherwise the failure will only show up much
|
| // later in Shill.
|
| - LOG(ERROR) << "Value '" << onc_value << "' for field '"
|
| - << onc_field_name << "' cannot be translated to Shill";
|
| + LOG(ERROR) << "Value '" << onc_value << "cannot be translated to Shill";
|
| }
|
|
|
| // Iterates recursively over |onc_object| and its |signature|. At each object
|
|
|