Home | History | Annotate | Download | only in shill
      1 //
      2 // Copyright (C) 2012 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 #ifndef SHILL_CONTROL_INTERFACE_H_
     18 #define SHILL_CONTROL_INTERFACE_H_
     19 
     20 #include <algorithm>
     21 #include <string>
     22 
     23 #include <base/callback.h>
     24 
     25 #include "shill/logging.h"
     26 
     27 namespace shill {
     28 
     29 class Device;
     30 class DeviceAdaptorInterface;
     31 class IPConfig;
     32 class IPConfigAdaptorInterface;
     33 class Manager;
     34 class ManagerAdaptorInterface;
     35 class Profile;
     36 class ProfileAdaptorInterface;
     37 class RPCTask;
     38 class RPCTaskAdaptorInterface;
     39 class Service;
     40 class ServiceAdaptorInterface;
     41 class ThirdPartyVpnDriver;
     42 class ThirdPartyVpnAdaptorInterface;
     43 
     44 class DBusObjectManagerProxyInterface;
     45 class DBusPropertiesProxyInterface;
     46 class DHCPCDListenerInterface;
     47 class DHCPProvider;
     48 class DHCPProxyInterface;
     49 class FirewallProxyInterface;
     50 class ModemCDMAProxyInterface;
     51 class ModemGSMCardProxyInterface;
     52 class ModemGSMNetworkProxyInterface;
     53 class ModemGobiProxyInterface;
     54 class ModemManagerClassic;
     55 class ModemManagerProxyInterface;
     56 class ModemProxyInterface;
     57 class ModemSimpleProxyInterface;
     58 class PowerManagerProxyDelegate;
     59 class PowerManagerProxyInterface;
     60 class UpstartProxyInterface;
     61 class WiMaxDeviceProxyInterface;
     62 class WiMaxManagerProxyInterface;
     63 class WiMaxNetworkProxyInterface;
     64 
     65 #if !defined(DISABLE_WIFI)
     66 class SupplicantBSSProxyInterface;
     67 class WiFiEndpoint;
     68 #endif  // DISABLE_WIFI
     69 
     70 #if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
     71 class SupplicantEventDelegateInterface;
     72 class SupplicantInterfaceProxyInterface;
     73 class SupplicantNetworkProxyInterface;
     74 class SupplicantProcessProxyInterface;
     75 #endif  // DISABLE_WIFI || DISABLE_WIRED_8021X
     76 
     77 namespace mm1 {
     78 
     79 class ModemModem3gppProxyInterface;
     80 class ModemModemCdmaProxyInterface;
     81 class ModemProxyInterface;
     82 class ModemSimpleProxyInterface;
     83 class SimProxyInterface;
     84 
     85 }  // namespace mm1
     86 
     87 class RPCServiceWatcherInterface;
     88 
     89 // This is the Interface for an object factory that creates adaptor/proxy
     90 // objects
     91 class ControlInterface {
     92  public:
     93   virtual ~ControlInterface() {}
     94   virtual void RegisterManagerObject(
     95       Manager* manager, const base::Closure& registration_done_callback) = 0;
     96   virtual DeviceAdaptorInterface* CreateDeviceAdaptor(Device* device) = 0;
     97   virtual IPConfigAdaptorInterface* CreateIPConfigAdaptor(
     98       IPConfig* ipconfig) = 0;
     99   virtual ManagerAdaptorInterface* CreateManagerAdaptor(Manager* manager) = 0;
    100   virtual ProfileAdaptorInterface* CreateProfileAdaptor(Profile* profile) = 0;
    101   virtual ServiceAdaptorInterface* CreateServiceAdaptor(Service* service) = 0;
    102   virtual RPCTaskAdaptorInterface* CreateRPCTaskAdaptor(RPCTask* task) = 0;
    103 #ifndef DISABLE_VPN
    104   virtual ThirdPartyVpnAdaptorInterface* CreateThirdPartyVpnAdaptor(
    105       ThirdPartyVpnDriver* driver) = 0;
    106 #endif
    107 
    108   virtual const std::string& NullRPCIdentifier() = 0;
    109 
    110   // The caller retains ownership of 'delegate'.  It must not be deleted before
    111   // the proxy.
    112   virtual PowerManagerProxyInterface* CreatePowerManagerProxy(
    113       PowerManagerProxyDelegate* delegate,
    114       const base::Closure& service_appeared_callback,
    115       const base::Closure& service_vanished_callback) = 0;
    116 
    117 #if !defined(DISABLE_WIFI) || !defined(DISABLE_WIRED_8021X)
    118   virtual SupplicantProcessProxyInterface* CreateSupplicantProcessProxy(
    119       const base::Closure& service_appeared_callback,
    120       const base::Closure& service_vanished_callback) = 0;
    121 
    122   virtual SupplicantInterfaceProxyInterface* CreateSupplicantInterfaceProxy(
    123       SupplicantEventDelegateInterface* delegate,
    124       const std::string& object_path) = 0;
    125 
    126   virtual SupplicantNetworkProxyInterface* CreateSupplicantNetworkProxy(
    127       const std::string& object_path) = 0;
    128 #endif  // DISABLE_WIFI || DISABLE_WIRED_8021X
    129 
    130 #if !defined(DISABLE_WIFI)
    131   // See comment in supplicant_bss_proxy.h, about bare pointer.
    132   virtual SupplicantBSSProxyInterface* CreateSupplicantBSSProxy(
    133       WiFiEndpoint* wifi_endpoint,
    134       const std::string& object_path) = 0;
    135 #endif  // DISABLE_WIFI
    136 
    137   virtual UpstartProxyInterface* CreateUpstartProxy() = 0;
    138 
    139   virtual DHCPCDListenerInterface* CreateDHCPCDListener(
    140       DHCPProvider* provider) = 0;
    141 
    142   virtual DHCPProxyInterface* CreateDHCPProxy(const std::string& service) = 0;
    143 
    144   virtual FirewallProxyInterface* CreateFirewallProxy() = 0;
    145 
    146 #if !defined(DISABLE_CELLULAR)
    147   virtual DBusPropertiesProxyInterface* CreateDBusPropertiesProxy(
    148       const std::string& path,
    149       const std::string& service) = 0;
    150 
    151   virtual DBusObjectManagerProxyInterface* CreateDBusObjectManagerProxy(
    152       const std::string& path,
    153       const std::string& service,
    154       const base::Closure& service_appeared_callback,
    155       const base::Closure& service_vanished_callback) = 0;
    156 
    157   virtual ModemManagerProxyInterface* CreateModemManagerProxy(
    158       ModemManagerClassic* manager,
    159       const std::string& path,
    160       const std::string& service,
    161       const base::Closure& service_appeared_callback,
    162       const base::Closure& service_vanished_callback) = 0;
    163 
    164   virtual ModemProxyInterface* CreateModemProxy(const std::string& path,
    165                                                 const std::string& service) = 0;
    166 
    167   virtual ModemSimpleProxyInterface* CreateModemSimpleProxy(
    168       const std::string& path,
    169       const std::string& service) = 0;
    170 
    171   virtual ModemCDMAProxyInterface* CreateModemCDMAProxy(
    172       const std::string& path,
    173       const std::string& service) = 0;
    174 
    175   virtual ModemGSMCardProxyInterface* CreateModemGSMCardProxy(
    176       const std::string& path,
    177       const std::string& service) = 0;
    178 
    179   virtual ModemGSMNetworkProxyInterface* CreateModemGSMNetworkProxy(
    180       const std::string& path,
    181       const std::string& service) = 0;
    182 
    183   virtual ModemGobiProxyInterface* CreateModemGobiProxy(
    184       const std::string& path,
    185       const std::string& service) = 0;
    186 
    187   // Proxies for ModemManager1 interfaces
    188   virtual mm1::ModemModem3gppProxyInterface* CreateMM1ModemModem3gppProxy(
    189       const std::string& path,
    190       const std::string& service) = 0;
    191 
    192   virtual mm1::ModemModemCdmaProxyInterface* CreateMM1ModemModemCdmaProxy(
    193       const std::string& path,
    194       const std::string& service) = 0;
    195 
    196   virtual mm1::ModemProxyInterface* CreateMM1ModemProxy(
    197       const std::string& path,
    198       const std::string& service) = 0;
    199 
    200   virtual mm1::ModemSimpleProxyInterface* CreateMM1ModemSimpleProxy(
    201       const std::string& path,
    202       const std::string& service) = 0;
    203 
    204   virtual mm1::SimProxyInterface* CreateSimProxy(
    205       const std::string& path,
    206       const std::string& service) = 0;
    207 #endif  // DISABLE_CELLULAR
    208 
    209 #if !defined(DISABLE_WIMAX)
    210   virtual WiMaxDeviceProxyInterface* CreateWiMaxDeviceProxy(
    211       const std::string& path) = 0;
    212   virtual WiMaxManagerProxyInterface* CreateWiMaxManagerProxy(
    213       const base::Closure& service_appeared_callback,
    214       const base::Closure& service_vanished_callback) = 0;
    215   virtual WiMaxNetworkProxyInterface* CreateWiMaxNetworkProxy(
    216       const std::string& path) = 0;
    217 #endif  // DISABLE_WIMAX
    218 
    219   static void RpcIdToStorageId(std::string* rpc_id) {
    220     CHECK(rpc_id);
    221     DCHECK_EQ(rpc_id->at(0), '/');
    222     rpc_id->erase(0, 1);
    223     std::replace(rpc_id->begin(), rpc_id->end(), '/', '_');
    224   }
    225 };
    226 
    227 }  // namespace shill
    228 
    229 #endif  // SHILL_CONTROL_INTERFACE_H_
    230