1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_IMPL_BASE_H_ 6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_IMPL_BASE_H_ 7 8 #include <list> 9 #include <set> 10 11 #include "chrome/browser/chromeos/cros/network_library.h" 12 #include "chromeos/network/onc/onc_constants.h" 13 14 namespace chromeos { 15 16 class NetworkLibraryImplBase : public NetworkLibrary { 17 public: 18 NetworkLibraryImplBase(); 19 virtual ~NetworkLibraryImplBase(); 20 21 ////////////////////////////////////////////////////////////////////////////// 22 // NetworkLibraryImplBase virtual functions. 23 24 // Functions for monitoring networks & devices. 25 virtual void MonitorNetworkStart(const std::string& service_path) = 0; 26 virtual void MonitorNetworkStop(const std::string& service_path) = 0; 27 virtual void MonitorNetworkDeviceStart(const std::string& device_path) = 0; 28 virtual void MonitorNetworkDeviceStop(const std::string& device_path) = 0; 29 30 // Called from ConnectToWifiNetwork. 31 // Calls ConnectToWifiNetworkUsingConnectData if network request succeeds. 32 virtual void CallRequestWifiNetworkAndConnect( 33 const std::string& ssid, ConnectionSecurity security) = 0; 34 // Called from ConnectToVirtualNetwork*. 35 // Calls ConnectToVirtualNetworkUsingConnectData if network request succeeds. 36 virtual void CallRequestVirtualNetworkAndConnect( 37 const std::string& service_name, 38 const std::string& server_hostname, 39 ProviderType provider_type) = 0; 40 // Call to configure a wifi service. The identifier is either a service_path 41 // or a GUID. |info| is a dictionary of property values. 42 virtual void CallConfigureService(const std::string& identifier, 43 const DictionaryValue* info) = 0; 44 // Called from NetworkConnectStart. 45 // Calls NetworkConnectCompleted when the connection attempt completes. 46 virtual void CallConnectToNetwork(Network* network) = 0; 47 // Called from DeleteRememberedNetwork. 48 virtual void CallDeleteRememberedNetwork( 49 const std::string& profile_path, const std::string& service_path) = 0; 50 51 // Called from Enable*NetworkDevice. 52 // Asynchronously enables or disables the specified device type. 53 virtual void CallEnableNetworkDeviceType( 54 ConnectionType device, bool enable) = 0; 55 56 // Called from DeleteRememberedNetwork for VPN services. 57 // Asynchronously disconnects and removes the service. 58 virtual void CallRemoveNetwork(const Network* network) = 0; 59 60 ////////////////////////////////////////////////////////////////////////////// 61 // NetworkLibrary implementation. 62 63 // virtual Init implemented in derived classes. 64 // virtual IsCros implemented in derived classes. 65 66 virtual void AddNetworkProfileObserver( 67 NetworkProfileObserver* observer) OVERRIDE; 68 virtual void RemoveNetworkProfileObserver( 69 NetworkProfileObserver* observer) OVERRIDE; 70 virtual void AddNetworkManagerObserver( 71 NetworkManagerObserver* observer) OVERRIDE; 72 virtual void RemoveNetworkManagerObserver( 73 NetworkManagerObserver* observer) OVERRIDE; 74 virtual void AddNetworkObserver(const std::string& service_path, 75 NetworkObserver* observer) OVERRIDE; 76 virtual void RemoveNetworkObserver(const std::string& service_path, 77 NetworkObserver* observer) OVERRIDE; 78 virtual void RemoveObserverForAllNetworks( 79 NetworkObserver* observer) OVERRIDE; 80 virtual void AddNetworkDeviceObserver( 81 const std::string& device_path, 82 NetworkDeviceObserver* observer) OVERRIDE; 83 virtual void RemoveNetworkDeviceObserver( 84 const std::string& device_path, 85 NetworkDeviceObserver* observer) OVERRIDE; 86 87 virtual void AddPinOperationObserver( 88 PinOperationObserver* observer) OVERRIDE; 89 virtual void RemovePinOperationObserver( 90 PinOperationObserver* observer) OVERRIDE; 91 92 virtual const EthernetNetwork* ethernet_network() const OVERRIDE; 93 virtual bool ethernet_connecting() const OVERRIDE; 94 virtual bool ethernet_connected() const OVERRIDE; 95 virtual const WifiNetwork* wifi_network() const OVERRIDE; 96 virtual bool wifi_connecting() const OVERRIDE; 97 virtual bool wifi_connected() const OVERRIDE; 98 virtual const CellularNetwork* cellular_network() const OVERRIDE; 99 virtual bool cellular_connecting() const OVERRIDE; 100 virtual bool cellular_connected() const OVERRIDE; 101 virtual const WimaxNetwork* wimax_network() const OVERRIDE; 102 virtual bool wimax_connecting() const OVERRIDE; 103 virtual bool wimax_connected() const OVERRIDE; 104 virtual const VirtualNetwork* virtual_network() const OVERRIDE; 105 virtual bool virtual_network_connecting() const OVERRIDE; 106 virtual bool virtual_network_connected() const OVERRIDE; 107 virtual bool Connected() const OVERRIDE; 108 virtual bool Connecting() const OVERRIDE; 109 virtual const WifiNetworkVector& wifi_networks() const OVERRIDE; 110 virtual const WifiNetworkVector& remembered_wifi_networks() const OVERRIDE; 111 virtual const CellularNetworkVector& cellular_networks() const OVERRIDE; 112 virtual const WimaxNetworkVector& wimax_networks() const OVERRIDE; 113 virtual const VirtualNetworkVector& virtual_networks() const OVERRIDE; 114 virtual const VirtualNetworkVector& 115 remembered_virtual_networks() const OVERRIDE; 116 virtual const Network* active_network() const OVERRIDE; 117 virtual const Network* active_nonvirtual_network() const OVERRIDE; 118 virtual const Network* connected_network() const OVERRIDE; 119 virtual const Network* connecting_network() const OVERRIDE; 120 virtual bool ethernet_available() const OVERRIDE; 121 virtual bool wifi_available() const OVERRIDE; 122 virtual bool wimax_available() const OVERRIDE; 123 virtual bool cellular_available() const OVERRIDE; 124 virtual bool ethernet_enabled() const OVERRIDE; 125 virtual bool wifi_enabled() const OVERRIDE; 126 virtual bool wimax_enabled() const OVERRIDE; 127 virtual bool cellular_enabled() const OVERRIDE; 128 virtual bool wifi_scanning() const OVERRIDE; 129 virtual bool cellular_initializing() const OVERRIDE; 130 131 virtual const NetworkDevice* FindNetworkDeviceByPath( 132 const std::string& path) const OVERRIDE; 133 NetworkDevice* FindNetworkDeviceByPath(const std::string& path); 134 virtual const NetworkDevice* FindMobileDevice() const OVERRIDE; 135 virtual const NetworkDevice* FindCellularDevice() const OVERRIDE; 136 virtual Network* FindNetworkByPath(const std::string& path) const OVERRIDE; 137 virtual Network* FindNetworkByUniqueId( 138 const std::string& unique_id) const OVERRIDE; 139 WirelessNetwork* FindWirelessNetworkByPath(const std::string& path) const; 140 virtual WifiNetwork* FindWifiNetworkByPath( 141 const std::string& path) const OVERRIDE; 142 virtual WimaxNetwork* FindWimaxNetworkByPath( 143 const std::string& path) const OVERRIDE; 144 virtual CellularNetwork* FindCellularNetworkByPath( 145 const std::string& path) const OVERRIDE; 146 virtual VirtualNetwork* FindVirtualNetworkByPath( 147 const std::string& path) const OVERRIDE; 148 Network* FindRememberedFromNetwork(const Network* network) const; 149 virtual Network* FindRememberedNetworkByPath( 150 const std::string& path) const OVERRIDE; 151 152 virtual const base::DictionaryValue* FindOncForNetwork( 153 const std::string& unique_id) const OVERRIDE; 154 155 virtual void SignalCellularPlanPayment() OVERRIDE; 156 virtual bool HasRecentCellularPlanPayment() OVERRIDE; 157 virtual const std::string& GetCellularHomeCarrierId() const OVERRIDE; 158 virtual bool CellularDeviceUsesDirectActivation() const OVERRIDE; 159 160 // virtual ChangePin implemented in derived classes. 161 // virtual ChangeRequiredPin implemented in derived classes. 162 // virtual EnterPin implemented in derived classes. 163 // virtual UnblockPin implemented in derived classes. 164 165 // virtual RequestCellularScan implemented in derived classes. 166 // virtual RequestCellularRegister implemented in derived classes. 167 // virtual SetCellularDataRoamingAllowed implemented in derived classes. 168 // virtual SetCarrier implemented in derived classes. 169 // virtual IsCellularAlwaysInRoaming implemented in derived classes. 170 // virtual RequestNetworkScan implemented in derived classes. 171 172 virtual bool CanConnectToNetwork(const Network* network) const OVERRIDE; 173 174 // Connect to an existing network. 175 virtual void ConnectToWifiNetwork(WifiNetwork* wifi) OVERRIDE; 176 virtual void ConnectToWifiNetwork(WifiNetwork* wifi, bool shared) OVERRIDE; 177 virtual void ConnectToWimaxNetwork(WimaxNetwork* wimax) OVERRIDE; 178 virtual void ConnectToWimaxNetwork(WimaxNetwork* wimax, bool shared) OVERRIDE; 179 virtual void ConnectToCellularNetwork(CellularNetwork* cellular) OVERRIDE; 180 virtual void ConnectToVirtualNetwork(VirtualNetwork* vpn) OVERRIDE; 181 182 // Request a network and connect to it. 183 virtual void ConnectToUnconfiguredWifiNetwork( 184 const std::string& ssid, 185 ConnectionSecurity security, 186 const std::string& passphrase, 187 const EAPConfigData* eap_config, 188 bool save_credentials, 189 bool shared) OVERRIDE; 190 191 virtual void ConnectToUnconfiguredVirtualNetwork( 192 const std::string& service_name, 193 const std::string& server_hostname, 194 ProviderType provider_type, 195 const VPNConfigData& config) OVERRIDE; 196 197 // virtual DisconnectFromNetwork implemented in derived classes. 198 virtual void ForgetNetwork(const std::string& service_path) OVERRIDE; 199 virtual void EnableEthernetNetworkDevice(bool enable) OVERRIDE; 200 virtual void EnableWifiNetworkDevice(bool enable) OVERRIDE; 201 virtual void EnableWimaxNetworkDevice(bool enable) OVERRIDE; 202 virtual void EnableCellularNetworkDevice(bool enable) OVERRIDE; 203 // virtual GetIPConfigs implemented in derived classes. 204 // virtual SetIPConfig implemented in derived classes. 205 virtual void LoadOncNetworks(const base::ListValue& network_configs, 206 onc::ONCSource source) OVERRIDE; 207 virtual bool SetActiveNetwork(ConnectionType type, 208 const std::string& service_path) OVERRIDE; 209 210 protected: 211 typedef ObserverList<NetworkObserver> NetworkObserverList; 212 typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap; 213 214 typedef ObserverList<NetworkDeviceObserver> NetworkDeviceObserverList; 215 typedef std::map<std::string, NetworkDeviceObserverList*> 216 NetworkDeviceObserverMap; 217 218 typedef std::map<std::string, Network*> NetworkMap; 219 typedef std::map<std::string, int> PriorityMap; 220 typedef std::map<std::string, NetworkDevice*> NetworkDeviceMap; 221 typedef std::map<std::string, const base::DictionaryValue*> NetworkOncMap; 222 typedef std::map<onc::ONCSource, 223 std::set<std::string> > NetworkSourceMap; 224 225 struct NetworkProfile { 226 NetworkProfile(const std::string& p, NetworkProfileType t); 227 ~NetworkProfile(); 228 std::string path; 229 NetworkProfileType type; 230 typedef std::set<std::string> ServiceList; 231 ServiceList services; 232 }; 233 typedef std::list<NetworkProfile> NetworkProfileList; 234 235 struct ConnectData { 236 ConnectData(); 237 ~ConnectData(); 238 ConnectionSecurity security; 239 std::string service_name; // For example, SSID. 240 std::string username; 241 std::string passphrase; 242 std::string otp; 243 std::string group_name; 244 std::string server_hostname; 245 std::string server_ca_cert_pem; 246 std::string client_cert_pkcs11_id; 247 EAPMethod eap_method; 248 EAPPhase2Auth eap_auth; 249 bool eap_use_system_cas; 250 std::string eap_identity; 251 std::string eap_anonymous_identity; 252 std::string psk_key; 253 bool save_credentials; 254 NetworkProfileType profile_type; 255 }; 256 257 enum NetworkConnectStatus { 258 CONNECT_SUCCESS, 259 CONNECT_BAD_PASSPHRASE, 260 CONNECT_FAILED 261 }; 262 263 // Return true if a profile matching |type| is loaded. 264 bool HasProfileType(NetworkProfileType type) const; 265 266 // This will connect to a preferred network if the currently connected 267 // network is not preferred. This should be called when the active profile 268 // changes. 269 void SwitchToPreferredNetwork(); 270 271 // Finds device by connection type. 272 const NetworkDevice* FindDeviceByType(ConnectionType type) const; 273 // Called from ConnectTo*Network. 274 void NetworkConnectStartWifi( 275 WifiNetwork* network, NetworkProfileType profile_type); 276 void NetworkConnectStartVPN(VirtualNetwork* network); 277 void NetworkConnectStart(Network* network, NetworkProfileType profile_type); 278 // Called from CallConnectToNetwork. 279 void NetworkConnectCompleted(Network* network, 280 NetworkConnectStatus status); 281 // Called from CallRequestWifiNetworkAndConnect. 282 void ConnectToWifiNetworkUsingConnectData(WifiNetwork* wifi); 283 // Called from CallRequestVirtualNetworkAndConnect. 284 void ConnectToVirtualNetworkUsingConnectData(VirtualNetwork* vpn); 285 286 // Network list management functions. 287 void ClearActiveNetwork(ConnectionType type); 288 void UpdateActiveNetwork(Network* network); 289 void AddNetwork(Network* network); 290 void DeleteNetwork(Network* network); 291 292 // Calls ForgetNetwork for remembered wifi and virtual networks based on id. 293 // When |if_found| is true, then it forgets networks that appear in |ids|. 294 // When |if_found| is false, it removes networks that do NOT appear in |ids|. 295 // |source| is the import source of the data. 296 void ForgetNetworksById(onc::ONCSource source, 297 std::set<std::string> ids, 298 bool if_found); 299 300 // Checks whether |network| has meanwhile been pruned by ONC policy. If so, 301 // instructs shill to remove the network, deletes |network| and returns 302 // false. 303 bool ValidateRememberedNetwork(Network* network); 304 305 // Adds |network| to the remembered networks data structures and returns true 306 // if ValidateRememberedNetwork(network) returns true. Returns false 307 // otherwise. 308 bool ValidateAndAddRememberedNetwork(Network* network); 309 310 void DeleteRememberedNetwork(const std::string& service_path); 311 void ClearNetworks(); 312 void DeleteRememberedNetworks(); 313 void DeleteDevice(const std::string& device_path); 314 void DeleteDeviceFromDeviceObserversMap(const std::string& device_path); 315 316 // Profile management functions. 317 void AddProfile(const std::string& profile_path, 318 NetworkProfileType profile_type); 319 NetworkProfile* GetProfileForType(NetworkProfileType type); 320 void SetProfileType(Network* network, NetworkProfileType type); 321 void SetProfileTypeFromPath(Network* network); 322 std::string GetProfilePath(NetworkProfileType type); 323 324 // Notifications. 325 void NotifyNetworkProfileObservers(); 326 void NotifyNetworkManagerChanged(bool force_update); 327 void SignalNetworkManagerObservers(); 328 void NotifyNetworkChanged(const Network* network); 329 void NotifyNetworkDeviceChanged(NetworkDevice* device, PropertyIndex index); 330 void NotifyPinOperationCompleted(PinOperationError error); 331 332 // TPM related functions. 333 void GetTpmInfo(); 334 const std::string& GetTpmSlot(); 335 const std::string& GetTpmPin(); 336 337 // Network profile observer list. 338 ObserverList<NetworkProfileObserver> network_profile_observers_; 339 340 // Network manager observer list. 341 ObserverList<NetworkManagerObserver> network_manager_observers_; 342 343 // PIN operation observer list. 344 ObserverList<PinOperationObserver> pin_operation_observers_; 345 346 // Network observer map. 347 NetworkObserverMap network_observers_; 348 349 // Network device observer map. 350 NetworkDeviceObserverMap network_device_observers_; 351 352 // List of profiles. 353 NetworkProfileList profile_list_; 354 355 // A service path based map of all visible Networks. 356 NetworkMap network_map_; 357 358 // A unique_id based map of all visible Networks. 359 NetworkMap network_unique_id_map_; 360 361 // A service path based map of all remembered Networks. 362 NetworkMap remembered_network_map_; 363 364 // A list of services that we are awaiting updates for. 365 PriorityMap network_update_requests_; 366 367 // A device path based map of all NetworkDevices. 368 NetworkDeviceMap device_map_; 369 370 // The ethernet network. 371 EthernetNetwork* ethernet_; 372 373 // The list of available wifi networks. 374 WifiNetworkVector wifi_networks_; 375 376 // The current connected (or connecting) wifi network. 377 WifiNetwork* active_wifi_; 378 379 // The remembered wifi networks. 380 WifiNetworkVector remembered_wifi_networks_; 381 382 // The list of available cellular networks. 383 CellularNetworkVector cellular_networks_; 384 385 // The list of available wimax networks. 386 WimaxNetworkVector wimax_networks_; 387 388 // The current connected (or connecting) cellular network. 389 CellularNetwork* active_cellular_; 390 391 // The current connected (or connecting) Wimax network. 392 WimaxNetwork* active_wimax_; 393 394 // The list of available virtual networks. 395 VirtualNetworkVector virtual_networks_; 396 397 // The current connected (or connecting) virtual network. 398 VirtualNetwork* active_virtual_; 399 400 // The remembered virtual networks. 401 VirtualNetworkVector remembered_virtual_networks_; 402 403 // The path of the active profile (for retrieving remembered services). 404 std::string active_profile_path_; 405 406 // The current available network devices. Bitwise flag of ConnectionTypes. 407 int available_devices_; 408 409 // The current uninitialized network devices. Bitwise flag of ConnectionTypes. 410 int uninitialized_devices_; 411 412 // The current enabled network devices. Bitwise flag of ConnectionTypes. 413 int enabled_devices_; 414 415 // The current busy network devices. Bitwise flag of ConnectionTypes. 416 // Busy means device is switching from enable/disable state. 417 int busy_devices_; 418 419 // True if we are currently scanning for wifi networks. 420 bool wifi_scanning_; 421 422 // List of interfaces for which portal check is enabled. 423 std::string check_portal_list_; 424 425 // True if access network library is locked. 426 bool is_locked_; 427 428 // TPM module user slot and PIN, needed by shill to access certificates. 429 std::string tpm_slot_; 430 std::string tpm_pin_; 431 432 // Type of pending SIM operation, SIM_OPERATION_NONE otherwise. 433 SimOperationType sim_operation_; 434 435 private: 436 // List of networks to move to the user profile once logged in. 437 std::list<std::string> user_networks_; 438 439 // Weak pointer factory for canceling a network change callback. 440 base::WeakPtrFactory<NetworkLibraryImplBase> notify_manager_weak_factory_; 441 442 // Cellular plan payment time. 443 base::Time cellular_plan_payment_time_; 444 445 // Temporary connection data for async connect calls. 446 ConnectData connect_data_; 447 448 // Holds unique id to ONC mapping. 449 NetworkOncMap network_onc_map_; 450 451 // Keeps track of what networks ONC has configured. This is used to weed out 452 // stray networks that shill still has on file, but are not known on the 453 // Chrome side. 454 NetworkSourceMap network_source_map_; 455 456 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImplBase); 457 }; 458 459 } // namespace chromeos 460 461 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_IMPL_BASE_H_ 462