1// 2// Copyright (C) 2013 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#ifndef SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_ 18#define SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_ 19 20#include <map> 21#include <string> 22 23#include <base/callback.h> 24 25#include "shill/provider_interface.h" 26#include "shill/refptr_types.h" 27 28namespace shill { 29 30class ControlInterface; 31class Error; 32class Ethernet; 33class EventDispatcher; 34class KeyValueStore; 35class Manager; 36class Metrics; 37 38class EthernetEapProvider : public ProviderInterface { 39 public: 40 typedef base::Callback<void()> CredentialChangeCallback; 41 42 EthernetEapProvider(ControlInterface* control_interface, 43 EventDispatcher* dispatcher, 44 Metrics* metrics, 45 Manager* manager); 46 ~EthernetEapProvider() override; 47 48 // Called by Manager as a part of the Provider interface. 49 void CreateServicesFromProfile(const ProfileRefPtr& profile) override; 50 ServiceRefPtr GetService(const KeyValueStore& args, Error* error) override; 51 ServiceRefPtr FindSimilarService( 52 const KeyValueStore& args, Error* error) const override; 53 ServiceRefPtr CreateTemporaryService( 54 const KeyValueStore& args, Error* error) override; 55 ServiceRefPtr CreateTemporaryServiceFromProfile( 56 const ProfileRefPtr& profile, 57 const std::string& entry_name, 58 Error* error) override; 59 void Start() override; 60 void Stop() override; 61 62 virtual const ServiceRefPtr& service() const { return service_; } 63 64 // Notify |device| via |callback| when EAP credentials have changed. 65 // Any previous callbacks for |device| are removed. |device| is 66 // only used a key to a map and is never dereferenced. 67 virtual void SetCredentialChangeCallback(Ethernet* device, 68 CredentialChangeCallback callback); 69 70 // Clear any previously registered callback for |device|. 71 virtual void ClearCredentialChangeCallback(Ethernet* device); 72 73 // Called by |service_| when EAP credentials are changed. Notify all 74 // listening Ethernet devices. 75 virtual void OnCredentialsChanged() const; 76 77 private: 78 friend class EthernetEapProviderTest; 79 friend class EthernetTest; 80 friend class ManagerTest; 81 82 // Used only in Ethernet and Manager unit tests. 83 // TODO(gauravsh): Remove this and allow mocks to work correctly 84 // crbug.com/232134 85 void set_service(const ServiceRefPtr& service) { service_ = service; } 86 87 typedef std::map<Ethernet*, CredentialChangeCallback> CallbackMap; 88 89 // Representative service on which EAP credentials are configured. 90 ServiceRefPtr service_; 91 92 // Keyed set of notifiers to call when the EAP credentials for |service_| 93 // have changed. 94 CallbackMap callback_map_; 95 96 ControlInterface* control_interface_; 97 EventDispatcher* dispatcher_; 98 Metrics* metrics_; 99 Manager* manager_; 100}; 101 102} // namespace shill 103 104#endif // SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_ 105