blob: dc6c9838d1470e92e0f1035ed296abf4d5e2573e [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
Amin Hassaniec7bc112020-10-29 16:47:58 -070017#ifndef UPDATE_ENGINE_CROS_CONNECTION_MANAGER_INTERFACE_H_
18#define UPDATE_ENGINE_CROS_CONNECTION_MANAGER_INTERFACE_H_
Alex Deymof6ee0162015-07-31 12:35:22 -070019
Sen Jiangf5bebae2016-06-03 15:36:54 -070020#include <memory>
21
Alex Deymof6ee0162015-07-31 12:35:22 -070022#include <base/macros.h>
23
Amin Hassaniec7bc112020-10-29 16:47:58 -070024#include "update_engine/common/connection_utils.h"
Sen Jiang255e22b2016-05-20 16:15:29 -070025
Alex Deymof6ee0162015-07-31 12:35:22 -070026namespace chromeos_update_engine {
27
Alex Deymof6ee0162015-07-31 12:35:22 -070028// This class exposes a generic interface to the connection manager
29// (e.g FlimFlam, Shill, etc.) to consolidate all connection-related
30// logic in update_engine.
31class ConnectionManagerInterface {
32 public:
33 virtual ~ConnectionManagerInterface() = default;
34
35 // Populates |out_type| with the type of the network connection
36 // that we are currently connected and |out_tethering| with the estimate of
37 // whether that network is being tethered.
Sen Jiang255e22b2016-05-20 16:15:29 -070038 virtual bool GetConnectionProperties(ConnectionType* out_type,
39 ConnectionTethering* out_tethering) = 0;
Alex Deymof6ee0162015-07-31 12:35:22 -070040
41 // Returns true if we're allowed to update the system when we're
42 // connected to the internet through the given network connection type and the
43 // given tethering state.
Sen Jiang255e22b2016-05-20 16:15:29 -070044 virtual bool IsUpdateAllowedOver(ConnectionType type,
45 ConnectionTethering tethering) const = 0;
Alex Deymof6ee0162015-07-31 12:35:22 -070046
Weidong Guo421ff332017-04-17 10:08:38 -070047 // Returns true if the allowed connection types for update is set in the
48 // device policy. Otherwise, returns false.
49 virtual bool IsAllowedConnectionTypesForUpdateSet() const = 0;
50
Alex Deymof6ee0162015-07-31 12:35:22 -070051 protected:
52 ConnectionManagerInterface() = default;
53
54 private:
55 DISALLOW_COPY_AND_ASSIGN(ConnectionManagerInterface);
56};
57
Sen Jiangf5bebae2016-06-03 15:36:54 -070058namespace connection_manager {
59// Factory function which creates a ConnectionManager.
Amin Hassani538bd592020-11-04 20:46:08 -080060std::unique_ptr<ConnectionManagerInterface> CreateConnectionManager();
Amin Hassani7cc8bb02019-01-14 16:29:47 -080061} // namespace connection_manager
Sen Jiangf5bebae2016-06-03 15:36:54 -070062
Alex Deymof6ee0162015-07-31 12:35:22 -070063} // namespace chromeos_update_engine
64
Amin Hassaniec7bc112020-10-29 16:47:58 -070065#endif // UPDATE_ENGINE_CROS_CONNECTION_MANAGER_INTERFACE_H_