1a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//
2a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// Copyright (C) 2015 The Android Open Source Project
3a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//
4a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// you may not use this file except in compliance with the License.
6a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// You may obtain a copy of the License at
7a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//
8a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//
10a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// Unless required by applicable law or agreed to in writing, software
11a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// See the License for the specific language governing permissions and
14a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// limitations under the License.
15a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu//
16a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
17a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#ifndef APMANAGER_CONTROL_INTERFACE_H_
18a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#define APMANAGER_CONTROL_INTERFACE_H_
19a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
20a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#include <base/callback.h>
21a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#include <base/macros.h>
22a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
2300029783fc5a927dd0cddc03bdcd8e760655ce46Peter Qiu#include "apmanager/config_adaptor_interface.h"
24f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu#include "apmanager/device_adaptor_interface.h"
25a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#include "apmanager/firewall_proxy_interface.h"
26685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#include "apmanager/manager_adaptor_interface.h"
270e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#include "apmanager/service_adaptor_interface.h"
28a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#include "apmanager/shill_proxy_interface.h"
29a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
30a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiunamespace apmanager {
31a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
3200029783fc5a927dd0cddc03bdcd8e760655ce46Peter Qiuclass Config;
33f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiuclass Device;
34685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiuclass Manager;
350e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiuclass Service;
36f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu
37a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// This is the Interface for an object factory that creates adaptor/proxy
38a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu// objects
39a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiuclass ControlInterface {
40a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu public:
41a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu  virtual ~ControlInterface() {}
42a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
430d70fa725563571fff9e91e7a86386d3d1db4667Peter Qiu  virtual void Init() = 0;
440d70fa725563571fff9e91e7a86386d3d1db4667Peter Qiu  virtual void Shutdown() = 0;
450d70fa725563571fff9e91e7a86386d3d1db4667Peter Qiu
46f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu  // Adaptor creation APIs.
4700029783fc5a927dd0cddc03bdcd8e760655ce46Peter Qiu  virtual std::unique_ptr<ConfigAdaptorInterface> CreateConfigAdaptor(
4800029783fc5a927dd0cddc03bdcd8e760655ce46Peter Qiu      Config* config, int service_identifier) = 0;
49f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu  virtual std::unique_ptr<DeviceAdaptorInterface> CreateDeviceAdaptor(
50f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu      Device* device) = 0;
51685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu  virtual std::unique_ptr<ManagerAdaptorInterface> CreateManagerAdaptor(
52685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu      Manager* manager) = 0;
530e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  virtual std::unique_ptr<ServiceAdaptorInterface> CreateServiceAdaptor(
540e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu      Service* service) = 0;
55f933540bb968efa2744ee48b40ab713ccd358d51Peter Qiu
56a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu  // Proxy creation APIs.
57a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu  virtual std::unique_ptr<FirewallProxyInterface> CreateFirewallProxy(
58a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu      const base::Closure& service_appeared_callback,
59a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu      const base::Closure& service_vanished_callback) = 0;
60a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu  virtual std::unique_ptr<ShillProxyInterface> CreateShillProxy(
61a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu      const base::Closure& service_appeared_callback,
62a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu      const base::Closure& service_vanished_callback) = 0;
63a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu};
64a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
65a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu}  // namespace apmanager
66a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu
67a522e0006b344c6438a18e0a4848e7cdfbf5dd0aPeter Qiu#endif  // APMANAGER_CONTROL_INTERFACE_H_
68