blob: df8eb4be78e0ca22e908e2269c0a5fb99065b0bb [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
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//
Alex Deymof6ee0162015-07-31 12:35:22 -070016
17#ifndef UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
18#define UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
19
Sen Jiangf5bebae2016-06-03 15:36:54 -070020#include <memory>
21
Alex Deymof6ee0162015-07-31 12:35:22 -070022#include <base/macros.h>
23
Sen Jiang255e22b2016-05-20 16:15:29 -070024#include "update_engine/connection_utils.h"
25
Alex Deymof6ee0162015-07-31 12:35:22 -070026namespace chromeos_update_engine {
27
Sen Jiangf5bebae2016-06-03 15:36:54 -070028class SystemState;
29
Alex Deymof6ee0162015-07-31 12:35:22 -070030// 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.
Sen Jiang255e22b2016-05-20 16:15:29 -070040 virtual bool GetConnectionProperties(ConnectionType* out_type,
41 ConnectionTethering* out_tethering) = 0;
Alex Deymof6ee0162015-07-31 12:35:22 -070042
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.
Sen Jiang255e22b2016-05-20 16:15:29 -070046 virtual bool IsUpdateAllowedOver(ConnectionType type,
47 ConnectionTethering tethering) const = 0;
Alex Deymof6ee0162015-07-31 12:35:22 -070048
49 protected:
50 ConnectionManagerInterface() = default;
51
52 private:
53 DISALLOW_COPY_AND_ASSIGN(ConnectionManagerInterface);
54};
55
Sen Jiangf5bebae2016-06-03 15:36:54 -070056namespace connection_manager {
57// Factory function which creates a ConnectionManager.
58std::unique_ptr<ConnectionManagerInterface> CreateConnectionManager(
59 SystemState* system_state);
60}
61
Alex Deymof6ee0162015-07-31 12:35:22 -070062} // namespace chromeos_update_engine
63
64#endif // UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_