blob: 95b015ed35cd837c18dddb687c2f1a095f586fed [file] [log] [blame]
Peter Qiuc0beca52015-09-03 11:25:46 -07001//
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//
Paul Stewart35eff132013-04-12 12:08:40 -070016
Ben Chan87602512014-11-07 20:50:05 -080017#include "shill/ethernet/ethernet_eap_provider.h"
Paul Stewart35eff132013-04-12 12:08:40 -070018
19#include <string>
20
Ben Chan87602512014-11-07 20:50:05 -080021#include "shill/ethernet/ethernet_eap_service.h"
Paul Stewart35eff132013-04-12 12:08:40 -070022#include "shill/manager.h"
23
24using std::string;
25
26namespace shill {
27
Paul Stewart7e779d82015-06-16 13:13:10 -070028EthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface,
29 EventDispatcher* dispatcher,
30 Metrics* metrics,
31 Manager* manager)
Paul Stewart35eff132013-04-12 12:08:40 -070032 : control_interface_(control_interface),
33 dispatcher_(dispatcher),
34 metrics_(metrics),
35 manager_(manager) {}
36
Paul Stewart93e00f42013-04-19 15:45:23 -070037EthernetEapProvider::~EthernetEapProvider() {}
Paul Stewart35eff132013-04-12 12:08:40 -070038
Paul Stewartbc14fb72013-07-30 08:21:58 -070039void EthernetEapProvider::CreateServicesFromProfile(
Paul Stewart7e779d82015-06-16 13:13:10 -070040 const ProfileRefPtr& profile) {
Paul Stewartbc14fb72013-07-30 08:21:58 -070041 // Since the EthernetEapProvider's service is created during Start(),
42 // there is no need to do anything in this method.
43}
44
Paul Stewart7e779d82015-06-16 13:13:10 -070045ServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args,
46 Error* error) const {
Ben Chan783f00b2013-09-20 13:50:34 -070047 CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, ""))
Paul Stewart0e51ad92013-07-26 14:42:55 -070048 << "Service type must be Ethernet EAP!";
49 return service();
50}
51
Paul Stewart7e779d82015-06-16 13:13:10 -070052ServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args,
53 Error* error) {
Paul Stewartbc14fb72013-07-30 08:21:58 -070054 return FindSimilarService(args, error);
55}
56
57ServiceRefPtr EthernetEapProvider::CreateTemporaryService(
Paul Stewart7e779d82015-06-16 13:13:10 -070058 const KeyValueStore& args,
59 Error* error) {
Paul Stewartbc14fb72013-07-30 08:21:58 -070060 return new EthernetEapService(control_interface_,
61 dispatcher_,
62 metrics_,
63 manager_);
64}
65
Peter Qiu18213652015-04-21 16:01:51 -070066ServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile(
Paul Stewart7e779d82015-06-16 13:13:10 -070067 const ProfileRefPtr& profile, const std::string& entry_name, Error* error) {
Peter Qiu18213652015-04-21 16:01:51 -070068 return new EthernetEapService(control_interface_,
69 dispatcher_,
70 metrics_,
71 manager_);
72}
73
Paul Stewart35eff132013-04-12 12:08:40 -070074void EthernetEapProvider::Start() {
75 if (!service_) {
76 service_ = new EthernetEapService(control_interface_,
77 dispatcher_,
78 metrics_,
79 manager_);
80 }
81 manager_->RegisterService(service_);
82}
83
84void 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
93void EthernetEapProvider::SetCredentialChangeCallback(
Paul Stewart7e779d82015-06-16 13:13:10 -070094 Ethernet* device, CredentialChangeCallback callback) {
Paul Stewart35eff132013-04-12 12:08:40 -070095 callback_map_[device] = callback;
96}
97
Paul Stewart7e779d82015-06-16 13:13:10 -070098void EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) {
Paul Stewart35eff132013-04-12 12:08:40 -070099 CallbackMap::iterator it = callback_map_.find(device);
100 if (it != callback_map_.end()) {
101 callback_map_.erase(it);
102 }
103}
104
105void 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