1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2013 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 1635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 1787602518c59af2f9e8288d81a1f877dd80f24433Ben Chan#include "shill/ethernet/ethernet_eap_provider.h" 1835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 1935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart#include <string> 2035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 2187602518c59af2f9e8288d81a1f877dd80f24433Ben Chan#include "shill/ethernet/ethernet_eap_service.h" 2235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart#include "shill/manager.h" 2335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 2435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartusing std::string; 2535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 2635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartnamespace shill { 2735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 287e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartEthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface, 297e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart EventDispatcher* dispatcher, 307e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Metrics* metrics, 317e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Manager* manager) 3235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart : control_interface_(control_interface), 3335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart dispatcher_(dispatcher), 3435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart metrics_(metrics), 3535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart manager_(manager) {} 3635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 3793e00f46b5dbef652b763ac900df352b2f5f5a4cPaul StewartEthernetEapProvider::~EthernetEapProvider() {} 3835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 39bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewartvoid EthernetEapProvider::CreateServicesFromProfile( 407e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart const ProfileRefPtr& profile) { 41bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart // Since the EthernetEapProvider's service is created during Start(), 42bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart // there is no need to do anything in this method. 43bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart} 44bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart 457e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args, 467e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Error* error) const { 47783f00b0ff2cf27277fa663e443595cce5c5846aBen Chan CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, "")) 480e51ad959ff2d81472e053b2809991082f976362Paul Stewart << "Service type must be Ethernet EAP!"; 490e51ad959ff2d81472e053b2809991082f976362Paul Stewart return service(); 500e51ad959ff2d81472e053b2809991082f976362Paul Stewart} 510e51ad959ff2d81472e053b2809991082f976362Paul Stewart 527e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args, 537e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Error* error) { 54bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart return FindSimilarService(args, error); 55bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart} 56bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart 57bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul StewartServiceRefPtr EthernetEapProvider::CreateTemporaryService( 587e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart const KeyValueStore& args, 597e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Error* error) { 60bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart return new EthernetEapService(control_interface_, 61bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart dispatcher_, 62bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart metrics_, 63bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart manager_); 64bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart} 65bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart 6618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile( 677e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart const ProfileRefPtr& profile, const std::string& entry_name, Error* error) { 6818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu return new EthernetEapService(control_interface_, 6918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu dispatcher_, 7018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu metrics_, 7118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu manager_); 7218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu} 7318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu 7435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::Start() { 7535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart if (!service_) { 7635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart service_ = new EthernetEapService(control_interface_, 7735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart dispatcher_, 7835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart metrics_, 7935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart manager_); 8035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart } 8135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart manager_->RegisterService(service_); 8235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} 8335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 8435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::Stop() { 8535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart if (service_) { 8635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart manager_->DeregisterService(service_); 8735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart } 8835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart // Do not destroy the service, since devices may or may not have been 8935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart // removed as the provider is stopped, and we'd like them to continue 9035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart // to refer to the same service on restart. 9135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} 9235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 9335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::SetCredentialChangeCallback( 947e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart Ethernet* device, CredentialChangeCallback callback) { 9535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart callback_map_[device] = callback; 9635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} 9735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 987e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewartvoid EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) { 9935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart CallbackMap::iterator it = callback_map_.find(device); 10035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart if (it != callback_map_.end()) { 10135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart callback_map_.erase(it); 10235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart } 10335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} 10435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 10535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::OnCredentialsChanged() const { 10635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart CallbackMap::const_iterator it; 10735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart for (it = callback_map_.begin(); it != callback_map_.end(); ++it) { 10835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart CHECK(!it->second.is_null()); 10935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart it->second.Run(); 11035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart } 11135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} 11235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart 11335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart} // namespace shill 114