blob: 8bd3601a77b2944ac000bc352ec71311f4965f05 [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#ifndef SHILL_ETHERNET_EAP_PROVIDER_H_
6#define SHILL_ETHERNET_EAP_PROVIDER_H_
7
8#include <map>
9
10#include <base/callback.h>
11
12#include "shill/refptr_types.h"
13
14namespace shill {
15
16class ControlInterface;
17class Ethernet;
18class EventDispatcher;
19class Manager;
20class Metrics;
21
22class EthernetEapProvider {
23 public:
24 typedef base::Callback<void()> CredentialChangeCallback;
25
26 EthernetEapProvider(ControlInterface *control_interface,
27 EventDispatcher *dispatcher,
28 Metrics *metrics,
29 Manager *manager);
30 virtual ~EthernetEapProvider();
31
32 virtual void Start();
33 virtual void Stop();
34
35 virtual const ServiceRefPtr &service() const { return service_; }
36
37 // Notify |device| via |callback| when EAP credentials have changed.
38 // Any previous callbacks for |device| are removed. |device| is
39 // only used a key to a map and is never dereferenced.
40 virtual void SetCredentialChangeCallback(Ethernet *device,
41 CredentialChangeCallback callback);
42
43 // Clear any previously registered callback for |device|.
44 virtual void ClearCredentialChangeCallback(Ethernet *device);
45
46 // Called by |service_| when EAP credentials are changed. Notify all
47 // listening Ethernet devices.
48 virtual void OnCredentialsChanged() const;
49
50 private:
51 friend class EthernetEapProviderTest;
52 friend class EthernetTest;
53 friend class ManagerTest;
54
55 // Used only in Ethernet and Manager unit tests.
56 // TODO(gauravsh): Remove this and allow mocks to work correctly
57 // crbug.com/232134
58 void set_service(const ServiceRefPtr &service) { service_ = service; }
59
60 typedef std::map<Ethernet *, CredentialChangeCallback> CallbackMap;
61
62 // Representative service on which EAP credentials are configured.
63 ServiceRefPtr service_;
64
65 // Keyed set of notifiers to call when the EAP credentials for |service_|
66 // have changed.
67 CallbackMap callback_map_;
68
69 ControlInterface *control_interface_;
70 EventDispatcher *dispatcher_;
71 Metrics *metrics_;
72 Manager *manager_;
73};
74
75} // namespace shill
76
77#endif // SHILL_ETHERNET_EAP_PROVIDER_H_