blob: 5a0556ba7a5b3ccef71db5a8f1335c75101143d2 [file] [log] [blame]
Paul Stewart35eff132013-04-12 12:08:40 -07001// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/ethernet_eap_provider.h"
6
7#include <string>
8
9#include "shill/ethernet_eap_service.h"
10#include "shill/manager.h"
11
12using std::string;
13
14namespace shill {
15
16EthernetEapProvider::EthernetEapProvider(ControlInterface *control_interface,
17 EventDispatcher *dispatcher,
18 Metrics *metrics,
19 Manager *manager)
20 : control_interface_(control_interface),
21 dispatcher_(dispatcher),
22 metrics_(metrics),
23 manager_(manager) {}
24
Paul Stewart93e00f42013-04-19 15:45:23 -070025EthernetEapProvider::~EthernetEapProvider() {}
Paul Stewart35eff132013-04-12 12:08:40 -070026
Paul Stewartbc14fb72013-07-30 08:21:58 -070027void EthernetEapProvider::CreateServicesFromProfile(
28 const ProfileRefPtr &profile) {
29 // Since the EthernetEapProvider's service is created during Start(),
30 // there is no need to do anything in this method.
31}
32
33ServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore &args,
34 Error *error) const {
Paul Stewart0e51ad92013-07-26 14:42:55 -070035 CHECK_EQ(kTypeEthernetEap, args.LookupString(flimflam::kTypeProperty, ""))
36 << "Service type must be Ethernet EAP!";
37 return service();
38}
39
Paul Stewartbc14fb72013-07-30 08:21:58 -070040ServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore &args,
41 Error *error) {
42 return FindSimilarService(args, error);
43}
44
45ServiceRefPtr EthernetEapProvider::CreateTemporaryService(
46 const KeyValueStore &args,
47 Error *error) {
48 return new EthernetEapService(control_interface_,
49 dispatcher_,
50 metrics_,
51 manager_);
52}
53
Paul Stewart35eff132013-04-12 12:08:40 -070054void EthernetEapProvider::Start() {
55 if (!service_) {
56 service_ = new EthernetEapService(control_interface_,
57 dispatcher_,
58 metrics_,
59 manager_);
60 }
61 manager_->RegisterService(service_);
62}
63
64void EthernetEapProvider::Stop() {
65 if (service_) {
66 manager_->DeregisterService(service_);
67 }
68 // Do not destroy the service, since devices may or may not have been
69 // removed as the provider is stopped, and we'd like them to continue
70 // to refer to the same service on restart.
71}
72
73void EthernetEapProvider::SetCredentialChangeCallback(
74 Ethernet *device, CredentialChangeCallback callback) {
75 callback_map_[device] = callback;
76}
77
78void EthernetEapProvider::ClearCredentialChangeCallback(Ethernet *device) {
79 CallbackMap::iterator it = callback_map_.find(device);
80 if (it != callback_map_.end()) {
81 callback_map_.erase(it);
82 }
83}
84
85void EthernetEapProvider::OnCredentialsChanged() const {
86 CallbackMap::const_iterator it;
87 for (it = callback_map_.begin(); it != callback_map_.end(); ++it) {
88 CHECK(!it->second.is_null());
89 it->second.Run();
90 }
91}
92
93} // namespace shill