1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2015 The Android Open Source Project
3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License");
5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License.
6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at
7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//      http://www.apache.org/licenses/LICENSE-2.0
9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software
11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS,
12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and
14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License.
15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
16f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
17f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo#ifndef UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
18f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo#define UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
19f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
20f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang#include <memory>
21f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang
22f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo#include <base/macros.h>
23f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
24255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang#include "update_engine/connection_utils.h"
25f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
26255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiangnamespace chromeos_update_engine {
27f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
28f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiangclass SystemState;
29f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang
30f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo// This class exposes a generic interface to the connection manager
31f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo// (e.g FlimFlam, Shill, etc.) to consolidate all connection-related
32f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo// logic in update_engine.
33f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymoclass ConnectionManagerInterface {
34f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo public:
35f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  virtual ~ConnectionManagerInterface() = default;
36f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
37f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // Populates |out_type| with the type of the network connection
38f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // that we are currently connected and |out_tethering| with the estimate of
39f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // whether that network is being tethered.
40255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang  virtual bool GetConnectionProperties(ConnectionType* out_type,
41255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                                       ConnectionTethering* out_tethering) = 0;
42f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
43f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // Returns true if we're allowed to update the system when we're
44f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // connected to the internet through the given network connection type and the
45f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // given tethering state.
46255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang  virtual bool IsUpdateAllowedOver(ConnectionType type,
47255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                                   ConnectionTethering tethering) const = 0;
48f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
49f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo protected:
50f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  ConnectionManagerInterface() = default;
51f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
52f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo private:
53f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  DISALLOW_COPY_AND_ASSIGN(ConnectionManagerInterface);
54f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo};
55f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
56f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiangnamespace connection_manager {
57f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang// Factory function which creates a ConnectionManager.
58f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiangstd::unique_ptr<ConnectionManagerInterface> CreateConnectionManager(
59f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang    SystemState* system_state);
60f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang}
61f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang
62f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo}  // namespace chromeos_update_engine
63f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
64f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo#endif  // UPDATE_ENGINE_CONNECTION_MANAGER_INTERFACE_H_
65