connection_manager.cc revision 6f6ea00aa8c4cf54b6842be32ca1226854c24f78
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 154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/system_state.h" 16d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes#include "update_engine/utils.h" 17d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::set; 19d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesusing std::string; 20d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 21d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesnamespace chromeos_update_engine { 22d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 23d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesnamespace { 24d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 25d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Gets the DbusGProxy for FlimFlam. Must be free'd with ProxyUnref() 26d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetFlimFlamProxy(DbusGlibInterface* dbus_iface, 27d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* path, 28d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* interface, 29d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy** out_proxy) { 30d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGConnection* bus; 31d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy* proxy; 32d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GError* error = NULL; 33d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 34d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bus = dbus_iface->BusGet(DBUS_BUS_SYSTEM, &error); 35d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (!bus) { 36d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "Failed to get system bus"; 37d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 38d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 39d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes proxy = dbus_iface->ProxyNewForNameOwner(bus, 404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServiceName, 41d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path, 42d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes interface, 43d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &error); 44d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (!proxy) { 45d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "Error getting FlimFlam proxy: " 46a0b9e777e2c571546bd6ab55356acb023834cbc3Darin Petkov << utils::GetAndFreeGError(&error); 47d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 48d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 49d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_proxy = proxy; 50d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 51d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 52d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 53d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// On success, caller owns the GHashTable at out_hash_table. 54d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns true on success. 55d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetProperties(DbusGlibInterface* dbus_iface, 56d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* path, 57d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* interface, 58d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable** out_hash_table) { 59d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes DBusGProxy* proxy; 60d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GError* error = NULL; 61d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 62d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetFlimFlamProxy(dbus_iface, 63d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path, 64d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes interface, 65d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &proxy)); 66d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 67d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes gboolean rc = dbus_iface->ProxyCall(proxy, 68d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes "GetProperties", 69d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &error, 70d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_INVALID, 71d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes dbus_g_type_get_map("GHashTable", 72d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_STRING, 73d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_VALUE), 74d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes out_hash_table, 75d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes G_TYPE_INVALID); 76d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes dbus_iface->ProxyUnref(proxy); 77d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (rc == FALSE) { 78d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes LOG(ERROR) << "dbus_g_proxy_call failed"; 79d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return false; 80d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 81d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 82d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 83d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 84d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 85d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns (via out_path) the default network path, or empty string if 86d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// there's no network up. 87d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes// Returns true on success. 88d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetDefaultServicePath(DbusGlibInterface* dbus_iface, string* out_path) { 89d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable* hash_table = NULL; 90d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 91d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetProperties(dbus_iface, 924348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServicePath, 934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamManagerInterface, 94d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &hash_table)); 95d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 96d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GValue* value = reinterpret_cast<GValue*>(g_hash_table_lookup(hash_table, 97d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes "Services")); 98d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GArray* array = NULL; 99d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bool success = false; 10088226ff9674d5d6250a0c919082e9bd1c93c35bfmukesh agrawal if (G_VALUE_HOLDS(value, DBUS_TYPE_G_OBJECT_PATH_ARRAY) && 101d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes (array = reinterpret_cast<GArray*>(g_value_get_boxed(value))) && 102d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes (array->len > 0)) { 103d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_path = g_array_index(array, const char*, 0); 104d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes success = true; 105d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 10688226ff9674d5d6250a0c919082e9bd1c93c35bfmukesh agrawal 107d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes g_hash_table_unref(hash_table); 108d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return success; 109d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 110d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 111d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los ReyesNetworkConnectionType ParseConnectionType(const char* type_str) { 1124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!strcmp(type_str, flimflam::kTypeEthernet)) { 113d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetEthernet; 1144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeWifi)) { 115d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetWifi; 1164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeWimax)) { 117d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetWimax; 1184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeBluetooth)) { 119d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetBluetooth; 1204348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } else if (!strcmp(type_str, flimflam::kTypeCellular)) { 121d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetCellular; 122d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 123d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kNetUnknown; 124d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 125d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 126d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyesbool GetServicePathType(DbusGlibInterface* dbus_iface, 127d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const string& path, 128d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes NetworkConnectionType* out_type) { 129d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GHashTable* hash_table = NULL; 130d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 131d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetProperties(dbus_iface, 132d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes path.c_str(), 1334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kFlimflamServiceInterface, 134d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &hash_table)); 135d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 136d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes GValue* value = (GValue*)g_hash_table_lookup(hash_table, "Type"); 137d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes const char* type_str = NULL; 138d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes bool success = false; 139d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (value != NULL && (type_str = g_value_get_string(value)) != NULL) { 140d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes *out_type = ParseConnectionType(type_str); 141d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes success = true; 142d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 143d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes g_hash_table_unref(hash_table); 144d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return success; 145d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 146d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 147d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} // namespace {} 148d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 1494348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanConnectionManager::ConnectionManager(SystemState *system_state) 1504348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan : system_state_(system_state) {} 1514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanbool ConnectionManager::IsUpdateAllowedOver(NetworkConnectionType type) const { 1534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan switch (type) { 1544348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan case kNetBluetooth: 1554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1564348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1574348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan case kNetCellular: { 1584348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_types; 1594348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const policy::DevicePolicy* device_policy = 1606f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan system_state_->device_policy(); 1614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!device_policy) { 1624348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan LOG(INFO) << "Disabling updates over cellular connection as there's no " 1634348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan "device policy object present"; 1644348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1654348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1674348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!device_policy->GetAllowedConnectionTypesForUpdate(&allowed_types)) { 1684348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan LOG(INFO) << "Disabling updates over cellular connection as there's no " 1694348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan "allowed connection types from policy"; 1704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1714348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1724348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1734348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan if (!ContainsKey(allowed_types, flimflam::kTypeCellular)) { 1744348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan LOG(INFO) << "Disabling updates over cellular connection as it's not " 1754348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan "allowed in the device policy."; 1764348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return false; 1774348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1784348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1794348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan LOG(INFO) << "Allowing updates over cellular per device policy"; 1804348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return true; 1814348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1824348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1834348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan default: 1844348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan return true; 1854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 1864348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1874348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1884348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanconst char* ConnectionManager::StringForConnectionType( 1894348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type) const { 1904348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan static const char* const kValues[] = {flimflam::kTypeEthernet, 1914348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeWifi, 1924348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeWimax, 1934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeBluetooth, 1944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan flimflam::kTypeCellular}; 195d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes if (type < 0 || type >= static_cast<int>(arraysize(kValues))) { 196d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return "Unknown"; 197d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes } 198d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return kValues[type]; 199d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 200d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 2014348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanbool ConnectionManager::GetConnectionType( 2024348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan DbusGlibInterface* dbus_iface, 2034348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType* out_type) const { 204d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes string default_service_path; 205d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetDefaultServicePath(dbus_iface, 206d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes &default_service_path)); 207d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes TEST_AND_RETURN_FALSE(GetServicePathType(dbus_iface, 208d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes default_service_path, 209d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes out_type)); 210d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes return true; 211d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} 212d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes 213d57d1474a7bb152adf10d8c31d7ef6d40d27f7ccAndrew de los Reyes} // namespace chromeos_update_engine 214