blob: 9f779891f27f863da3a1965d196c667fcdd2735a [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
Weidong Guo421ff332017-04-17 10:08:38 -070049 // Returns true if the allowed connection types for update is set in the
50 // device policy. Otherwise, returns false.
51 virtual bool IsAllowedConnectionTypesForUpdateSet() const = 0;
52
Alex Deymof6ee0162015-07-31 12:35:22 -070053 protected:
54 ConnectionManagerInterface() = default;
55
56 private:
57 DISALLOW_COPY_AND_ASSIGN(ConnectionManagerInterface);
58};
59
Sen Jiangf5bebae2016-06-03 15:36:54 -070060namespace connection_manager {
61// Factory function which creates a ConnectionManager.
62std::unique_ptr<ConnectionManagerInterface> CreateConnectionManager(
63 SystemState* system_state);
Amin Hassani7cc8bb02019-01-14 16:29:47 -080064} // namespace connection_manager
Sen Jiangf5bebae2016-06-03 15:36:54 -070065
Alex Deymof6ee0162015-07-31 12:35:22 -070066} // namespace chromeos_update_engine
67
68#endif // UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_