1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/gtest_prod_util.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h" 164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/string16.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/timer.h" 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "third_party/cros/chromeos_network.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass DictionaryValue; 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Value; 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Connection enums (see flimflam/include/service.h) 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionType { 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_UNKNOWN = 0, 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_ETHERNET = 1, 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_WIFI = 2, 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_WIMAX = 3, 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_BLUETOOTH = 4, 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_CELLULAR = 5, 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen TYPE_VPN = 6, 34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionMode { 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen MODE_UNKNOWN = 0, 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen MODE_MANAGED = 1, 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen MODE_ADHOC = 2, 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionSecurity { 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_UNKNOWN = 0, 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_NONE = 1, 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_WEP = 2, 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_WPA = 3, 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_RSN = 4, 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SECURITY_8021X = 5, 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SECURITY_PSK = 6, 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionState { 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_UNKNOWN = 0, 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_IDLE = 1, 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_CARRIER = 2, 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_ASSOCIATION = 3, 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_CONFIGURATION = 4, 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_READY = 5, 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_DISCONNECT = 6, 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_FAILURE = 7, 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_ACTIVATION_FAILURE = 8 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectivityState { 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_UNKNOWN = 0, 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_UNRESTRICTED = 1, 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_RESTRICTED = 2, 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_NONE = 3 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Network enums (see flimflam/include/network.h) 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum NetworkTechnology { 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_UNKNOWN = 0, 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_1XRTT = 1, 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_EVDO = 2, 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_GPRS = 3, 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_EDGE = 4, 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_UMTS = 5, 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_HSPA = 6, 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_HSPA_PLUS = 7, 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_LTE = 8, 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_LTE_ADVANCED = 9, 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ActivationState { 86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_UNKNOWN = 0, 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_ACTIVATED = 1, 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_ACTIVATING = 2, 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_NOT_ACTIVATED = 3, 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4, 91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum NetworkRoamingState { 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_UNKNOWN = 0, 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_HOME = 1, 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_ROAMING = 2, 97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SIMLock states (see gobi-cromo-plugin/gobi_gsm_modem.cc) 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum SIMLockState { 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_UNKNOWN = 0, 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_UNLOCKED = 1, 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_LOCKED_PIN = 2, 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_LOCKED_PUK = 3, // also when SIM is blocked, then retries = 0. 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SIM PinRequire states. Since PinRequire current state is not exposed as a 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// cellular property, we initialize it's value based on the SIMLockState 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// initial value. 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SIM_PIN_REQUIRE_UNKNOWN - SIM card is absent or SIMLockState initial value 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// hasn't been received yet. 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SIM_PIN_REQUIRED - SIM card is locked when booted/wake from sleep and 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// requires user to enter PIN. 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// SIM_PIN_NOT_REQUIRED - SIM card is unlocked all the time and requires PIN 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// only on certain operations, such as ChangeRequirePin, ChangePin, EnterPin. 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum SIMPinRequire { 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_PIN_REQUIRE_UNKNOWN = 0, 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_PIN_NOT_REQUIRED = 1, 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIM_PIN_REQUIRED = 2, 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Any PIN operation result (EnterPin, UnblockPin etc.). 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum PinOperationError { 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PIN_ERROR_NONE = 0, 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PIN_ERROR_UNKNOWN = 1, 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PIN_ERROR_INCORRECT_CODE = 2, // Either PIN/PUK specified is incorrect. 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PIN_ERROR_BLOCKED = 3, // No more PIN retries left, SIM is blocked. 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// connection errors (see flimflam/include/service.h) 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionError { 1323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ERROR_NO_ERROR = 0, 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_OUT_OF_RANGE = 1, 134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_PIN_MISSING = 2, 135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_DHCP_FAILED = 3, 136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_CONNECT_FAILED = 4, 137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_BAD_PASSPHRASE = 5, 138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_BAD_WEPKEY = 6, 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_ACTIVATION_FAILED = 7, 140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_NEED_EVDO = 8, 141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_NEED_HOME_NETWORK = 9, 142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_OTASP_FAILED = 10, 143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_AAA_FAILED = 11, 144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// We are currently only supporting setting a single EAP Method. 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum EAPMethod { 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_METHOD_UNKNOWN = 0, 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_METHOD_PEAP = 1, 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_METHOD_TLS = 2, 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_METHOD_TTLS = 3, 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_METHOD_LEAP = 4 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// We are currently only supporting setting a single EAP phase 2 authentication. 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum EAPPhase2Auth { 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_AUTO = 0, 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_MD5 = 1, 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_MSCHAPV2 = 2, 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_MSCHAP = 3, 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_PAP = 4, 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAP_PHASE_2_AUTH_CHAP = 5 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Simple wrapper for property Cellular.FoundNetworks. 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct FoundCellularNetwork { 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string status; 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string network_id; 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string short_name; 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string long_name; 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string technology; 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsentypedef std::vector<FoundCellularNetwork> CellularNetworkList; 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 60 minues. 177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataLowSecs = 60 * 60; 178731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 179731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 30 minues. 180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataVeryLowSecs = 30 * 60; 181731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 100MB. 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataLowBytes = 100 * 1024 * 1024; 184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered very low data when less than 50MB. 186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataVeryLowBytes = 50 * 1024 * 1024; 187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Contains data related to the flimflam.Device interface, 189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// e.g. ethernet, wifi, cellular. 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// TODO(dpolukhin): refactor to make base class and device specific derivatives. 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass NetworkDevice { 192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 193dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit NetworkDevice(const std::string& device_path); 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Device info. 196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& device_path() const { return device_path_; } 197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& name() const { return name_; } 198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type() const { return type_; } 199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool scanning() const { return scanning_; } 200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& meid() const { return MEID_; } 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& imei() const { return IMEI_; } 202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& imsi() const { return IMSI_; } 203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& esn() const { return ESN_; } 204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& mdn() const { return MDN_; } 205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& min() const { return MIN_; } 206dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& model_id() const { return model_id_; } 207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& manufacturer() const { return manufacturer_; } 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIMLockState sim_lock_state() const { return sim_lock_state_; } 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_sim_locked() const { 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return sim_lock_state_ == SIM_LOCKED_PIN || 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sim_lock_state_ == SIM_LOCKED_PUK; 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const int sim_retries_left() const { return sim_retries_left_; } 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIMPinRequire sim_pin_required() const { return sim_pin_required_; } 215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& firmware_revision() const { return firmware_revision_; } 216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& hardware_revision() const { return hardware_revision_; } 217dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const unsigned int prl_version() const { return PRL_version_; } 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& home_provider() const { return home_provider_; } 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& home_provider_code() const { return home_provider_code_; } 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& home_provider_country() const { 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return home_provider_country_; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& home_provider_id() const { return home_provider_id_; } 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& home_provider_name() const { return home_provider_name_; } 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& selected_cellular_network() const { 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return selected_cellular_network_; 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const CellularNetworkList& found_cellular_networks() const { 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return found_cellular_networks_; 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool data_roaming_allowed() const { return data_roaming_allowed_; } 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool support_network_scan() const { return support_network_scan_; } 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool ParseValue(int index, const Value* value); 236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void ParseInfo(const DictionaryValue* info); 237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // General device info. 239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string device_path_; 240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string name_; 241dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type_; 242dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool scanning_; 243dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Cellular specific device info. 244dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string carrier_; 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string home_provider_; 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string home_provider_code_; 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string home_provider_country_; 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string home_provider_id_; 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string home_provider_name_; 250dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MEID_; 251dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string IMEI_; 252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string IMSI_; 253dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string ESN_; 254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MDN_; 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MIN_; 256dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string model_id_; 257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string manufacturer_; 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIMLockState sim_lock_state_; 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int sim_retries_left_; 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SIMPinRequire sim_pin_required_; 261dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string firmware_revision_; 262dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string hardware_revision_; 263dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int PRL_version_; 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string selected_cellular_network_; 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CellularNetworkList found_cellular_networks_; 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool data_roaming_allowed_; 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool support_network_scan_; 268dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class NetworkLibraryImpl; 270dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkDevice); 271dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 272dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 273dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Contains data common to all network service types. 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Network { 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~Network() {} 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& service_path() const { return service_path_; } 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& name() const { return name_; } 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& device_path() const { return device_path_; } 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& ip_address() const { return ip_address_; } 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionType type() const { return type_; } 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionMode mode() const { return mode_; } 284731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState connection_state() const { return state_; } 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool connecting() const { return IsConnectingState(state_); } 286513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool configuring() const { return state_ == STATE_CONFIGURATION; } 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool connected() const { return state_ == STATE_READY; } 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool connecting_or_connected() const { return connecting() || connected(); } 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool failed() const { return state_ == STATE_FAILURE; } 290dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool failed_or_disconnected() const { 291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return failed() || state_ == STATE_IDLE; 292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionError error() const { return error_; } 294731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState state() const { return state_; } 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Is this network connectable. Currently, this is mainly used by 802.1x 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // networks to specify that the network is not configured yet. 2974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool connectable() const { return connectable_; } 298513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Is this the active network, i.e, the one through which 299513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // network traffic is being routed? A network can be connected, 300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // but not be carrying traffic. 301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool is_active() const { return is_active_; } 302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool favorite() const { return favorite_; } 303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool auto_connect() const { return auto_connect_; } 304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectivityState connectivity_state() const { return connectivity_state_; } 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool added() const { return added_; } 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& unique_id() const { return unique_id_; } 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 309dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // We don't have a setter for |favorite_| because to unfavorite a network is 310dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // equivalent to forget a network, so we call forget network on cros for 311dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // that. See ForgetWifiNetwork(). 312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetAutoConnect(bool auto_connect); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Sets network name. 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetName(const std::string& name); 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the state code. 318731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetStateString() const; 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the error code. 321731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetErrorString() const; 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static bool IsConnectingState(ConnectionState state) { 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return (state == STATE_ASSOCIATION || 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen state == STATE_CONFIGURATION || 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen state == STATE_CARRIER); 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 330dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Network(const std::string& service_path, ConnectionType type) 331dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : state_(STATE_UNKNOWN), 3323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen error_(ERROR_NO_ERROR), 3334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch connectable_(true), 334dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen is_active_(false), 335dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen favorite_(false), 336dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen auto_connect_(false), 337dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen connectivity_state_(CONN_STATE_UNKNOWN), 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen priority_order_(0), 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen added_(false), 340dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen service_path_(service_path), 341dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen type_(type) {} 342dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 343dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Parse name/value pairs from libcros. 344dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ParseInfo(const DictionaryValue* info); 346dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Methods to asynchronously set network service properties 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetStringProperty(const char* prop, const std::string& str, 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* dest); 350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetBooleanProperty(const char* prop, bool b, bool* dest); 351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetIntegerProperty(const char* prop, int i, int* dest); 352dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void SetValueProperty(const char* prop, Value* val); 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ClearProperty(const char* prop); 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This will clear the property if string is empty. Otherwise, it will set it. 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetOrClearStringProperty(const char* prop, 357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& str, 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* dest); 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string device_path_; 361dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string name_; 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string ip_address_; 363dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionMode mode_; 364731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState state_; 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionError error_; 3664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool connectable_; 367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool is_active_; 368dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool favorite_; 369dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool auto_connect_; 370dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectivityState connectivity_state_; 371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Unique identifier, set the first time the network is parsed. 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string unique_id_; 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 375513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 376dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_name(const std::string& name) { name_ = name; } 377dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connecting(bool connecting) { 378dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ = (connecting ? STATE_ASSOCIATION : STATE_IDLE); 379dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 380dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connected(bool connected) { 381dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ = (connected ? STATE_READY : STATE_IDLE); 382dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 383513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_state(ConnectionState state) { state_ = state; } 3844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void set_connectable(bool connectable) { connectable_ = connectable; } 385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_active(bool is_active) { is_active_ = is_active; } 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void set_error(ConnectionError error) { error_ = error; } 387dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connectivity_state(ConnectivityState connectivity_state) { 388dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen connectivity_state_ = connectivity_state; 389dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_added(bool added) { added_ = added; } 391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 3924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Initialize the IP address field 3934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void InitIPAddress(); 3944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Priority value, corresponds to index in list from flimflam (0 = first) 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int priority_order_; 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set to true if the UI requested this as a new network. 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool added_; 400dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 401dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // These must not be modified after construction. 402dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string service_path_; 403dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type_; 404dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 405513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkLibraryStubImpl; 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(Network); 408dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // ChangeAutoConnectSaveTest accesses |favorite_|. 409dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(WifiConfigViewTest, ChangeAutoConnectSaveTest); 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 412dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_ETHERNET. 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EthernetNetwork : public Network { 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 415dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit EthernetNetwork(const std::string& service_path) : 416dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Network(service_path, TYPE_ETHERNET) { 417513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkLibraryImpl; 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(EthernetNetwork); 421dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 422513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 423dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_VPN. 424dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass VirtualNetwork : public Network { 425dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enum ProviderType { 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PROVIDER_TYPE_L2TP_IPSEC_PSK, 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PROVIDER_TYPE_L2TP_IPSEC_USER_CERT, 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PROVIDER_TYPE_OPEN_VPN, 430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Add new provider types before PROVIDER_TYPE_MAX. 431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PROVIDER_TYPE_MAX, 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 434dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit VirtualNetwork(const std::string& service_path) : 435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Network(service_path, TYPE_VPN), 436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_(PROVIDER_TYPE_L2TP_IPSEC_PSK) { 437513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& server_hostname() const { return server_hostname_; } 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProviderType provider_type() const { return provider_type_; } 441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& ca_cert() const { return ca_cert_; } 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& psk_passphrase() const { return psk_passphrase_; } 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& user_cert() const { return user_cert_; } 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& user_cert_key() const { return user_cert_key_; } 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& username() const { return username_; } 446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& user_passphrase() const { return user_passphrase_; } 447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool NeedMoreInfoToConnect() const; 449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Public setters. 451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetCACert(const std::string& ca_cert); 452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetPSKPassphrase(const std::string& psk_passphrase); 453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetUserCert(const std::string& user_cert); 454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetUserCertKey(const std::string& key); 455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetUsername(const std::string& username); 456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetUserPassphrase(const std::string& user_passphrase); 457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string GetProviderTypeString() const; 459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Network overrides. 462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool ParseValue(int index, const Value* value); 463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ParseInfo(const DictionaryValue* info); 464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // VirtualNetwork private methods. 466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ParseProviderValue(int index, const Value* value); 467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 468ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_server_hostname(const std::string& server_hostname) { 469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_hostname_ = server_hostname; 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_provider_type(ProviderType provider_type) { 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_ = provider_type; 473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_ca_cert(const std::string& ca_cert) { 475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ca_cert_ = ca_cert; 476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_psk_passphrase(const std::string& psk_passphrase) { 478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_ = psk_passphrase; 479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_user_cert(const std::string& user_cert) { 481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_ = user_cert; 482ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 483ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_user_cert_key(const std::string& key) { 484ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_key_ = key; 485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_username(const std::string& username) { 487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen username_ = username; 488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_user_passphrase(const std::string& user_passphrase) { 490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_passphrase_ = user_passphrase; 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string server_hostname_; 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProviderType provider_type_; 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string ca_cert_; 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string psk_passphrase_; 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user_cert_; 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user_cert_key_; 499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string username_; 500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user_passphrase_; 501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkLibraryImpl; 503ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(VirtualNetwork); 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 505dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<VirtualNetwork*> VirtualNetworkVector; 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 507dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Base class for networks of TYPE_WIFI or TYPE_CELLULAR. 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WirelessNetwork : public Network { 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int strength() const { return strength_; } 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 513dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WirelessNetwork(const std::string& service_path, ConnectionType type) 514dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : Network(service_path, type), 515dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen strength_(0) {} 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int strength_; 517513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 518dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Network overrides. 519dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 5204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 521dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 522513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_strength(int strength) { strength_ = strength; } 523513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 524513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 525ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkLibraryStubImpl; 526ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(WirelessNetwork); 527513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 528513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 529dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_CELLULAR. 530dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CellularDataPlan; 531513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CellularNetwork : public WirelessNetwork { 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 534731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick enum DataLeft { 53572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DATA_UNKNOWN, 536731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_NORMAL, 537731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_LOW, 538731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_VERY_LOW, 539731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_NONE 540731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick }; 541731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 542ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen struct Apn { 543ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string apn; 544ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string network_id; 545ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string username; 546ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string password; 547ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 548ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Apn() {} 549ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Apn(const std::string& apn, const std::string& network_id, 550ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& username, const std::string& password) 551ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : apn(apn), network_id(network_id), 552ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen username(username), password(password) { 553ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 554ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void Set(const DictionaryValue& dict); 555ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 556ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 557513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual ~CellularNetwork(); 558dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 559dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit CellularNetwork(const std::string& service_path) 560dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : WirelessNetwork(service_path, TYPE_CELLULAR), 561dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen activation_state_(ACTIVATION_STATE_UNKNOWN), 562dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen network_technology_(NETWORK_TECHNOLOGY_UNKNOWN), 563dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen roaming_state_(ROAMING_STATE_UNKNOWN), 564dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_left_(DATA_UNKNOWN) { 565dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 5663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Starts device activation process. Returns false if the device state does 5673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // not permit activation. 5683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool StartActivation() const; 569ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Requests data plans if the network is conencted and activated. 570ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Plan data will be passed through Network::Observer::CellularDataPlanChanged 571ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // callback. 572ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void RefreshDataPlansIfNeeded() const; 573ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const ActivationState activation_state() const { return activation_state_; } 575ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool activated() const { 576ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return activation_state() == ACTIVATION_STATE_ACTIVATED; 577ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 578731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NetworkTechnology network_technology() const { 579731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return network_technology_; 580731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 581731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NetworkRoamingState roaming_state() const { return roaming_state_; } 582201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool restricted_pool() const { 583201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return connectivity_state() == CONN_STATE_RESTRICTED; 584201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 5854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool needs_new_plan() const { 586ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return restricted_pool() && connected() && activated(); 5874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 588731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& operator_name() const { return operator_name_; } 589731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& operator_code() const { return operator_code_; } 590ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& operator_country() const { return operator_country_; } 5913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& payment_url() const { return payment_url_; } 592dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& usage_url() const { return usage_url_; } 593dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DataLeft data_left() const { return data_left_; } 594ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Apn& apn() const { return apn_; } 595ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Apn& last_good_apn() const { return last_good_apn_; } 596ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetApn(const Apn& apn); 597ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SupportsDataPlan() const; 598dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 599dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Misc. 600201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool is_gsm() const { 601201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return network_technology_ != NETWORK_TECHNOLOGY_EVDO && 602201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch network_technology_ != NETWORK_TECHNOLOGY_1XRTT && 603201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch network_technology_ != NETWORK_TECHNOLOGY_UNKNOWN; 604201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 606731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of network technology. 607731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetNetworkTechnologyString() const; 608201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Return a string representation of connectivity state. 609201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string GetConnectivityStateString() const; 610731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of activation state. 611731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetActivationStateString() const; 612731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of roaming state. 613731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetRoamingStateString() const; 614731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 615513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Return a string representation of |activation_state|. 616513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch static std::string ActivationStateToString(ActivationState activation_state); 617513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 6183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick protected: 619dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // WirelessNetwork overrides. 620dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 621513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 6223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ActivationState activation_state_; 623731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NetworkTechnology network_technology_; 624731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NetworkRoamingState roaming_state_; 625731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Carrier Info 626731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string operator_name_; 627731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string operator_code_; 628ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string operator_country_; 6293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string payment_url_; 630dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string usage_url_; 631dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Cached values 632dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DataLeft data_left_; // Updated when data plans are updated. 633ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Apn apn_; 634ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Apn last_good_apn_; 635513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 636513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 637513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_activation_state(ActivationState state) { 638513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch activation_state_ = state; 639513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 640dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_payment_url(const std::string& url) { payment_url_ = url; } 641dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_usage_url(const std::string& url) { usage_url_ = url; } 642513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_network_technology(NetworkTechnology technology) { 643513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch network_technology_ = technology; 644513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 645dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_roaming_state(NetworkRoamingState state) { roaming_state_ = state; } 646dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_data_left(DataLeft data_left) { data_left_ = data_left; } 647ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_apn(const Apn& apn) { apn_ = apn; } 648ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_last_good_apn(const Apn& apn) { last_good_apn_ = apn; } 649513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 650513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 651ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class NetworkLibraryStubImpl; 652ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(CellularNetwork); 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 654dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<CellularNetwork*> CellularNetworkVector; 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 656dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_WIFI. 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WifiNetwork : public WirelessNetwork { 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 659dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit WifiNetwork(const std::string& service_path) 660dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : WirelessNetwork(service_path, TYPE_WIFI), 661dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen encryption_(SECURITY_NONE), 662ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen passphrase_required_(false), 663ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen eap_method_(EAP_METHOD_UNKNOWN), 664ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen eap_phase_2_auth_(EAP_PHASE_2_AUTH_AUTO), 665ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen eap_use_system_cas_(true), 666ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen save_credentials_(false) { 667dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool encrypted() const { return encryption_ != SECURITY_NONE; } 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionSecurity encryption() const { return encryption_; } 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& passphrase() const { return passphrase_; } 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& identity() const { return identity_; } 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& cert_path() const { return cert_path_; } 674ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool passphrase_required() const { return passphrase_required_; } 675ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 676ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAPMethod eap_method() const { return eap_method_; } 677ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAPPhase2Auth eap_phase_2_auth() const { return eap_phase_2_auth_; } 678ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& eap_server_ca_cert_nss_nickname() const { 679ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return eap_server_ca_cert_nss_nickname_; } 680ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& eap_client_cert_pkcs11_id() const { 681ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return eap_client_cert_pkcs11_id_; } 682ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const bool eap_use_system_cas() const { return eap_use_system_cas_; } 683ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& eap_identity() const { return eap_identity_; } 684ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& eap_anonymous_identity() const { 685ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return eap_anonymous_identity_; } 686ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& eap_passphrase() const { return eap_passphrase_; } 687ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool save_credentials() const { return save_credentials_; } 688ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 689ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& GetPassphrase() const; 690ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 691ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetSsid(const std::string& ssid); 692ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetHexSsid(const std::string& ssid_hex); 693dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetPassphrase(const std::string& passphrase); 694dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetIdentity(const std::string& identity); 695dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetCertPath(const std::string& cert_path); 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 697ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 802.1x properties 698ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPMethod(EAPMethod method); 699ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPPhase2Auth(EAPPhase2Auth auth); 700ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPServerCaCertNssNickname(const std::string& nss_nickname); 701ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPClientCertPkcs11Id(const std::string& pkcs11_id); 702ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPUseSystemCAs(bool use_system_cas); 703ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPIdentity(const std::string& identity); 704ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPAnonymousIdentity(const std::string& identity); 705ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEAPPassphrase(const std::string& passphrase); 706ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetSaveCredentials(bool save_credentials); 707ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 708ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Erase cached credentials, used when "Save password" is unchecked. 709ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void EraseCredentials(); 710ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the encryption code. 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This not translated and should be only used for debugging purposes. 713ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string GetEncryptionString() const; 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Return true if a passphrase or other input is required to connect. 71621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool IsPassphraseRequired() const; 71721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 718731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return true if cert_path_ indicates that we have loaded the certificate. 719731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool IsCertificateLoaded() const; 720731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 721ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 722dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // WirelessNetwork overrides. 723dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 724ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ParseInfo(const DictionaryValue* info); 725dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void CalculateUniqueId(); 727ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 728ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_encryption(ConnectionSecurity encryption) { 729ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen encryption_ = encryption; 730ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_passphrase(const std::string& passphrase) { 732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen passphrase_ = passphrase; 733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 734dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_passphrase_required(bool passphrase_required) { 735dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen passphrase_required_ = passphrase_required; 736dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 737ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_identity(const std::string& identity) { 738ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen identity_ = identity; 739ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 740ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_cert_path(const std::string& cert_path) { 741ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cert_path_ = cert_path; 742ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 743dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionSecurity encryption_; 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string passphrase_; 746513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool passphrase_required_; 747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string identity_; 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string cert_path_; 749dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 750ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAPMethod eap_method_; 751ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EAPPhase2Auth eap_phase_2_auth_; 752ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string eap_server_ca_cert_nss_nickname_; 753ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string eap_client_cert_pkcs11_id_; 754ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool eap_use_system_cas_; 755ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string eap_identity_; 756ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string eap_anonymous_identity_; 757ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string eap_passphrase_; 758ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Tells flimflam to save passphrase and EAP credentials to disk. 759ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool save_credentials_; 760ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 761ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Internal state (not stored in flimflam). 762ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passphrase set by user (stored for UI). 763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user_passphrase_; 764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 765dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class NetworkLibraryImpl; 766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(WifiNetwork); 767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 768dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<WifiNetwork*> WifiNetworkVector; 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 770dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Cellular Data Plan management. 771dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CellularDataPlan { 772dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 773dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CellularDataPlan() 774dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : plan_name("Unknown"), 775dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_type(CELLULAR_DATA_PLAN_UNLIMITED), 776dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_data_bytes(0), 777dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_bytes_used(0) { } 778dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit CellularDataPlan(const CellularDataPlanInfo &plan) 779dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : plan_name(plan.plan_name ? plan.plan_name : ""), 780dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_type(plan.plan_type), 781dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen update_time(base::Time::FromInternalValue(plan.update_time)), 782dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_start_time(base::Time::FromInternalValue(plan.plan_start_time)), 783dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_end_time(base::Time::FromInternalValue(plan.plan_end_time)), 784dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_data_bytes(plan.plan_data_bytes), 785dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_bytes_used(plan.data_bytes_used) { } 786dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats cellular plan description. 787dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetPlanDesciption() const; 788dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Evaluates cellular plans status and returns warning string if it is near 789dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // expiration. 790dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetRemainingWarning() const; 791dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats remaining plan data description. 792dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetDataRemainingDesciption() const; 793dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats plan expiration description. 794dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetPlanExpiration() const; 795dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats plan usage info. 796dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetUsageInfo() const; 797dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns a unique string for this plan that can be used for comparisons. 798dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string GetUniqueIdentifier() const; 799dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::TimeDelta remaining_time() const; 800dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 remaining_minutes() const; 801dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns plan data remaining in bytes. 802dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 remaining_data() const; 803dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(stevenjb): Make these private with accessors and properly named. 804dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string plan_name; 805dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CellularDataPlanType plan_type; 806dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time update_time; 807dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time plan_start_time; 808dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time plan_end_time; 809dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 plan_data_bytes; 810dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 data_bytes_used; 811dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 812dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef ScopedVector<CellularDataPlan> CellularDataPlanVector; 813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 814dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Geolocation data. 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct CellTower { 816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum RadioType { 817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_GSM, 818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_CDMA, 819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_WCDMA, 820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } radio_type; // GSM/WCDMA CDMA 821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int mobile_country_code; // MCC MCC 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int mobile_network_code; // MNC SID 823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int location_area_code; // LAC NID 824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int cell_id; // CID BID 825731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick base::Time timestamp; // Timestamp when this cell was primary 826731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int signal_strength; // Radio signal strength measured in dBm. 827731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int timing_advance; // Represents the distance from the cell tower. 828731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Each unit is roughly 550 meters. 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct WifiAccessPoint { 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string mac_address; // The mac address of the WiFi node. 833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name; // The SSID of the WiFi node. 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time timestamp; // Timestamp when this AP was detected. 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int signal_strength; // Radio signal strength measured in dBm. 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int signal_to_noise; // Current signal to noise ratio measured in dB. 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int channel; // Wifi channel number. 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<CellTower> CellTowerVector; 841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<WifiAccessPoint> WifiAccessPointVector; 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 843dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// IP Configuration. 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct NetworkIPConfig { 845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NetworkIPConfig(const std::string& device_path, IPConfigType type, 846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& address, const std::string& netmask, 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& gateway, const std::string& name_servers) 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : device_path(device_path), 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type(type), 850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch address(address), 851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch netmask(netmask), 852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gateway(gateway), 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name_servers(name_servers) {} 854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NetworkIPConfigs are sorted by tyoe. 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool operator< (const NetworkIPConfig& other) const { 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return type < other.type; 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string device_path; 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPConfigType type; 862731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string address; // This looks like "/device/0011aa22bb33" 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string netmask; 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string gateway; 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name_servers; 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<NetworkIPConfig> NetworkIPConfigVector; 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This class handles the interaction with the ChromeOS network library APIs. 8703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Classes can add themselves as observers. Users can get an instance of the 8713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// library like this: chromeos::CrosLibrary::Get()->GetNetworkLibrary() 872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkLibrary { 873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 874ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen enum HardwareAddressFormat { 875ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FORMAT_RAW_HEX, 876ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FORMAT_COLON_SEPARATED_HEX 877ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 878ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 879513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class NetworkManagerObserver { 880513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 881513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Called when the state of the network manager has changed, 882513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // for example, networks have appeared or disappeared. 883513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnNetworkManagerChanged(NetworkLibrary* obj) = 0; 884513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 885513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 886513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class NetworkObserver { 887513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 888513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Called when the state of a single network has changed, 889513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // for example signal strength or connection state. 890513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnNetworkChanged(NetworkLibrary* cros, 891513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Network* network) = 0; 892513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 893513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 894ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen class NetworkDeviceObserver { 895ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 896ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called when the state of a single device has changed, 897ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // for example SIMLock state for cellular. 898ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnNetworkDeviceChanged(NetworkLibrary* cros, 899ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NetworkDevice* device) = 0; 900ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 901ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 902513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class CellularDataPlanObserver { 903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 904731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Called when the cellular data plan has changed. 905513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnCellularDataPlanChanged(NetworkLibrary* obj) = 0; 906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 908ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen class PinOperationObserver { 909ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 910ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called when pin async operation has completed. 911ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Network is NULL when we don't have an associated Network object. 912ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnPinOperationCompleted(NetworkLibrary* cros, 913ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PinOperationError error) = 0; 914ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 915ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 916dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen class UserActionObserver { 917dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 918dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Called when user initiates a new connection. 919dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Network is NULL when we don't have an associated Network object. 920dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnConnectionInitiated(NetworkLibrary* cros, 921dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const Network* network) = 0; 922dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen }; 923dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~NetworkLibrary() {} 925513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 926513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) = 0; 927513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveNetworkManagerObserver( 928513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkManagerObserver* observer) = 0; 929513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 930513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // An attempt to add an observer that has already been added for a 931513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // give service path will be ignored. 932513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddNetworkObserver(const std::string& service_path, 933513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkObserver* observer) = 0; 934513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Remove an observer of a single network 935513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveNetworkObserver(const std::string& service_path, 936513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkObserver* observer) = 0; 937513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Stop |observer| from observing any networks 938513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) = 0; 939513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 940ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Add an observer for a single network device. 941ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void AddNetworkDeviceObserver(const std::string& device_path, 942ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkDeviceObserver* observer) = 0; 943ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Remove an observer for a single network device. 944ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RemoveNetworkDeviceObserver(const std::string& device_path, 945ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkDeviceObserver* observer) = 0; 946ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 94772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Temporarily locks down certain functionality in network library to prevent 94872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // unplanned side effects. During the lock down, Enable*Device() calls cannot 94972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // be made. 95072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Lock() = 0; 95172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Removes temporarily lock of network library. 95272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Unlock() = 0; 95372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Checks if access to network library is locked. 95472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool IsLocked() = 0; 95572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 956513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddCellularDataPlanObserver( 957513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CellularDataPlanObserver* observer) = 0; 958513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveCellularDataPlanObserver( 959513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CellularDataPlanObserver* observer) = 0; 960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 961ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void AddPinOperationObserver(PinOperationObserver* observer) = 0; 962ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RemovePinOperationObserver(PinOperationObserver* observer) = 0; 963ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 964dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AddUserActionObserver(UserActionObserver* observer) = 0; 965dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void RemoveUserActionObserver(UserActionObserver* observer) = 0; 966dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 967dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active or default Ethernet network (or NULL if none). 96821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const EthernetNetwork* ethernet_network() const = 0; 969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_connecting() const = 0; 970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_connected() const = 0; 971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 972dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active Wifi network (or NULL if none active). 97321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const WifiNetwork* wifi_network() const = 0; 974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_connecting() const = 0; 975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_connected() const = 0; 976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 977dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active Cellular network (or NULL if none active). 97821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const CellularNetwork* cellular_network() const = 0; 979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_connecting() const = 0; 980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_connected() const = 0; 981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 982dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active virtual network (or NULL if none active). 983dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const VirtualNetwork* virtual_network() const = 0; 984dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool virtual_network_connecting() const = 0; 985dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool virtual_network_connected() const = 0; 986dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return true if any network is currently connected. 988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool Connected() const = 0; 989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return true if any network is currently connecting. 991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool Connecting() const = 0; 992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current IP address if connected. If not, returns empty string. 994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const std::string& IPAddress() const = 0; 995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current list of wifi networks. 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const WifiNetworkVector& wifi_networks() const = 0; 998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the list of remembered wifi networks. 1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const WifiNetworkVector& remembered_wifi_networks() const = 0; 1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current list of cellular networks. 1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const CellularNetworkVector& cellular_networks() const = 0; 1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1005dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns the current list of virtual networks. 1006dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const VirtualNetworkVector& virtual_networks() const = 0; 1007dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1008dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return a pointer to the device, if it exists, or NULL. 1009dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const NetworkDevice* FindNetworkDeviceByPath( 1010dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 1011dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1012ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns device with TYPE_CELLULAR. Returns NULL if none exists. 1013ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const NetworkDevice* FindCellularDevice() const = 0; 1014ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1015ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns device with TYPE_ETHERNET. Returns NULL if none exists. 1016ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const NetworkDevice* FindEthernetDevice() const = 0; 1017ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1018ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns device with TYPE_WIFI. Returns NULL if none exists. 1019ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const NetworkDevice* FindWifiDevice() const = 0; 1020ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1021dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return a pointer to the network, if it exists, or NULL. 1022ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NOTE: Never store these results, store service paths instead. 1023ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The pattern for doing an operation on a Network is: 1024ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Network* network = cros->FindNetworkByPath(service_path); 1025ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // network->SetFoo(); 1026ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // network->Connect(); 1027ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // As long as this is done in sequence on the UI thread it will be safe; 1028ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the network list only gets updated on the UI thread. 1029ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Network* FindNetworkByPath(const std::string& path) const = 0; 1030ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual WifiNetwork* FindWifiNetworkByPath(const std::string& path) const = 0; 1031513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual CellularNetwork* FindCellularNetworkByPath( 1032dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 1033ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual VirtualNetwork* FindVirtualNetworkByPath( 1034ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& path) const = 0; 1035ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1036ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the visible wifi network corresponding to the remembered 1037ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // wifi network, or NULL if the remembered network is not visible. 1038ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Network* FindNetworkFromRemembered( 1039ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const Network* remembered) const = 0; 1040513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1041dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Retrieves the data plans associated with |path|, NULL if there are no 1042dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // associated plans. 1043dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const CellularDataPlanVector* GetDataPlans( 1044dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 1045dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1046dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This returns the significant data plan. If the user only has the 1047dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // base data plan, then return that. If there is a base and a paid data plan, 1048dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // then the significant one is the paid one. So return the paid plan. 1049dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // If there are no data plans, then this method returns NULL. 1050dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This returns a pointer to a member of data_plans_, so if SetDataPlans() 1051dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // gets called, the result becomes invalid. 1052dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const CellularDataPlan* GetSignificantDataPlan( 1053dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1055ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passes |old_pin|, |new_pin| to change SIM card PIM. 1056ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ChangePin(const std::string& old_pin, 1057ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& new_pin) = 0; 1058ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1059ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passes |pin|, |require_pin| value to change SIM card RequirePin setting. 1060ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ChangeRequirePin(bool require_pin, 1061ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& pin) = 0; 1062ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1063ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passes |pin| to unlock SIM card. 1064ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void EnterPin(const std::string& pin) = 0; 1065ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1066ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passes |puk|, |new_pin| to unblock SIM card. 1067ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void UnblockPin(const std::string& puk, 1068ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& new_pin) = 0; 1069ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1070ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Request a scan for available cellular networks. 1071ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RequestCellularScan() = 0; 1072ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1073ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Request a register in cellular network with |network_id|. 1074ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RequestCellularRegister(const std::string& network_id) = 0; 1075ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1076ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Change data roaming restriction for current cellular device. 1077ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetCellularDataRoamingAllowed(bool new_value) = 0; 1078ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Request a scan for new wifi networks. 1080ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RequestNetworkScan() = 0; 1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads out the results of the last wifi scan. These results are not 1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // pre-cached in the library, so the call may block whilst the results are 1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // read over IPC. 1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns false if an error occurred in reading the results. Note that 1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a true return code only indicates the result set was successfully read, 1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // it does not imply a scan has successfully completed yet. 1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) = 0; 1089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(joth): Add GetCellTowers to retrieve a CellTowerVector. 1091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1092ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Connect to the specified wireless network. 1093ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToWifiNetwork(WifiNetwork* network) = 0; 1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1095dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Same as above but searches for an existing network by name. 1096ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToWifiNetwork(const std::string& service_path) = 0; 1097dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 1098ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Connect to the specified network with security, ssid, passphrase, identity, 1099ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and (optionally) certpath. 1100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToWifiNetwork(ConnectionSecurity security, 1101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& ssid, 1102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& passphrase, 1103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& identity, 1104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& certpath) = 0; 1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Connect to the specified cellular network. 1107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToCellularNetwork(CellularNetwork* network) = 0; 1108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 110972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Records information that cellular play payment had happened. 111072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void SignalCellularPlanPayment() = 0; 111172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 111272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns true if cellular plan payment had been recorded recently. 111372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool HasRecentCellularPlanPayment() = 0; 111472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Connect to the specified virtual network. 1116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToVirtualNetwork(VirtualNetwork* network) = 0; 1117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Connect to the specified virtual network with service name, 1119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // server hostname, provider_type, PSK passphrase, username and passphrase. 1120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ConnectToVirtualNetworkPSK( 1121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& service_name, 1122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& server_hostname, 1123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& psk, 1124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& username, 1125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& user_passphrase) = 0; 1126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Disconnect from the specified network. 1128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void DisconnectFromNetwork(const Network* network) = 0; 1129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Forget the wifi network corresponding to service_path. 1131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ForgetWifiNetwork(const std::string& service_path) = 0; 1132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns home carrier ID if available, otherwise empty string is returned. 1134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Carrier ID format: <carrier name> (country). Ex.: "Verizon (us)". 1135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual std::string GetCellularHomeCarrierId() const = 0; 1136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_available() const = 0; 1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_available() const = 0; 1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_available() const = 0; 1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_enabled() const = 0; 1142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_enabled() const = 0; 1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_enabled() const = 0; 1144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool wifi_scanning() const = 0; 1146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual const Network* active_network() const = 0; 1148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const Network* connected_network() const = 0; 1149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool offline_mode() const = 0; 1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the ethernet network device. 1153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableEthernetNetworkDevice(bool enable) = 0; 1154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the wifi network device. 1156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableWifiNetworkDevice(bool enable) = 0; 1157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the cellular network device. 1159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableCellularNetworkDevice(bool enable) = 0; 1160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables offline mode. 1162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableOfflineMode(bool enable) = 0; 1163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Fetches IP configs and hardware address for a given device_path. 1165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The hardware address is usually a MAC address like "0011AA22BB33". 1166731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // |hardware_address| will be an empty string, if no hardware address is 1167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // found. 1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual NetworkIPConfigVector GetIPConfigs( 1169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& device_path, 1170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* hardware_address, 1171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen HardwareAddressFormat) = 0; 1172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Factory function, creates a new instance and returns ownership. 11743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // For normal usage, access the singleton via CrosLibrary::Get(). 11753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static NetworkLibrary* GetImpl(bool stub); 1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 1179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ 1181