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 #include "shill/ethernet/ethernet_eap_provider.h"
18
19 #include <string>
20
21 #include "shill/ethernet/ethernet_eap_service.h"
22 #include "shill/manager.h"
23
24 using std::string;
25
26 namespace shill {
27
EthernetEapProvider(ControlInterface * control_interface,EventDispatcher * dispatcher,Metrics * metrics,Manager * manager)28 EthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface,
29 EventDispatcher* dispatcher,
30 Metrics* metrics,
31 Manager* manager)
32 : control_interface_(control_interface),
33 dispatcher_(dispatcher),
34 metrics_(metrics),
35 manager_(manager) {}
36
~EthernetEapProvider()37 EthernetEapProvider::~EthernetEapProvider() {}
38
CreateServicesFromProfile(const ProfileRefPtr & profile)39 void EthernetEapProvider::CreateServicesFromProfile(
40 const ProfileRefPtr& profile) {
41 // Since the EthernetEapProvider's service is created during Start(),
42 // there is no need to do anything in this method.
43 }
44
FindSimilarService(const KeyValueStore & args,Error * error) const45 ServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args,
46 Error* error) const {
47 CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, ""))
48 << "Service type must be Ethernet EAP!";
49 return service();
50 }
51
GetService(const KeyValueStore & args,Error * error)52 ServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args,
53 Error* error) {
54 return FindSimilarService(args, error);
55 }
56
CreateTemporaryService(const KeyValueStore & args,Error * error)57 ServiceRefPtr EthernetEapProvider::CreateTemporaryService(
58 const KeyValueStore& args,
59 Error* error) {
60 return new EthernetEapService(control_interface_,
61 dispatcher_,
62 metrics_,
63 manager_);
64 }
65
CreateTemporaryServiceFromProfile(const ProfileRefPtr & profile,const std::string & entry_name,Error * error)66 ServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile(
67 const ProfileRefPtr& profile, const std::string& entry_name, Error* error) {
68 return new EthernetEapService(control_interface_,
69 dispatcher_,
70 metrics_,
71 manager_);
72 }
73
Start()74 void EthernetEapProvider::Start() {
75 if (!service_) {
76 service_ = new EthernetEapService(control_interface_,
77 dispatcher_,
78 metrics_,
79 manager_);
80 }
81 manager_->RegisterService(service_);
82 }
83
Stop()84 void EthernetEapProvider::Stop() {
85 if (service_) {
86 manager_->DeregisterService(service_);
87 }
88 // Do not destroy the service, since devices may or may not have been
89 // removed as the provider is stopped, and we'd like them to continue
90 // to refer to the same service on restart.
91 }
92
SetCredentialChangeCallback(Ethernet * device,CredentialChangeCallback callback)93 void EthernetEapProvider::SetCredentialChangeCallback(
94 Ethernet* device, CredentialChangeCallback callback) {
95 callback_map_[device] = callback;
96 }
97
ClearCredentialChangeCallback(Ethernet * device)98 void EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) {
99 CallbackMap::iterator it = callback_map_.find(device);
100 if (it != callback_map_.end()) {
101 callback_map_.erase(it);
102 }
103 }
104
OnCredentialsChanged() const105 void EthernetEapProvider::OnCredentialsChanged() const {
106 CallbackMap::const_iterator it;
107 for (it = callback_map_.begin(); it != callback_map_.end(); ++it) {
108 CHECK(!it->second.is_null());
109 it->second.Run();
110 }
111 }
112
113 } // namespace shill
114