blob: 21708f18ca3174a2127150c929048acce2394d02 [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
Paul Stewartbc14fb72013-07-30 08:21:58 -070012#include "shill/provider_interface.h"
Paul Stewart35eff132013-04-12 12:08:40 -070013#include "shill/refptr_types.h"
14
15namespace shill {
16
17class ControlInterface;
Paul Stewart0e51ad92013-07-26 14:42:55 -070018class Error;
Paul Stewart35eff132013-04-12 12:08:40 -070019class Ethernet;
20class EventDispatcher;
Paul Stewart0e51ad92013-07-26 14:42:55 -070021class KeyValueStore;
Paul Stewart35eff132013-04-12 12:08:40 -070022class Manager;
23class Metrics;
24
Paul Stewartbc14fb72013-07-30 08:21:58 -070025class EthernetEapProvider : public ProviderInterface {
Paul Stewart35eff132013-04-12 12:08:40 -070026 public:
27 typedef base::Callback<void()> CredentialChangeCallback;
28
29 EthernetEapProvider(ControlInterface *control_interface,
30 EventDispatcher *dispatcher,
31 Metrics *metrics,
32 Manager *manager);
33 virtual ~EthernetEapProvider();
34
Paul Stewart0e51ad92013-07-26 14:42:55 -070035 // Called by Manager as a part of the Provider interface.
Paul Stewartbc14fb72013-07-30 08:21:58 -070036 virtual void CreateServicesFromProfile(const ProfileRefPtr &profile) override;
Paul Stewart0e51ad92013-07-26 14:42:55 -070037 virtual ServiceRefPtr GetService(const KeyValueStore &args,
38 Error *error) override;
Paul Stewartbc14fb72013-07-30 08:21:58 -070039 virtual ServiceRefPtr FindSimilarService(
40 const KeyValueStore &args, Error *error) const override;
41 virtual ServiceRefPtr CreateTemporaryService(
42 const KeyValueStore &args, Error *error) override;
Paul Stewart0e51ad92013-07-26 14:42:55 -070043 virtual void Start() override;
44 virtual void Stop() override;
Paul Stewart35eff132013-04-12 12:08:40 -070045
46 virtual const ServiceRefPtr &service() const { return service_; }
47
48 // Notify |device| via |callback| when EAP credentials have changed.
49 // Any previous callbacks for |device| are removed. |device| is
50 // only used a key to a map and is never dereferenced.
51 virtual void SetCredentialChangeCallback(Ethernet *device,
52 CredentialChangeCallback callback);
53
54 // Clear any previously registered callback for |device|.
55 virtual void ClearCredentialChangeCallback(Ethernet *device);
56
57 // Called by |service_| when EAP credentials are changed. Notify all
58 // listening Ethernet devices.
59 virtual void OnCredentialsChanged() const;
60
61 private:
62 friend class EthernetEapProviderTest;
63 friend class EthernetTest;
64 friend class ManagerTest;
65
66 // Used only in Ethernet and Manager unit tests.
67 // TODO(gauravsh): Remove this and allow mocks to work correctly
68 // crbug.com/232134
69 void set_service(const ServiceRefPtr &service) { service_ = service; }
70
71 typedef std::map<Ethernet *, CredentialChangeCallback> CallbackMap;
72
73 // Representative service on which EAP credentials are configured.
74 ServiceRefPtr service_;
75
76 // Keyed set of notifiers to call when the EAP credentials for |service_|
77 // have changed.
78 CallbackMap callback_map_;
79
80 ControlInterface *control_interface_;
81 EventDispatcher *dispatcher_;
82 Metrics *metrics_;
83 Manager *manager_;
84};
85
86} // namespace shill
87
88#endif // SHILL_ETHERNET_EAP_PROVIDER_H_