connection_manager_interface.h revision f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4
1//
2// Copyright (C) 2015 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 UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
18#define UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
19
20#include <memory>
21
22#include <base/macros.h>
23
24#include "update_engine/connection_utils.h"
25
26namespace chromeos_update_engine {
27
28class SystemState;
29
30// This class exposes a generic interface to the connection manager
31// (e.g FlimFlam, Shill, etc.) to consolidate all connection-related
32// logic in update_engine.
33class ConnectionManagerInterface {
34 public:
35  virtual ~ConnectionManagerInterface() = default;
36
37  // Populates |out_type| with the type of the network connection
38  // that we are currently connected and |out_tethering| with the estimate of
39  // whether that network is being tethered.
40  virtual bool GetConnectionProperties(ConnectionType* out_type,
41                                       ConnectionTethering* out_tethering) = 0;
42
43  // Returns true if we're allowed to update the system when we're
44  // connected to the internet through the given network connection type and the
45  // given tethering state.
46  virtual bool IsUpdateAllowedOver(ConnectionType type,
47                                   ConnectionTethering tethering) const = 0;
48
49 protected:
50  ConnectionManagerInterface() = default;
51
52 private:
53  DISALLOW_COPY_AND_ASSIGN(ConnectionManagerInterface);
54};
55
56namespace connection_manager {
57// Factory function which creates a ConnectionManager.
58std::unique_ptr<ConnectionManagerInterface> CreateConnectionManager(
59    SystemState* system_state);
60}
61
62}  // namespace chromeos_update_engine
63
64#endif  // UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
65