| // |
| // Copyright (C) 2013 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #include "shill/ethernet/ethernet_eap_provider.h" |
| |
| #include <string> |
| |
| #include "shill/ethernet/ethernet_eap_service.h" |
| #include "shill/manager.h" |
| |
| using std::string; |
| |
| namespace shill { |
| |
| EthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface, |
| EventDispatcher* dispatcher, |
| Metrics* metrics, |
| Manager* manager) |
| : control_interface_(control_interface), |
| dispatcher_(dispatcher), |
| metrics_(metrics), |
| manager_(manager) {} |
| |
| EthernetEapProvider::~EthernetEapProvider() {} |
| |
| void EthernetEapProvider::CreateServicesFromProfile( |
| const ProfileRefPtr& profile) { |
| // Since the EthernetEapProvider's service is created during Start(), |
| // there is no need to do anything in this method. |
| } |
| |
| ServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args, |
| Error* error) const { |
| CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, "")) |
| << "Service type must be Ethernet EAP!"; |
| return service(); |
| } |
| |
| ServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args, |
| Error* error) { |
| return FindSimilarService(args, error); |
| } |
| |
| ServiceRefPtr EthernetEapProvider::CreateTemporaryService( |
| const KeyValueStore& args, |
| Error* error) { |
| return new EthernetEapService(control_interface_, |
| dispatcher_, |
| metrics_, |
| manager_); |
| } |
| |
| ServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile( |
| const ProfileRefPtr& profile, const std::string& entry_name, Error* error) { |
| return new EthernetEapService(control_interface_, |
| dispatcher_, |
| metrics_, |
| manager_); |
| } |
| |
| void EthernetEapProvider::Start() { |
| if (!service_) { |
| service_ = new EthernetEapService(control_interface_, |
| dispatcher_, |
| metrics_, |
| manager_); |
| } |
| manager_->RegisterService(service_); |
| } |
| |
| void EthernetEapProvider::Stop() { |
| if (service_) { |
| manager_->DeregisterService(service_); |
| } |
| // Do not destroy the service, since devices may or may not have been |
| // removed as the provider is stopped, and we'd like them to continue |
| // to refer to the same service on restart. |
| } |
| |
| void EthernetEapProvider::SetCredentialChangeCallback( |
| Ethernet* device, CredentialChangeCallback callback) { |
| callback_map_[device] = callback; |
| } |
| |
| void EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) { |
| CallbackMap::iterator it = callback_map_.find(device); |
| if (it != callback_map_.end()) { |
| callback_map_.erase(it); |
| } |
| } |
| |
| void EthernetEapProvider::OnCredentialsChanged() const { |
| for (const auto& ethernet_callback_pair : callback_map_) { |
| CHECK(!ethernet_callback_pair.second.is_null()); |
| ethernet_callback_pair.second.Run(); |
| } |
| } |
| |
| } // namespace shill |