1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2013 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
1635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
1787602518c59af2f9e8288d81a1f877dd80f24433Ben Chan#include "shill/ethernet/ethernet_eap_provider.h"
1835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
1935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart#include <string>
2035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
2187602518c59af2f9e8288d81a1f877dd80f24433Ben Chan#include "shill/ethernet/ethernet_eap_service.h"
2235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart#include "shill/manager.h"
2335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
2435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartusing std::string;
2535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
2635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartnamespace shill {
2735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
287e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartEthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface,
297e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart                                         EventDispatcher* dispatcher,
307e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart                                         Metrics* metrics,
317e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart                                         Manager* manager)
3235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    : control_interface_(control_interface),
3335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart      dispatcher_(dispatcher),
3435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart      metrics_(metrics),
3535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart      manager_(manager) {}
3635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
3793e00f46b5dbef652b763ac900df352b2f5f5a4cPaul StewartEthernetEapProvider::~EthernetEapProvider() {}
3835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
39bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewartvoid EthernetEapProvider::CreateServicesFromProfile(
407e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart    const ProfileRefPtr& profile) {
41bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart  // Since the EthernetEapProvider's service is created during Start(),
42bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart  // there is no need to do anything in this method.
43bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart}
44bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart
457e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args,
467e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart                                                      Error* error) const {
47783f00b0ff2cf27277fa663e443595cce5c5846aBen Chan  CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, ""))
480e51ad959ff2d81472e053b2809991082f976362Paul Stewart      << "Service type must be Ethernet EAP!";
490e51ad959ff2d81472e053b2809991082f976362Paul Stewart  return service();
500e51ad959ff2d81472e053b2809991082f976362Paul Stewart}
510e51ad959ff2d81472e053b2809991082f976362Paul Stewart
527e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul StewartServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args,
537e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart                                              Error* error) {
54bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart  return FindSimilarService(args, error);
55bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart}
56bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart
57bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul StewartServiceRefPtr EthernetEapProvider::CreateTemporaryService(
587e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart    const KeyValueStore& args,
597e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart    Error* error) {
60bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart  return new EthernetEapService(control_interface_,
61bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart                                dispatcher_,
62bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart                                metrics_,
63bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart                                manager_);
64bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart}
65bc14fb7e10919a39d8e82d5981d94961aa5d4be7Paul Stewart
6618213652e2ce4c6e4354951e5b665097b7a7aa6bPeter QiuServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile(
677e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart    const ProfileRefPtr& profile, const std::string& entry_name, Error* error) {
6818213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu  return new EthernetEapService(control_interface_,
6918213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu                                dispatcher_,
7018213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu                                metrics_,
7118213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu                                manager_);
7218213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu}
7318213652e2ce4c6e4354951e5b665097b7a7aa6bPeter Qiu
7435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::Start() {
7535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  if (!service_) {
7635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    service_ = new EthernetEapService(control_interface_,
7735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart                                      dispatcher_,
7835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart                                      metrics_,
7935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart                                      manager_);
8035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  }
8135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  manager_->RegisterService(service_);
8235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}
8335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
8435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::Stop() {
8535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  if (service_) {
8635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    manager_->DeregisterService(service_);
8735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  }
8835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  // Do not destroy the service, since devices may or may not have been
8935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  // removed as the provider is stopped, and we'd like them to continue
9035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  // to refer to the same service on restart.
9135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}
9235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
9335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::SetCredentialChangeCallback(
947e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewart    Ethernet* device, CredentialChangeCallback callback) {
9535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  callback_map_[device] = callback;
9635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}
9735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
987e779d87abbba4d9e50ef28513a27c7bbd5cd550Paul Stewartvoid EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) {
9935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  CallbackMap::iterator it = callback_map_.find(device);
10035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  if (it != callback_map_.end()) {
10135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    callback_map_.erase(it);
10235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  }
10335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}
10435eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
10535eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewartvoid EthernetEapProvider::OnCredentialsChanged() const {
10635eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  CallbackMap::const_iterator it;
10735eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  for (it = callback_map_.begin(); it != callback_map_.end(); ++it) {
10835eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    CHECK(!it->second.is_null());
10935eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart    it->second.Run();
11035eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart  }
11135eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}
11235eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart
11335eff134fd95fdf1918803c4966f8b790914b3d4Paul Stewart}  // namespace shill
114