connection_manager.cc revision efb7c4c605440fdc6297deed8fa9d1aecb77235e
14348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Use of this source code is governed by a BSD-style license that can be 3d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// found in the LICENSE file. 4d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 54348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/connection_manager.h" 6d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 7d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include <string> 8d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 94348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <base/stl_util.h> 10d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include <base/string_util.h> 114348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <chromeos/dbus/service_constants.h> 12d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include <dbus/dbus-glib.h> 13d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include <glib.h> 14d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 15f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo#include "update_engine/prefs.h" 164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/system_state.h" 17d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include "update_engine/utils.h" 18d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::set; 20d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesusing std::string; 21d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 22d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesnamespace chromeos_update_engine { 23d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 24d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesnamespace { 25d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 26d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Gets the DbusGProxy for FlimFlam. Must be free'd with ProxyUnref() 27d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetFlimFlamProxy(DbusGlibInterface* dbus_iface, 28d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* path, 29d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* interface, 30d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy** out_proxy) { 31d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGConnection* bus; 32d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy* proxy; 33d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GError* error = NULL; 34d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 35d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bus = dbus_iface->BusGet(DBUS_BUS_SYSTEM, &error); 36d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (!bus) { 37d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "Failed to get system bus"; 38d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 39d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 40d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes proxy = dbus_iface->ProxyNewForNameOwner(bus, 414348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServiceName, 42d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path, 43d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes interface, 44d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &error); 45d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (!proxy) { 46d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "Error getting FlimFlam proxy: " 47a0b9e777e2c571546bd6ab55356acb023834cbc3Darin Petkov << utils::GetAndFreeGError(&error); 48d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 49d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 50d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_proxy = proxy; 51d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 52d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 53d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 54d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// On success, caller owns the GHashTable at out_hash_table. 55d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns true on success. 56d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetProperties(DbusGlibInterface* dbus_iface, 57d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* path, 58d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* interface, 59d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable** out_hash_table) { 60d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy* proxy; 61d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GError* error = NULL; 62d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 63d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetFlimFlamProxy(dbus_iface, 64d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path, 65d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes interface, 66d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &proxy)); 67d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 68d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes gboolean rc = dbus_iface->ProxyCall(proxy, 69d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes "GetProperties", 70d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &error, 71d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_INVALID, 72d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes dbus_g_type_get_map("GHashTable", 73d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_STRING, 74d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_VALUE), 75d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes out_hash_table, 76d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_INVALID); 77d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes dbus_iface->ProxyUnref(proxy); 78d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (rc == FALSE) { 79d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "dbus_g_proxy_call failed"; 80d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 81d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 82d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 83d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 84d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 85d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 86d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns (via out_path) the default network path, or empty string if 87d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// there's no network up. 88d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns true on success. 89d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetDefaultServicePath(DbusGlibInterface* dbus_iface, string* out_path) { 90d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable* hash_table = NULL; 91d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 92d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetProperties(dbus_iface, 934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServicePath, 944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamManagerInterface, 95d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &hash_table)); 96d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 97d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GValue* value = reinterpret_cast<GValue*>(g_hash_table_lookup(hash_table, 98d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes "Services")); 99d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GArray* array = NULL; 100d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bool success = false; 10188226ff9674d5d6250a0c919082e9bd1c93c35bfmukesh agrawal if (G_VALUE_HOLDS(value, DBUS_TYPE_G_OBJECT_PATH_ARRAY) && 102d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes (array = reinterpret_cast<GArray*>(g_value_get_boxed(value))) && 103d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes (array->len > 0)) { 104d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_path = g_array_index(array, const char*, 0); 105d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes success = true; 106d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 10788226ff9674d5d6250a0c919082e9bd1c93c35bfmukesh agrawal 108d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes g_hash_table_unref(hash_table); 109d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return success; 110d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 111d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 112d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los ReyesNetworkConnectionType ParseConnectionType(const char* type_str) { 1134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!strcmp(type_str, flimflam::kTypeEthernet)) { 114d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetEthernet; 1154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeWifi)) { 116d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetWifi; 1174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeWimax)) { 118d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetWimax; 1194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeBluetooth)) { 120d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetBluetooth; 1214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeCellular)) { 122d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetCellular; 123d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 124d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetUnknown; 125d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 126d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 127d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetServicePathType(DbusGlibInterface* dbus_iface, 128d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const string& path, 129d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes NetworkConnectionType* out_type) { 130d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable* hash_table = NULL; 131d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 132d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetProperties(dbus_iface, 133d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path.c_str(), 1344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServiceInterface, 135d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &hash_table)); 136d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 137d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GValue* value = (GValue*)g_hash_table_lookup(hash_table, "Type"); 138d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* type_str = NULL; 139d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bool success = false; 140d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (value != NULL && (type_str = g_value_get_string(value)) != NULL) { 141d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_type = ParseConnectionType(type_str); 142d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes success = true; 143d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 144d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes g_hash_table_unref(hash_table); 145d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return success; 146d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 147d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 148d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} // namespace {} 149d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 1504348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanConnectionManager::ConnectionManager(SystemState *system_state) 1514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan : system_state_(system_state) {} 1524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanbool ConnectionManager::IsUpdateAllowedOver(NetworkConnectionType type) const { 1544348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan switch (type) { 1554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan case kNetBluetooth: 1564348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1574348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1584348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan case kNetCellular: { 1594348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_types; 1604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const policy::DevicePolicy* device_policy = 1616f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan system_state_->device_policy(); 162f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 163f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // A device_policy is loaded in a lazy way right before an update check, 164f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // so the device_policy should be already loaded at this point. If it's 165f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // not, return a safe value for this setting. 1664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!device_policy) { 167f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Disabling updates over cellular networks as there's no " 168f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo "device policy loaded yet."; 1694348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1714348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 172f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo if (device_policy->GetAllowedConnectionTypesForUpdate(&allowed_types)) { 173f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // The update setting is enforced by the device policy. 174f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 175f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo if ((type == kNetCellular && 176f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo !ContainsKey(allowed_types, flimflam::kTypeCellular))) { 177f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Disabling updates over cellular connection as it's not " 178f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo "allowed in the device policy."; 179f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return false; 180f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo } 181f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 182f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Allowing updates over cellular per device policy."; 183f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return true; 184f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo } else { 185f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // There's no update setting in the device policy, using the local user 186f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // setting. 187f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo PrefsInterface* prefs = system_state_->prefs(); 188f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 189f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo if (!prefs || !prefs->Exists(kPrefsUpdateOverCellularPermission)) { 190f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Disabling updates over cellular connection as there's " 191f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo "no device policy setting nor user preference present."; 192f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return false; 193f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo } 194f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 195efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo bool stored_value; 196efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo if (!prefs->GetBoolean(kPrefsUpdateOverCellularPermission, 197efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo &stored_value)) { 198f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return false; 199efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo } 200f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 201f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo if (!stored_value) { 202f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Disabling updates over cellular connection per user " 203f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo "setting."; 204f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return false; 205f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo } 206f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo LOG(INFO) << "Allowing updates over cellular per user setting."; 207f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo return true; 2084348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 2094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 2104348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2114348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan default: 2124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return true; 2134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 2144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanconst char* ConnectionManager::StringForConnectionType( 2174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type) const { 2184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan static const char* const kValues[] = {flimflam::kTypeEthernet, 2194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeWifi, 2204348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeWimax, 2214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeBluetooth, 2224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeCellular}; 223d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (type < 0 || type >= static_cast<int>(arraysize(kValues))) { 224d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return "Unknown"; 225d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 226d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kValues[type]; 227d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 228d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 2294348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanbool ConnectionManager::GetConnectionType( 2304348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan DbusGlibInterface* dbus_iface, 2314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType* out_type) const { 232d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes string default_service_path; 233d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetDefaultServicePath(dbus_iface, 234d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &default_service_path)); 235d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetServicePathType(dbus_iface, 236d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes default_service_path, 237d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes out_type)); 238d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 239d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 240d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 241d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} // namespace chromeos_update_engine 242