Chromium Code Reviews| 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 "chromeos/network/onc/onc_translator.h" | 5 #include "chromeos/network/onc/onc_translator.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 const OncValueSignature* value_signature); | 108 const OncValueSignature* value_signature); |
| 109 | 109 |
| 110 // Applies function CopyProperty to each field of |onc_signature_| and its | 110 // Applies function CopyProperty to each field of |onc_signature_| and its |
| 111 // base signatures. | 111 // base signatures. |
| 112 void CopyPropertiesAccordingToSignature(); | 112 void CopyPropertiesAccordingToSignature(); |
| 113 | 113 |
| 114 // If |shill_property_name| is defined in |field_signature|, copies this | 114 // If |shill_property_name| is defined in |field_signature|, copies this |
| 115 // entry from |shill_dictionary_| to |onc_object_| if it exists. | 115 // entry from |shill_dictionary_| to |onc_object_| if it exists. |
| 116 void CopyProperty(const OncFieldSignature* field_signature); | 116 void CopyProperty(const OncFieldSignature* field_signature); |
| 117 | 117 |
| 118 // If |shill_property_name| exists in |shill_dictionary_|, copy it to | |
| 119 // |dictionary|. | |
|
pneubeck (no reviews)
2014/09/03 15:14:29
nit: mention that it copies to the key |onc_proper
stevenjb
2014/09/03 21:28:06
Done, and renamed -> onc_field_name for consistenc
| |
| 120 void CopyPropertyToDictionary(const std::string& shill_property_name, | |
| 121 const std::string& onc_property_name, | |
| 122 base::DictionaryValue* dictionary); | |
| 123 | |
| 118 // If existent, translates the entry at |shill_property_name| in | 124 // If existent, translates the entry at |shill_property_name| in |
| 119 // |shill_dictionary_| using |table|. It is an error if no matching table | 125 // |shill_dictionary_| using |table|. It is an error if no matching table |
| 120 // entry is found. Writes the result as entry at |onc_field_name| in | 126 // entry is found. Writes the result as entry at |onc_field_name| in |
| 121 // |onc_object_|. | 127 // |onc_object_|. |
| 122 void TranslateWithTableAndSet(const std::string& shill_property_name, | 128 void TranslateWithTableAndSet(const std::string& shill_property_name, |
| 123 const StringTranslationEntry table[], | 129 const StringTranslationEntry table[], |
| 124 const std::string& onc_field_name); | 130 const std::string& onc_field_name); |
| 125 | 131 |
| 126 // Returns the name of the Shill service provided in |shill_dictionary_| | 132 // Returns the name of the Shill service provided in |shill_dictionary_| |
| 127 // for debugging. | 133 // for debugging. |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 370 // Translate nested Cellular, WiFi, etc. properties. | 376 // Translate nested Cellular, WiFi, etc. properties. |
| 371 if (!onc_network_type.empty()) { | 377 if (!onc_network_type.empty()) { |
| 372 onc_object_->SetStringWithoutPathExpansion(::onc::network_config::kType, | 378 onc_object_->SetStringWithoutPathExpansion(::onc::network_config::kType, |
| 373 onc_network_type); | 379 onc_network_type); |
| 374 TranslateAndAddNestedObject(onc_network_type); | 380 TranslateAndAddNestedObject(onc_network_type); |
| 375 } | 381 } |
| 376 | 382 |
| 377 // Since Name is a read only field in Shill unless it's a VPN, it is copied | 383 // Since Name is a read only field in Shill unless it's a VPN, it is copied |
| 378 // here, but not when going the other direction (if it's not a VPN). | 384 // here, but not when going the other direction (if it's not a VPN). |
| 379 std::string name; | 385 std::string name; |
| 380 shill_dictionary_->GetStringWithoutPathExpansion(shill::kNameProperty, | 386 shill_dictionary_->GetStringWithoutPathExpansion(shill::kNameProperty, &name); |
| 381 &name); | |
| 382 onc_object_->SetStringWithoutPathExpansion(::onc::network_config::kName, | 387 onc_object_->SetStringWithoutPathExpansion(::onc::network_config::kName, |
| 383 name); | 388 name); |
| 384 | 389 |
| 385 // Limit ONC state to "NotConnected", "Connected", or "Connecting". | 390 // Limit ONC state to "NotConnected", "Connected", or "Connecting". |
| 386 std::string state; | 391 std::string state; |
| 387 if (shill_dictionary_->GetStringWithoutPathExpansion(shill::kStateProperty, | 392 if (shill_dictionary_->GetStringWithoutPathExpansion(shill::kStateProperty, |
| 388 &state)) { | 393 &state)) { |
| 389 std::string onc_state = ::onc::connection_state::kNotConnected; | 394 std::string onc_state = ::onc::connection_state::kNotConnected; |
| 390 if (NetworkState::StateIsConnected(state)) { | 395 if (NetworkState::StateIsConnected(state)) { |
| 391 onc_state = ::onc::connection_state::kConnected; | 396 onc_state = ::onc::connection_state::kConnected; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 411 | 416 |
| 412 // Shill's Service has an IPConfig property (note the singular), not an | 417 // Shill's Service has an IPConfig property (note the singular), not an |
| 413 // IPConfigs property. However, we require the caller of the translation to | 418 // IPConfigs property. However, we require the caller of the translation to |
| 414 // patch the Shill dictionary before passing it to the translator. | 419 // patch the Shill dictionary before passing it to the translator. |
| 415 const base::ListValue* shill_ipconfigs = NULL; | 420 const base::ListValue* shill_ipconfigs = NULL; |
| 416 if (shill_dictionary_->GetListWithoutPathExpansion(shill::kIPConfigsProperty, | 421 if (shill_dictionary_->GetListWithoutPathExpansion(shill::kIPConfigsProperty, |
| 417 &shill_ipconfigs)) { | 422 &shill_ipconfigs)) { |
| 418 TranslateAndAddListOfObjects(::onc::network_config::kIPConfigs, | 423 TranslateAndAddListOfObjects(::onc::network_config::kIPConfigs, |
| 419 *shill_ipconfigs); | 424 *shill_ipconfigs); |
| 420 } | 425 } |
| 426 | |
| 427 // Convert StaticIP and SavedIP properties to dictionary format. | |
| 428 scoped_ptr<base::DictionaryValue> static_ip(new base::DictionaryValue); | |
|
pneubeck (no reviews)
2014/09/03 15:14:28
I think if you can save most of this code by suppo
stevenjb
2014/09/03 21:28:06
I'll... try doing this in a separate CL. I think I
pneubeck (no reviews)
2014/09/04 14:54:13
Thanks
| |
| 429 CopyPropertyToDictionary(shill::kStaticIPAddressProperty, | |
| 430 ::onc::ipconfig::kIPAddress, | |
| 431 static_ip.get()); | |
| 432 CopyPropertyToDictionary(shill::kStaticIPGatewayProperty, | |
| 433 ::onc::ipconfig::kGateway, | |
| 434 static_ip.get()); | |
| 435 CopyPropertyToDictionary(shill::kStaticIPNameServersProperty, | |
| 436 ::onc::ipconfig::kNameServers, | |
| 437 static_ip.get()); | |
| 438 CopyPropertyToDictionary(shill::kStaticIPPrefixlenProperty, | |
| 439 ::onc::ipconfig::kRoutingPrefix, | |
| 440 static_ip.get()); | |
| 441 if (!static_ip->empty()) { | |
| 442 onc_object_->SetWithoutPathExpansion(::onc::network_config::kStaticIPConfig, | |
| 443 static_ip.release()); | |
| 444 } | |
| 445 | |
| 446 scoped_ptr<base::DictionaryValue> saved_ip(new base::DictionaryValue); | |
| 447 CopyPropertyToDictionary(shill::kSavedIPAddressProperty, | |
| 448 ::onc::ipconfig::kIPAddress, | |
| 449 saved_ip.get()); | |
| 450 CopyPropertyToDictionary(shill::kSavedIPGatewayProperty, | |
| 451 ::onc::ipconfig::kGateway, | |
| 452 saved_ip.get()); | |
| 453 CopyPropertyToDictionary(shill::kSavedIPNameServersProperty, | |
| 454 ::onc::ipconfig::kNameServers, | |
| 455 saved_ip.get()); | |
| 456 CopyPropertyToDictionary(shill::kSavedIPPrefixlenProperty, | |
| 457 ::onc::ipconfig::kRoutingPrefix, | |
| 458 saved_ip.get()); | |
| 459 if (!saved_ip->empty()) { | |
| 460 onc_object_->SetWithoutPathExpansion(::onc::network_config::kSavedIPConfig, | |
| 461 saved_ip.release()); | |
| 462 } | |
| 421 } | 463 } |
| 422 | 464 |
| 423 void ShillToONCTranslator::TranslateIPConfig() { | 465 void ShillToONCTranslator::TranslateIPConfig() { |
| 424 CopyPropertiesAccordingToSignature(); | 466 CopyPropertiesAccordingToSignature(); |
| 425 std::string shill_ip_method; | 467 std::string shill_ip_method; |
| 426 shill_dictionary_->GetStringWithoutPathExpansion(shill::kMethodProperty, | 468 shill_dictionary_->GetStringWithoutPathExpansion(shill::kMethodProperty, |
| 427 &shill_ip_method); | 469 &shill_ip_method); |
| 428 std::string type; | 470 std::string type; |
| 429 if (shill_ip_method == shill::kTypeIPv4 || | 471 if (shill_ip_method == shill::kTypeIPv4 || |
| 430 shill_ip_method == shill::kTypeDHCP) { | 472 shill_ip_method == shill::kTypeDHCP) { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 << "' requires type " | 586 << "' requires type " |
| 545 << field_signature->value_signature->onc_type | 587 << field_signature->value_signature->onc_type |
| 546 << ": " << GetName(); | 588 << ": " << GetName(); |
| 547 return; | 589 return; |
| 548 } | 590 } |
| 549 | 591 |
| 550 onc_object_->SetWithoutPathExpansion(field_signature->onc_field_name, | 592 onc_object_->SetWithoutPathExpansion(field_signature->onc_field_name, |
| 551 shill_value->DeepCopy()); | 593 shill_value->DeepCopy()); |
| 552 } | 594 } |
| 553 | 595 |
| 596 void ShillToONCTranslator::CopyPropertyToDictionary( | |
| 597 const std::string& shill_property_name, | |
| 598 const std::string& onc_property_name, | |
| 599 base::DictionaryValue* dictionary) { | |
| 600 const base::Value* shill_value; | |
| 601 if (!shill_dictionary_->GetWithoutPathExpansion(shill_property_name, | |
| 602 &shill_value)) { | |
| 603 return; | |
| 604 } | |
| 605 dictionary->SetWithoutPathExpansion(onc_property_name, | |
| 606 shill_value->DeepCopy()); | |
| 607 } | |
| 608 | |
| 554 void ShillToONCTranslator::TranslateWithTableAndSet( | 609 void ShillToONCTranslator::TranslateWithTableAndSet( |
| 555 const std::string& shill_property_name, | 610 const std::string& shill_property_name, |
| 556 const StringTranslationEntry table[], | 611 const StringTranslationEntry table[], |
| 557 const std::string& onc_field_name) { | 612 const std::string& onc_field_name) { |
| 558 std::string shill_value; | 613 std::string shill_value; |
| 559 if (!shill_dictionary_->GetStringWithoutPathExpansion(shill_property_name, | 614 if (!shill_dictionary_->GetStringWithoutPathExpansion(shill_property_name, |
| 560 &shill_value)) { | 615 &shill_value)) { |
| 561 return; | 616 return; |
| 562 } | 617 } |
| 563 std::string onc_value; | 618 std::string onc_value; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 582 const base::DictionaryValue& shill_dictionary, | 637 const base::DictionaryValue& shill_dictionary, |
| 583 const OncValueSignature* onc_signature) { | 638 const OncValueSignature* onc_signature) { |
| 584 CHECK(onc_signature != NULL); | 639 CHECK(onc_signature != NULL); |
| 585 | 640 |
| 586 ShillToONCTranslator translator(shill_dictionary, *onc_signature); | 641 ShillToONCTranslator translator(shill_dictionary, *onc_signature); |
| 587 return translator.CreateTranslatedONCObject(); | 642 return translator.CreateTranslatedONCObject(); |
| 588 } | 643 } |
| 589 | 644 |
| 590 } // namespace onc | 645 } // namespace onc |
| 591 } // namespace chromeos | 646 } // namespace chromeos |
| OLD | NEW |