network_library.h revision dc0f95d653279beabeb9817299e2902918ba123e
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" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h" 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/scoped_vector.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/singleton.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, 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionState { 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_UNKNOWN = 0, 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_IDLE = 1, 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_CARRIER = 2, 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_ASSOCIATION = 3, 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_CONFIGURATION = 4, 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_READY = 5, 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_DISCONNECT = 6, 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_FAILURE = 7, 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen STATE_ACTIVATION_FAILURE = 8 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectivityState { 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_UNKNOWN = 0, 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_UNRESTRICTED = 1, 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_RESTRICTED = 2, 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CONN_STATE_NONE = 3 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Network enums (see flimflam/include/network.h) 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum NetworkTechnology { 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_UNKNOWN = 0, 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_1XRTT = 1, 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_EVDO = 2, 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_GPRS = 3, 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_EDGE = 4, 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_UMTS = 5, 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_HSPA = 6, 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_HSPA_PLUS = 7, 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_LTE = 8, 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NETWORK_TECHNOLOGY_LTE_ADVANCED = 9, 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ActivationState { 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_UNKNOWN = 0, 86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_ACTIVATED = 1, 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_ACTIVATING = 2, 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_NOT_ACTIVATED = 3, 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4, 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum NetworkRoamingState { 93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_UNKNOWN = 0, 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_HOME = 1, 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ROAMING_STATE_ROAMING = 2, 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// connection errors (see flimflam/include/service.h) 99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenenum ConnectionError { 100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_UNKNOWN = 0, 101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_OUT_OF_RANGE = 1, 102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_PIN_MISSING = 2, 103dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_DHCP_FAILED = 3, 104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_CONNECT_FAILED = 4, 105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_BAD_PASSPHRASE = 5, 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_BAD_WEPKEY = 6, 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_ACTIVATION_FAILED = 7, 108dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_NEED_EVDO = 8, 109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_NEED_HOME_NETWORK = 9, 110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_OTASP_FAILED = 10, 111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ERROR_AAA_FAILED = 11, 112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 60 minues. 115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataLowSecs = 60 * 60; 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 30 minues. 118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataVeryLowSecs = 30 * 60; 119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered low data when less than 100MB. 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataLowBytes = 100 * 1024 * 1024; 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Cellular network is considered very low data when less than 50MB. 124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickstatic const int kCellularDataVeryLowBytes = 50 * 1024 * 1024; 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Contains data related to the flimflam.Device interface, 127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// e.g. ethernet, wifi, cellular. 128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass NetworkDevice { 129dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit NetworkDevice(const std::string& device_path); 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 132dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Device info. 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& device_path() const { return device_path_; } 134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& name() const { return name_; } 135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type() const { return type_; } 136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool scanning() const { return scanning_; } 137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& meid() const { return MEID_; } 138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& imei() const { return IMEI_; } 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& imsi() const { return IMSI_; } 140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& esn() const { return ESN_; } 141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& mdn() const { return MDN_; } 142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& min() const { return MIN_; } 143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& model_id() const { return model_id_; } 144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& manufacturer() const { return manufacturer_; } 145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& firmware_revision() const { return firmware_revision_; } 146dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& hardware_revision() const { return hardware_revision_; } 147dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& last_update() const { return last_update_; } 148dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const unsigned int prl_version() const { return PRL_version_; } 149dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 150dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool ParseValue(int index, const Value* value); 152dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void ParseInfo(const DictionaryValue* info); 153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // General device info. 155dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string device_path_; 156dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string name_; 157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type_; 158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool scanning_; 159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Cellular specific device info. 160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string carrier_; 161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MEID_; 162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string IMEI_; 163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string IMSI_; 164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string ESN_; 165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MDN_; 166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string MIN_; 167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string model_id_; 168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string manufacturer_; 169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string firmware_revision_; 170dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string hardware_revision_; 171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string last_update_; 172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int PRL_version_; 173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class NetworkLibraryImpl; 175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DISALLOW_COPY_AND_ASSIGN(NetworkDevice); 176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Contains data common to all network service types. 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Network { 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~Network() {} 182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& service_path() const { return service_path_; } 184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& name() const { return name_; } 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& device_path() const { return device_path_; } 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& ip_address() const { return ip_address_; } 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionType type() const { return type_; } 188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionMode mode() const { return mode_; } 189731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState connection_state() const { return state_; } 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool connecting() const { return state_ == STATE_ASSOCIATION || 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ == STATE_CONFIGURATION || 192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ == STATE_CARRIER; } 193513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool configuring() const { return state_ == STATE_CONFIGURATION; } 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool connected() const { return state_ == STATE_READY; } 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool connecting_or_connected() const { return connecting() || connected(); } 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool failed() const { return state_ == STATE_FAILURE; } 197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool failed_or_disconnected() const { 198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return failed() || state_ == STATE_IDLE; 199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionError error() const { return error_; } 201731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState state() const { return state_; } 2024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Is this network connectable. Some networks are not yet ready to be 2034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // connected. For example, an 8021X network without certificates. 2044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool connectable() const { return connectable_; } 205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Is this the active network, i.e, the one through which 206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // network traffic is being routed? A network can be connected, 207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // but not be carrying traffic. 208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool is_active() const { return is_active_; } 209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool favorite() const { return favorite_; } 210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool auto_connect() const { return auto_connect_; } 211dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectivityState connectivity_state() const { return connectivity_state_; } 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // We don't have a setter for |favorite_| because to unfavorite a network is 214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // equivalent to forget a network, so we call forget network on cros for 215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // that. See ForgetWifiNetwork(). 216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetAutoConnect(bool auto_connect); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the state code. 219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetStateString() const; 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the error code. 222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetErrorString() const; 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 225dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Network(const std::string& service_path, ConnectionType type) 226dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : state_(STATE_UNKNOWN), 227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch error_(ERROR_UNKNOWN), 2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch connectable_(true), 229dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen is_active_(false), 230dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen favorite_(false), 231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen auto_connect_(false), 232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen connectivity_state_(CONN_STATE_UNKNOWN), 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen priority_(0), 234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen service_path_(service_path), 235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen type_(type) {} 236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Parse name/value pairs from libcros. 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void ParseInfo(const DictionaryValue* info); 240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 241dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void SetStringProperty(const char* prop, const std::string& str); 242dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void SetBooleanProperty(const char* prop, bool b); 243dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void SetIntegerProperty(const char* prop, int i); 244dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void SetValueProperty(const char* prop, Value* val); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string device_path_; 247dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string name_; 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string ip_address_; 249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionMode mode_; 250731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ConnectionState state_; 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionError error_; 2524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool connectable_; 253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool is_active_; 254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool favorite_; 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool auto_connect_; 256dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectivityState connectivity_state_; 257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 259dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_name(const std::string& name) { name_ = name; } 260dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connecting(bool connecting) { 261dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ = (connecting ? STATE_ASSOCIATION : STATE_IDLE); 262dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 263dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connected(bool connected) { 264dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen state_ = (connected ? STATE_READY : STATE_IDLE); 265dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_state(ConnectionState state) { state_ = state; } 2674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void set_connectable(bool connectable) { connectable_ = connectable; } 268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_active(bool is_active) { is_active_ = is_active; } 269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void set_error(ConnectionError error) { error_ = error; } 270dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_connectivity_state(ConnectivityState connectivity_state) { 271dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen connectivity_state_ = connectivity_state; 272dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 2744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Initialize the IP address field 2754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void InitIPAddress(); 2764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Priority value, corresponds to index in list from flimflam (0 = highest) 278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int priority_; 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 280dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // These must not be modified after construction. 281dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string service_path_; 282dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConnectionType type_; 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 284513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 285dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // ChangeAutoConnectSaveTest accesses |favorite_|. 286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FRIEND_TEST_ALL_PREFIXES(WifiConfigViewTest, ChangeAutoConnectSaveTest); 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 289dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_ETHERNET. 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EthernetNetwork : public Network { 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit EthernetNetwork(const std::string& service_path) : 293dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Network(service_path, TYPE_ETHERNET) { 294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 295dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 296513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_VPN. 298dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass VirtualNetwork : public Network { 299dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 300dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit VirtualNetwork(const std::string& service_path) : 301dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Network(service_path, TYPE_VPN) { 302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<VirtualNetwork*> VirtualNetworkVector; 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Base class for networks of TYPE_WIFI or TYPE_CELLULAR. 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WirelessNetwork : public Network { 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int strength() const { return strength_; } 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WirelessNetwork(const std::string& service_path, ConnectionType type) 313dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : Network(service_path, type), 314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen strength_(0) {} 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int strength_; 316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 317dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Network overrides. 318dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 3194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 320dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_strength(int strength) { strength_ = strength; } 322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 326dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_CELLULAR. 327dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CellularDataPlan; 328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CellularNetwork : public WirelessNetwork { 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 331731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick enum DataLeft { 33272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DATA_UNKNOWN, 333731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_NORMAL, 334731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_LOW, 335731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_VERY_LOW, 336731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DATA_NONE 337731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick }; 338731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 339513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual ~CellularNetwork(); 340dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 341dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit CellularNetwork(const std::string& service_path) 342dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : WirelessNetwork(service_path, TYPE_CELLULAR), 343dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen activation_state_(ACTIVATION_STATE_UNKNOWN), 344dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen network_technology_(NETWORK_TECHNOLOGY_UNKNOWN), 345dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen roaming_state_(ROAMING_STATE_UNKNOWN), 346dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_left_(DATA_UNKNOWN) { 347dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 3483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Starts device activation process. Returns false if the device state does 3493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // not permit activation. 3503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool StartActivation() const; 3513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const ActivationState activation_state() const { return activation_state_; } 352731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NetworkTechnology network_technology() const { 353731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return network_technology_; 354731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 355731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const NetworkRoamingState roaming_state() const { return roaming_state_; } 356201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool restricted_pool() const { 357201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return connectivity_state() == CONN_STATE_RESTRICTED; 358201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 3594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool needs_new_plan() const { 3604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return restricted_pool() && connected() && 3614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch activation_state() == ACTIVATION_STATE_ACTIVATED; 3624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 363731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& operator_name() const { return operator_name_; } 364731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& operator_code() const { return operator_code_; } 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& payment_url() const { return payment_url_; } 366dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& usage_url() const { return usage_url_; } 367dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DataLeft data_left() const { return data_left_; } 368dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 369dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Misc. 370201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool is_gsm() const { 371201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return network_technology_ != NETWORK_TECHNOLOGY_EVDO && 372201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch network_technology_ != NETWORK_TECHNOLOGY_1XRTT && 373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch network_technology_ != NETWORK_TECHNOLOGY_UNKNOWN; 374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 376731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of network technology. 377731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetNetworkTechnologyString() const; 378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Return a string representation of connectivity state. 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string GetConnectivityStateString() const; 380731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of activation state. 381731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetActivationStateString() const; 382731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return a string representation of roaming state. 383731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string GetRoamingStateString() const; 384731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Return a string representation of |activation_state|. 386513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch static std::string ActivationStateToString(ActivationState activation_state); 387513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick protected: 389dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // WirelessNetwork overrides. 390dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ActivationState activation_state_; 393731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NetworkTechnology network_technology_; 394731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NetworkRoamingState roaming_state_; 395731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Carrier Info 396731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string operator_name_; 397731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string operator_code_; 3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::string payment_url_; 399dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string usage_url_; 400dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Cached values 401dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DataLeft data_left_; // Updated when data plans are updated. 402513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 403513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 404513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_activation_state(ActivationState state) { 405513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch activation_state_ = state; 406513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 407dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_payment_url(const std::string& url) { payment_url_ = url; } 408dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_usage_url(const std::string& url) { usage_url_ = url; } 409513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_network_technology(NetworkTechnology technology) { 410513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch network_technology_ = technology; 411513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 412dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_roaming_state(NetworkRoamingState state) { roaming_state_ = state; } 413dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_data_left(DataLeft data_left) { data_left_ = data_left; } 414513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 415513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch friend class NetworkLibraryImpl; 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 417dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<CellularNetwork*> CellularNetworkVector; 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 419dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Class for networks of TYPE_WIFI. 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WifiNetwork : public WirelessNetwork { 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 422dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit WifiNetwork(const std::string& service_path) 423dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : WirelessNetwork(service_path, TYPE_WIFI), 424dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen encryption_(SECURITY_NONE), 425dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen passphrase_required_(false) { 426dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool encrypted() const { return encryption_ != SECURITY_NONE; } 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionSecurity encryption() const { return encryption_; } 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& passphrase() const { return passphrase_; } 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& identity() const { return identity_; } 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& cert_path() const { return cert_path_; } 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_encryption(ConnectionSecurity encryption) { 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch encryption_ = encryption; 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_passphrase(const std::string& passphrase) { 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch passphrase_ = passphrase; 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_identity(const std::string& identity) { 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch identity_ = identity; 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_cert_path(const std::string& cert_path) { 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch cert_path_ = cert_path; 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 447dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetPassphrase(const std::string& passphrase); 448dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetIdentity(const std::string& identity); 449dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetCertPath(const std::string& cert_path); 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return a string representation of the encryption code. 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This not translated and should be only used for debugging purposes. 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string GetEncryptionString(); 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Return true if a passphrase or other input is required to connect. 45621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool IsPassphraseRequired() const; 45721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 458731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Return true if cert_path_ indicates that we have loaded the certificate. 459731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool IsCertificateLoaded() const; 460731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 462dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // WirelessNetwork overrides. 463dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ParseValue(int index, const Value* value); 464dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 465dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 466dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_passphrase_required(bool passphrase_required) { 467dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen passphrase_required_ = passphrase_required; 468dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 469dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConnectionSecurity encryption_; 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string passphrase_; 472513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool passphrase_required_; 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string identity_; 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string cert_path_; 475dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 476dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class NetworkLibraryImpl; 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 478dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<WifiNetwork*> WifiNetworkVector; 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 480dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Cellular Data Plan management. 481dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CellularDataPlan { 482dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 483dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CellularDataPlan() 484dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : plan_name("Unknown"), 485dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_type(CELLULAR_DATA_PLAN_UNLIMITED), 486dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_data_bytes(0), 487dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_bytes_used(0) { } 488dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen explicit CellularDataPlan(const CellularDataPlanInfo &plan) 489dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : plan_name(plan.plan_name ? plan.plan_name : ""), 490dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_type(plan.plan_type), 491dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen update_time(base::Time::FromInternalValue(plan.update_time)), 492dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_start_time(base::Time::FromInternalValue(plan.plan_start_time)), 493dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_end_time(base::Time::FromInternalValue(plan.plan_end_time)), 494dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen plan_data_bytes(plan.plan_data_bytes), 495dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen data_bytes_used(plan.data_bytes_used) { } 496dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats cellular plan description. 497dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetPlanDesciption() const; 498dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Evaluates cellular plans status and returns warning string if it is near 499dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // expiration. 500dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetRemainingWarning() const; 501dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats remaining plan data description. 502dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetDataRemainingDesciption() const; 503dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats plan expiration description. 504dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetPlanExpiration() const; 505dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Formats plan usage info. 506dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 GetUsageInfo() const; 507dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns a unique string for this plan that can be used for comparisons. 508dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string GetUniqueIdentifier() const; 509dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::TimeDelta remaining_time() const; 510dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 remaining_minutes() const; 511dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns plan data remaining in bytes. 512dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 remaining_data() const; 513dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(stevenjb): Make these private with accessors and properly named. 514dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string plan_name; 515dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CellularDataPlanType plan_type; 516dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time update_time; 517dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time plan_start_time; 518dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time plan_end_time; 519dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 plan_data_bytes; 520dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int64 data_bytes_used; 521dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 522dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef ScopedVector<CellularDataPlan> CellularDataPlanVector; 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 524dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Geolocation data. 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct CellTower { 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum RadioType { 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_GSM, 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_CDMA, 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RADIOTYPE_WCDMA, 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } radio_type; // GSM/WCDMA CDMA 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int mobile_country_code; // MCC MCC 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int mobile_network_code; // MNC SID 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int location_area_code; // LAC NID 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int cell_id; // CID BID 535731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick base::Time timestamp; // Timestamp when this cell was primary 536731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int signal_strength; // Radio signal strength measured in dBm. 537731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int timing_advance; // Represents the distance from the cell tower. 538731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Each unit is roughly 550 meters. 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct WifiAccessPoint { 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string mac_address; // The mac address of the WiFi node. 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name; // The SSID of the WiFi node. 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time timestamp; // Timestamp when this AP was detected. 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int signal_strength; // Radio signal strength measured in dBm. 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int signal_to_noise; // Current signal to noise ratio measured in dB. 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int channel; // Wifi channel number. 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<CellTower> CellTowerVector; 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<WifiAccessPoint> WifiAccessPointVector; 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 553dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// IP Configuration. 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct NetworkIPConfig { 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NetworkIPConfig(const std::string& device_path, IPConfigType type, 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& address, const std::string& netmask, 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& gateway, const std::string& name_servers) 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : device_path(device_path), 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type(type), 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch address(address), 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch netmask(netmask), 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gateway(gateway), 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name_servers(name_servers) {} 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NetworkIPConfigs are sorted by tyoe. 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool operator< (const NetworkIPConfig& other) const { 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return type < other.type; 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string device_path; 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPConfigType type; 572731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string address; // This looks like "/device/0011aa22bb33" 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string netmask; 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string gateway; 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string name_servers; 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef std::vector<NetworkIPConfig> NetworkIPConfigVector; 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This class handles the interaction with the ChromeOS network library APIs. 5803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Classes can add themselves as observers. Users can get an instance of the 5813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// library like this: chromeos::CrosLibrary::Get()->GetNetworkLibrary() 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkLibrary { 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 584513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class NetworkManagerObserver { 585513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 586513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Called when the state of the network manager has changed, 587513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // for example, networks have appeared or disappeared. 588513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnNetworkManagerChanged(NetworkLibrary* obj) = 0; 589513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 590513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 591513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class NetworkObserver { 592513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 593513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Called when the state of a single network has changed, 594513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // for example signal strength or connection state. 595513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnNetworkChanged(NetworkLibrary* cros, 596513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Network* network) = 0; 597513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 598513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 599513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class CellularDataPlanObserver { 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 601731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Called when the cellular data plan has changed. 602513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnCellularDataPlanChanged(NetworkLibrary* obj) = 0; 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen class UserActionObserver { 606dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 607dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Called when user initiates a new connection. 608dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Network is NULL when we don't have an associated Network object. 609dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void OnConnectionInitiated(NetworkLibrary* cros, 610dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const Network* network) = 0; 611dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen }; 612dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~NetworkLibrary() {} 614513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 615513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) = 0; 616513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveNetworkManagerObserver( 617513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkManagerObserver* observer) = 0; 618513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 619513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // An attempt to add an observer that has already been added for a 620513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // give service path will be ignored. 621513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddNetworkObserver(const std::string& service_path, 622513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkObserver* observer) = 0; 623513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Remove an observer of a single network 624513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveNetworkObserver(const std::string& service_path, 625513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NetworkObserver* observer) = 0; 626513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Stop |observer| from observing any networks 627513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) = 0; 628513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 62972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Temporarily locks down certain functionality in network library to prevent 63072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // unplanned side effects. During the lock down, Enable*Device() calls cannot 63172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // be made. 63272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Lock() = 0; 63372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Removes temporarily lock of network library. 63472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Unlock() = 0; 63572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Checks if access to network library is locked. 63672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool IsLocked() = 0; 63772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 638513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void AddCellularDataPlanObserver( 639513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CellularDataPlanObserver* observer) = 0; 640513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RemoveCellularDataPlanObserver( 641513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CellularDataPlanObserver* observer) = 0; 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 643dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AddUserActionObserver(UserActionObserver* observer) = 0; 644dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void RemoveUserActionObserver(UserActionObserver* observer) = 0; 645dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 646dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active or default Ethernet network (or NULL if none). 64721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const EthernetNetwork* ethernet_network() const = 0; 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_connecting() const = 0; 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_connected() const = 0; 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 651dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active Wifi network (or NULL if none active). 65221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const WifiNetwork* wifi_network() const = 0; 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_connecting() const = 0; 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_connected() const = 0; 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 656dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active Cellular network (or NULL if none active). 65721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const CellularNetwork* cellular_network() const = 0; 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_connecting() const = 0; 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_connected() const = 0; 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 661dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return the active virtual network (or NULL if none active). 662dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const VirtualNetwork* virtual_network() const = 0; 663dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool virtual_network_connecting() const = 0; 664dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool virtual_network_connected() const = 0; 665dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return true if any network is currently connected. 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool Connected() const = 0; 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return true if any network is currently connecting. 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool Connecting() const = 0; 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current IP address if connected. If not, returns empty string. 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const std::string& IPAddress() const = 0; 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current list of wifi networks. 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const WifiNetworkVector& wifi_networks() const = 0; 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the list of remembered wifi networks. 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const WifiNetworkVector& remembered_wifi_networks() const = 0; 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current list of cellular networks. 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const CellularNetworkVector& cellular_networks() const = 0; 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 684dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns the current list of virtual networks. 685dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const VirtualNetworkVector& virtual_networks() const = 0; 686dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 687dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return a pointer to the device, if it exists, or NULL. 688dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const NetworkDevice* FindNetworkDeviceByPath( 689dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 690dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 691dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Return a pointer to the network, if it exists, or NULL. 692dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual WifiNetwork* FindWifiNetworkByPath( 693dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 694513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual CellularNetwork* FindCellularNetworkByPath( 695dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 696513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 697dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Retrieves the data plans associated with |path|, NULL if there are no 698dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // associated plans. 699dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const CellularDataPlanVector* GetDataPlans( 700dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 701dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 702dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This returns the significant data plan. If the user only has the 703dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // base data plan, then return that. If there is a base and a paid data plan, 704dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // then the significant one is the paid one. So return the paid plan. 705dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // If there are no data plans, then this method returns NULL. 706dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // This returns a pointer to a member of data_plans_, so if SetDataPlans() 707dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // gets called, the result becomes invalid. 708dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual const CellularDataPlan* GetSignificantDataPlan( 709dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& path) const = 0; 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Request a scan for new wifi networks. 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RequestWifiScan() = 0; 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads out the results of the last wifi scan. These results are not 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // pre-cached in the library, so the call may block whilst the results are 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // read over IPC. 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns false if an error occurred in reading the results. Note that 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a true return code only indicates the result set was successfully read, 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // it does not imply a scan has successfully completed yet. 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) = 0; 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(joth): Add GetCellTowers to retrieve a CellTowerVector. 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 724dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(stevenjb): eliminate Network* version of Connect functions. 725dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Instead, always use service_path and improve the error handling. 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Connect to the specified wireless network with password. 727201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns false if the attempt fails immediately (e.g. passphrase too short) 728201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // and sets network->error(). 729201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool ConnectToWifiNetwork(WifiNetwork* network, 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& password, 731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& identity, 732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& certpath) = 0; 733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 734dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Same as above but searches for an existing network by name. 735dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool ConnectToWifiNetwork(const std::string& service_path, 736dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& password, 737dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& identity, 738dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& certpath) = 0; 739dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 740513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Connect to the specified network with security, ssid, and password. 741513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns false if the attempt fails immediately (e.g. passphrase too short). 742513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool ConnectToWifiNetwork(ConnectionSecurity security, 743513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& ssid, 744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& password, 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& identity, 746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& certpath, 747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool auto_connect) = 0; 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Connect to the specified cellular network. 750513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns false if the attempt fails immediately. 751513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool ConnectToCellularNetwork(const CellularNetwork* network) = 0; 752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 753731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Initiates cellular data plan refresh. Plan data will be passed through 754731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Network::Observer::CellularDataPlanChanged callback. 755513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RefreshCellularDataPlans(const CellularNetwork* network) = 0; 756731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 75772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Records information that cellular play payment had happened. 75872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void SignalCellularPlanPayment() = 0; 75972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 76072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns true if cellular plan payment had been recorded recently. 76172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool HasRecentCellularPlanPayment() = 0; 76272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Disconnect from the specified wireless (either cellular or wifi) network. 764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DisconnectFromWirelessNetwork( 765513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const WirelessNetwork* network) = 0; 766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 767513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Forget the wifi network corresponding to service_path. 768513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ForgetWifiNetwork(const std::string& service_path) = 0; 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_available() const = 0; 771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_available() const = 0; 772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_available() const = 0; 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ethernet_enabled() const = 0; 775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool wifi_enabled() const = 0; 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool cellular_enabled() const = 0; 777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 778201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool wifi_scanning() const = 0; 779201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 780513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual const Network* active_network() const = 0; 781513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool offline_mode() const = 0; 783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the ethernet network device. 785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableEthernetNetworkDevice(bool enable) = 0; 786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the wifi network device. 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableWifiNetworkDevice(bool enable) = 0; 789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables the cellular network device. 791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableCellularNetworkDevice(bool enable) = 0; 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enables/disables offline mode. 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void EnableOfflineMode(bool enable) = 0; 795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 796731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Fetches IP configs and hardware address for a given device_path. 797731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The hardware address is usually a MAC address like "0011AA22BB33". 798731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // |hardware_address| will be an empty string, if no hardware address is 799731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // found. 800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual NetworkIPConfigVector GetIPConfigs( 801731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& device_path, 802731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string* hardware_address) = 0; 803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Fetches debug network info for display in about:network. 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The page will have a meta refresh of |refresh| seconds if |refresh| > 0. 806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual std::string GetHtmlInfo(int refresh) = 0; 807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Factory function, creates a new instance and returns ownership. 8093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // For normal usage, access the singleton via CrosLibrary::Get(). 8103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static NetworkLibrary* GetImpl(bool stub); 811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ 816