Home | History | Annotate | Download | only in ethernet
      1 //
      2 // Copyright (C) 2013 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "shill/ethernet/ethernet_eap_provider.h"
     18 
     19 #include <string>
     20 
     21 #include "shill/ethernet/ethernet_eap_service.h"
     22 #include "shill/manager.h"
     23 
     24 using std::string;
     25 
     26 namespace shill {
     27 
     28 EthernetEapProvider::EthernetEapProvider(ControlInterface* control_interface,
     29                                          EventDispatcher* dispatcher,
     30                                          Metrics* metrics,
     31                                          Manager* manager)
     32     : control_interface_(control_interface),
     33       dispatcher_(dispatcher),
     34       metrics_(metrics),
     35       manager_(manager) {}
     36 
     37 EthernetEapProvider::~EthernetEapProvider() {}
     38 
     39 void EthernetEapProvider::CreateServicesFromProfile(
     40     const ProfileRefPtr& profile) {
     41   // Since the EthernetEapProvider's service is created during Start(),
     42   // there is no need to do anything in this method.
     43 }
     44 
     45 ServiceRefPtr EthernetEapProvider::FindSimilarService(const KeyValueStore& args,
     46                                                       Error* error) const {
     47   CHECK_EQ(kTypeEthernetEap, args.LookupString(kTypeProperty, ""))
     48       << "Service type must be Ethernet EAP!";
     49   return service();
     50 }
     51 
     52 ServiceRefPtr EthernetEapProvider::GetService(const KeyValueStore& args,
     53                                               Error* error) {
     54   return FindSimilarService(args, error);
     55 }
     56 
     57 ServiceRefPtr EthernetEapProvider::CreateTemporaryService(
     58     const KeyValueStore& args,
     59     Error* error) {
     60   return new EthernetEapService(control_interface_,
     61                                 dispatcher_,
     62                                 metrics_,
     63                                 manager_);
     64 }
     65 
     66 ServiceRefPtr EthernetEapProvider::CreateTemporaryServiceFromProfile(
     67     const ProfileRefPtr& profile, const std::string& entry_name, Error* error) {
     68   return new EthernetEapService(control_interface_,
     69                                 dispatcher_,
     70                                 metrics_,
     71                                 manager_);
     72 }
     73 
     74 void EthernetEapProvider::Start() {
     75   if (!service_) {
     76     service_ = new EthernetEapService(control_interface_,
     77                                       dispatcher_,
     78                                       metrics_,
     79                                       manager_);
     80   }
     81   manager_->RegisterService(service_);
     82 }
     83 
     84 void EthernetEapProvider::Stop() {
     85   if (service_) {
     86     manager_->DeregisterService(service_);
     87   }
     88   // Do not destroy the service, since devices may or may not have been
     89   // removed as the provider is stopped, and we'd like them to continue
     90   // to refer to the same service on restart.
     91 }
     92 
     93 void EthernetEapProvider::SetCredentialChangeCallback(
     94     Ethernet* device, CredentialChangeCallback callback) {
     95   callback_map_[device] = callback;
     96 }
     97 
     98 void EthernetEapProvider::ClearCredentialChangeCallback(Ethernet* device) {
     99   CallbackMap::iterator it = callback_map_.find(device);
    100   if (it != callback_map_.end()) {
    101     callback_map_.erase(it);
    102   }
    103 }
    104 
    105 void EthernetEapProvider::OnCredentialsChanged() const {
    106   CallbackMap::const_iterator it;
    107   for (it = callback_map_.begin(); it != callback_map_.end(); ++it) {
    108     CHECK(!it->second.is_null());
    109     it->second.Run();
    110   }
    111 }
    112 
    113 }  // namespace shill
    114