1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2012 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//
164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
17cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#ifndef UPDATE_ENGINE_CONNECTION_MANAGER_H_
18cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#define UPDATE_ENGINE_CONNECTION_MANAGER_H_
194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
20305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo#include <string>
21305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo
2205735a1879a553153458aae0a25fa5d42e3e408fBen Chan#include <base/macros.h>
23758dd53cf503adbcb049909f25f54603d411be09Alex Deymo#include <dbus/object_path.h>
244348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
25f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo#include "update_engine/connection_manager_interface.h"
26305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo#include "update_engine/shill_proxy_interface.h"
274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasannamespace chromeos_update_engine {
294348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
30f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo// This class implements the concrete class that talks with the connection
31f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo// manager (shill) over DBus.
32305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo// TODO(deymo): Remove this class and use ShillProvider from the UpdateManager.
33f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymoclass ConnectionManager : public ConnectionManagerInterface {
344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan public:
35f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // Constructs a new ConnectionManager object initialized with the
36f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  // given system state.
37305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  ConnectionManager(ShillProxyInterface* shill_proxy,
38305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo                    SystemState* system_state);
39f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo  ~ConnectionManager() override = default;
40f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo
41305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  // ConnectionManagerInterface overrides.
42255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang  bool GetConnectionProperties(ConnectionType* out_type,
43255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                               ConnectionTethering* out_tethering) override;
44255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang  bool IsUpdateAllowedOver(ConnectionType type,
45255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                           ConnectionTethering tethering) const override;
466ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo
474348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan private:
48305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  // Returns (via out_path) the default network path, or empty string if
49305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  // there's no network up. Returns true on success.
50758dd53cf503adbcb049909f25f54603d411be09Alex Deymo  bool GetDefaultServicePath(dbus::ObjectPath* out_path);
51305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo
52758dd53cf503adbcb049909f25f54603d411be09Alex Deymo  bool GetServicePathProperties(const dbus::ObjectPath& path,
53255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                                ConnectionType* out_type,
54255e22b82af3a52218eaea66acc734ec25cfeab6Sen Jiang                                ConnectionTethering* out_tethering);
55305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo
56305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  // The mockable interface to access the shill DBus proxies.
57f5bebaef8dd12ff71baaf6fb4d4543db3615a6b4Sen Jiang  std::unique_ptr<ShillProxyInterface> shill_proxy_;
58305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo
59305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo  // The global context for update_engine.
604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan  SystemState* system_state_;
614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
624348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan  DISALLOW_COPY_AND_ASSIGN(ConnectionManager);
634348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan};
644348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
654348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan}  // namespace chromeos_update_engine
664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan
67cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#endif  // UPDATE_ENGINE_CONNECTION_MANAGER_H_
68