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