104 lines
3.4 KiB
C++
104 lines
3.4 KiB
C++
//
|
|
// Copyright (C) 2013 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
#ifndef SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_
|
|
#define SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include <base/callback.h>
|
|
|
|
#include "shill/provider_interface.h"
|
|
#include "shill/refptr_types.h"
|
|
|
|
namespace shill {
|
|
|
|
class ControlInterface;
|
|
class Error;
|
|
class Ethernet;
|
|
class EventDispatcher;
|
|
class KeyValueStore;
|
|
class Manager;
|
|
class Metrics;
|
|
|
|
class EthernetEapProvider : public ProviderInterface {
|
|
public:
|
|
typedef base::Callback<void()> CredentialChangeCallback;
|
|
|
|
EthernetEapProvider(ControlInterface* control_interface,
|
|
EventDispatcher* dispatcher,
|
|
Metrics* metrics,
|
|
Manager* manager);
|
|
~EthernetEapProvider() override;
|
|
|
|
// Called by Manager as a part of the Provider interface.
|
|
void CreateServicesFromProfile(const ProfileRefPtr& profile) override;
|
|
ServiceRefPtr GetService(const KeyValueStore& args, Error* error) override;
|
|
ServiceRefPtr FindSimilarService(
|
|
const KeyValueStore& args, Error* error) const override;
|
|
ServiceRefPtr CreateTemporaryService(
|
|
const KeyValueStore& args, Error* error) override;
|
|
ServiceRefPtr CreateTemporaryServiceFromProfile(
|
|
const ProfileRefPtr& profile,
|
|
const std::string& entry_name,
|
|
Error* error) override;
|
|
void Start() override;
|
|
void Stop() override;
|
|
|
|
virtual const ServiceRefPtr& service() const { return service_; }
|
|
|
|
// Notify |device| via |callback| when EAP credentials have changed.
|
|
// Any previous callbacks for |device| are removed. |device| is
|
|
// only used a key to a map and is never dereferenced.
|
|
virtual void SetCredentialChangeCallback(Ethernet* device,
|
|
CredentialChangeCallback callback);
|
|
|
|
// Clear any previously registered callback for |device|.
|
|
virtual void ClearCredentialChangeCallback(Ethernet* device);
|
|
|
|
// Called by |service_| when EAP credentials are changed. Notify all
|
|
// listening Ethernet devices.
|
|
virtual void OnCredentialsChanged() const;
|
|
|
|
private:
|
|
friend class EthernetEapProviderTest;
|
|
friend class EthernetTest;
|
|
friend class ManagerTest;
|
|
|
|
// Used only in Ethernet and Manager unit tests.
|
|
// TODO(gauravsh): Remove this and allow mocks to work correctly
|
|
// crbug.com/232134
|
|
void set_service(const ServiceRefPtr& service) { service_ = service; }
|
|
|
|
typedef std::map<Ethernet*, CredentialChangeCallback> CallbackMap;
|
|
|
|
// Representative service on which EAP credentials are configured.
|
|
ServiceRefPtr service_;
|
|
|
|
// Keyed set of notifiers to call when the EAP credentials for |service_|
|
|
// have changed.
|
|
CallbackMap callback_map_;
|
|
|
|
ControlInterface* control_interface_;
|
|
EventDispatcher* dispatcher_;
|
|
Metrics* metrics_;
|
|
Manager* manager_;
|
|
};
|
|
|
|
} // namespace shill
|
|
|
|
#endif // SHILL_ETHERNET_ETHERNET_EAP_PROVIDER_H_
|