| OLD | NEW |
| (Empty) |
| 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_H_ | |
| 6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ | |
| 7 | |
| 8 #include <map> | |
| 9 #include <string> | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "base/callback.h" | |
| 13 #include "base/compiler_specific.h" | |
| 14 #include "base/gtest_prod_util.h" | |
| 15 #include "base/memory/ref_counted.h" | |
| 16 #include "base/memory/scoped_ptr.h" | |
| 17 #include "base/memory/singleton.h" | |
| 18 #include "base/memory/weak_ptr.h" | |
| 19 #include "base/observer_list.h" | |
| 20 #include "base/timer/timer.h" | |
| 21 #include "base/values.h" | |
| 22 #include "chrome/browser/chromeos/cros/network_constants.h" | |
| 23 #include "chromeos/network/network_ip_config.h" | |
| 24 #include "chromeos/network/network_ui_data.h" | |
| 25 #include "chromeos/network/network_util.h" | |
| 26 #include "chromeos/network/onc/onc_constants.h" | |
| 27 | |
| 28 namespace chromeos { | |
| 29 | |
| 30 class CertificatePattern; | |
| 31 class EnrollmentDelegate; | |
| 32 class NetworkDeviceParser; | |
| 33 class NetworkParser; | |
| 34 | |
| 35 // This is the list of all implementation classes that are allowed | |
| 36 // access to the internals of the network library classes. | |
| 37 #define NETWORK_LIBRARY_IMPL_FRIENDS \ | |
| 38 friend class NetworkLibraryImplBase; \ | |
| 39 friend class NetworkLibraryImplCros; \ | |
| 40 friend class NetworkLibraryImplStub; | |
| 41 | |
| 42 | |
| 43 // Simple wrapper for property Cellular.FoundNetworks. | |
| 44 struct FoundCellularNetwork { | |
| 45 FoundCellularNetwork(); | |
| 46 ~FoundCellularNetwork(); | |
| 47 | |
| 48 std::string status; | |
| 49 std::string network_id; | |
| 50 std::string short_name; | |
| 51 std::string long_name; | |
| 52 std::string technology; | |
| 53 }; | |
| 54 typedef std::vector<FoundCellularNetwork> CellularNetworkList; | |
| 55 | |
| 56 struct CellularApn { | |
| 57 std::string apn; | |
| 58 std::string network_id; | |
| 59 std::string username; | |
| 60 std::string password; | |
| 61 std::string name; | |
| 62 std::string localized_name; | |
| 63 std::string language; | |
| 64 | |
| 65 CellularApn(); | |
| 66 CellularApn(const std::string& apn, const std::string& network_id, | |
| 67 const std::string& username, const std::string& password); | |
| 68 ~CellularApn(); | |
| 69 void Set(const base::DictionaryValue& dict); | |
| 70 }; | |
| 71 typedef std::vector<CellularApn> CellularApnList; | |
| 72 | |
| 73 // The value of priority if it is not set. | |
| 74 const int kPriorityNotSet = 0; | |
| 75 // The value of priority if network is preferred. | |
| 76 const int kPriorityPreferred = 1; | |
| 77 | |
| 78 // Contains data related to the shill.Device interface, | |
| 79 // e.g. ethernet, wifi, cellular. | |
| 80 // TODO(dpolukhin): refactor to make base class and device specific derivatives. | |
| 81 class NetworkDevice { | |
| 82 public: | |
| 83 explicit NetworkDevice(const std::string& device_path); | |
| 84 ~NetworkDevice(); | |
| 85 | |
| 86 NetworkDeviceParser* device_parser() { return device_parser_.get(); } | |
| 87 void SetNetworkDeviceParser(NetworkDeviceParser* parser); | |
| 88 | |
| 89 // Device info. | |
| 90 const std::string& device_path() const { return device_path_; } | |
| 91 const std::string& name() const { return name_; } | |
| 92 const std::string& unique_id() const { return unique_id_; } | |
| 93 ConnectionType type() const { return type_; } | |
| 94 bool scanning() const { return scanning_; } | |
| 95 const std::string& meid() const { return meid_; } | |
| 96 const std::string& iccid() const { return iccid_; } | |
| 97 const std::string& imei() const { return imei_; } | |
| 98 const std::string& imsi() const { return imsi_; } | |
| 99 const std::string& esn() const { return esn_; } | |
| 100 const std::string& mdn() const { return mdn_; } | |
| 101 const std::string& min() const { return min_; } | |
| 102 const std::string& model_id() const { return model_id_; } | |
| 103 const std::string& manufacturer() const { return manufacturer_; } | |
| 104 SimLockState sim_lock_state() const { return sim_lock_state_; } | |
| 105 bool is_sim_locked() const { | |
| 106 return sim_lock_state_ == SIM_LOCKED_PIN || | |
| 107 sim_lock_state_ == SIM_LOCKED_PUK; | |
| 108 } | |
| 109 // Returns true if GSM modem and SIM as absent, otherwise | |
| 110 // returns false: GSM modem and SIM card is present or CDMA modem. | |
| 111 bool is_sim_absent() const { | |
| 112 return technology_family() == TECHNOLOGY_FAMILY_GSM && | |
| 113 !is_sim_locked() && !sim_present_; | |
| 114 } | |
| 115 int sim_retries_left() const { return sim_retries_left_; } | |
| 116 SimPinRequire sim_pin_required() const { return sim_pin_required_; } | |
| 117 bool powered() const { return powered_; } | |
| 118 const std::string& firmware_revision() const { return firmware_revision_; } | |
| 119 const std::string& hardware_revision() const { return hardware_revision_; } | |
| 120 const unsigned int prl_version() const { return prl_version_; } | |
| 121 const std::string& home_provider_code() const { return home_provider_code_; } | |
| 122 const std::string& home_provider_country() const { | |
| 123 return home_provider_country_; | |
| 124 } | |
| 125 const std::string& home_provider_id() const { return home_provider_id_; } | |
| 126 const std::string& home_provider_name() const { return home_provider_name_; } | |
| 127 const bool provider_requires_roaming() const { | |
| 128 return provider_requires_roaming_; | |
| 129 } | |
| 130 const std::string& selected_cellular_network() const { | |
| 131 return selected_cellular_network_; | |
| 132 } | |
| 133 const CellularNetworkList& found_cellular_networks() const { | |
| 134 return found_cellular_networks_; | |
| 135 } | |
| 136 bool data_roaming_allowed() const { return data_roaming_allowed_; } | |
| 137 bool support_network_scan() const { return support_network_scan_; } | |
| 138 std::string carrier() const { return carrier_; } | |
| 139 base::ListValue* supported_carriers() const { | |
| 140 return supported_carriers_.get(); | |
| 141 } | |
| 142 enum TechnologyFamily technology_family() const { return technology_family_; } | |
| 143 const CellularApnList& provider_apn_list() const { | |
| 144 return provider_apn_list_; | |
| 145 } | |
| 146 | |
| 147 // Updates the property specified by |key| with the contents of | |
| 148 // |value|. Returns false on failure. Upon success, returns the | |
| 149 // PropertyIndex that was updated in |index|. |index| may be NULL | |
| 150 // if not needed. | |
| 151 bool UpdateStatus(const std::string& key, | |
| 152 const base::Value& value, | |
| 153 PropertyIndex* index); | |
| 154 | |
| 155 protected: | |
| 156 void set_unique_id(const std::string& unique_id) { unique_id_ = unique_id; } | |
| 157 | |
| 158 private: | |
| 159 // This allows NetworkDeviceParser and its subclasses access to | |
| 160 // device privates so that they can be reconstituted during parsing. | |
| 161 // The parsers only access things through the private set_ functions | |
| 162 // so that this class can evolve without having to change all the | |
| 163 // parsers. | |
| 164 friend class NativeNetworkDeviceParser; | |
| 165 | |
| 166 // This allows the implementation classes access to privates. | |
| 167 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 168 | |
| 169 // Use these functions at your peril. They are used by the various | |
| 170 // parsers to set state, and really shouldn't be used by anyone | |
| 171 // else. | |
| 172 void set_device_path(const std::string& device_path) { | |
| 173 device_path_ = device_path; | |
| 174 } | |
| 175 void set_name(const std::string& name) { name_ = name; } | |
| 176 void set_type(ConnectionType type) { type_ = type; } | |
| 177 void set_scanning(bool scanning) { scanning_ = scanning; } | |
| 178 void set_meid(const std::string& meid) { meid_ = meid; } | |
| 179 void set_iccid(const std::string& iccid) { iccid_ = iccid; } | |
| 180 void set_imei(const std::string& imei) { imei_ = imei; } | |
| 181 void set_imsi(const std::string& imsi) { imsi_ = imsi; } | |
| 182 void set_esn(const std::string& esn) { esn_ = esn; } | |
| 183 void set_mdn(const std::string& mdn) { mdn_ = mdn; } | |
| 184 void set_min(const std::string& min) { min_ = min; } | |
| 185 void set_technology_family(TechnologyFamily technology_family) { | |
| 186 technology_family_ = technology_family; | |
| 187 } | |
| 188 void set_carrier(const std::string& carrier) { carrier_ = carrier; } | |
| 189 void set_supported_carriers(const base::ListValue& supported_carriers) { | |
| 190 supported_carriers_.reset(supported_carriers.DeepCopy()); | |
| 191 } | |
| 192 void set_home_provider_code(const std::string& home_provider_code) { | |
| 193 home_provider_code_ = home_provider_code; | |
| 194 } | |
| 195 void set_home_provider_country(const std::string& home_provider_country) { | |
| 196 home_provider_country_ = home_provider_country; | |
| 197 } | |
| 198 void set_home_provider_id(const std::string& home_provider_id) { | |
| 199 home_provider_id_ = home_provider_id; | |
| 200 } | |
| 201 void set_home_provider_name(const std::string& home_provider_name) { | |
| 202 home_provider_name_ = home_provider_name; | |
| 203 } | |
| 204 void set_provider_requires_roaming(bool provider_requires_roaming) { | |
| 205 provider_requires_roaming_ = provider_requires_roaming; | |
| 206 } | |
| 207 void set_model_id(const std::string& model_id) { model_id_ = model_id; } | |
| 208 void set_manufacturer(const std::string& manufacturer) { | |
| 209 manufacturer_ = manufacturer; | |
| 210 } | |
| 211 void set_prl_version(int prl_version) { | |
| 212 prl_version_ = prl_version; | |
| 213 } | |
| 214 void set_sim_lock_state(SimLockState sim_lock_state) { | |
| 215 sim_lock_state_ = sim_lock_state; | |
| 216 } | |
| 217 void set_sim_retries_left(int sim_retries_left) { | |
| 218 sim_retries_left_ = sim_retries_left; | |
| 219 } | |
| 220 void set_sim_pin_required(SimPinRequire sim_pin_required) { | |
| 221 sim_pin_required_ = sim_pin_required; | |
| 222 } | |
| 223 void set_sim_present(bool sim_present) { | |
| 224 sim_present_ = sim_present; | |
| 225 } | |
| 226 void set_powered(bool powered) { | |
| 227 powered_ = powered; | |
| 228 } | |
| 229 void set_firmware_revision(const std::string& firmware_revision) { | |
| 230 firmware_revision_ = firmware_revision; | |
| 231 } | |
| 232 void set_hardware_revision(const std::string& hardware_revision) { | |
| 233 hardware_revision_ = hardware_revision; | |
| 234 } | |
| 235 void set_selected_cellular_network( | |
| 236 const std::string& selected_cellular_network) { | |
| 237 selected_cellular_network_ = selected_cellular_network; | |
| 238 } | |
| 239 void set_found_cellular_networks( | |
| 240 const CellularNetworkList& found_cellular_networks) { | |
| 241 found_cellular_networks_ = found_cellular_networks; | |
| 242 } | |
| 243 void set_data_roaming_allowed(bool data_roaming_allowed) { | |
| 244 data_roaming_allowed_ = data_roaming_allowed; | |
| 245 } | |
| 246 void set_support_network_scan(bool support_network_scan) { | |
| 247 support_network_scan_ = support_network_scan; | |
| 248 } | |
| 249 void set_provider_apn_list(const CellularApnList& provider_apn_list) { | |
| 250 provider_apn_list_ = provider_apn_list; | |
| 251 } | |
| 252 | |
| 253 void ParseInfo(const base::DictionaryValue& info); | |
| 254 | |
| 255 // General device info. | |
| 256 std::string device_path_; | |
| 257 std::string name_; | |
| 258 std::string unique_id_; | |
| 259 ConnectionType type_; | |
| 260 bool scanning_; | |
| 261 // Cellular specific device info. | |
| 262 TechnologyFamily technology_family_; | |
| 263 std::string carrier_; | |
| 264 scoped_ptr<base::ListValue> supported_carriers_; | |
| 265 std::string home_provider_code_; | |
| 266 std::string home_provider_country_; | |
| 267 std::string home_provider_id_; | |
| 268 std::string home_provider_name_; | |
| 269 bool provider_requires_roaming_; | |
| 270 std::string meid_; | |
| 271 std::string imei_; | |
| 272 std::string iccid_; | |
| 273 std::string imsi_; | |
| 274 std::string esn_; | |
| 275 std::string mdn_; | |
| 276 std::string min_; | |
| 277 std::string model_id_; | |
| 278 std::string manufacturer_; | |
| 279 SimLockState sim_lock_state_; | |
| 280 int sim_retries_left_; | |
| 281 SimPinRequire sim_pin_required_; | |
| 282 bool sim_present_; | |
| 283 bool powered_; | |
| 284 std::string firmware_revision_; | |
| 285 std::string hardware_revision_; | |
| 286 int prl_version_; | |
| 287 std::string selected_cellular_network_; | |
| 288 CellularNetworkList found_cellular_networks_; | |
| 289 bool data_roaming_allowed_; | |
| 290 bool support_network_scan_; | |
| 291 CellularApnList provider_apn_list_; | |
| 292 | |
| 293 // This is the parser we use to parse messages from the native | |
| 294 // network layer. | |
| 295 scoped_ptr<NetworkDeviceParser> device_parser_; | |
| 296 | |
| 297 DISALLOW_COPY_AND_ASSIGN(NetworkDevice); | |
| 298 }; | |
| 299 | |
| 300 // Contains data common to all network service types. | |
| 301 class Network { | |
| 302 public: | |
| 303 virtual ~Network(); | |
| 304 | |
| 305 // Test API for accessing setters in tests. | |
| 306 class TestApi { | |
| 307 public: | |
| 308 explicit TestApi(Network* network) : network_(network) {} | |
| 309 void SetConnected() { | |
| 310 network_->set_connected(); | |
| 311 } | |
| 312 void SetConnecting() { | |
| 313 network_->set_connecting(); | |
| 314 } | |
| 315 void SetDisconnected() { | |
| 316 network_->set_disconnected(); | |
| 317 } | |
| 318 void SetUserConnectState(UserConnectState user_connect_state) { | |
| 319 network_->set_user_connect_state(user_connect_state); | |
| 320 } | |
| 321 | |
| 322 private: | |
| 323 Network* network_; | |
| 324 }; | |
| 325 friend class TestApi; | |
| 326 | |
| 327 const std::string& service_path() const { return service_path_; } | |
| 328 const std::string& name() const { return name_; } | |
| 329 const std::string& device_path() const { return device_path_; } | |
| 330 const std::string& ip_address() const { return ip_address_; } | |
| 331 ConnectionType type() const { return type_; } | |
| 332 ConnectionState connection_state() const { return state_; } | |
| 333 bool connecting() const { return IsConnectingState(state_); } | |
| 334 bool configuring() const { return state_ == STATE_CONFIGURATION; } | |
| 335 bool connected() const { return IsConnectedState(state_); } | |
| 336 bool connecting_or_connected() const { return connecting() || connected(); } | |
| 337 // True when a user-initiated connection attempt is in progress | |
| 338 bool connection_started() const { | |
| 339 return user_connect_state_ == USER_CONNECT_STARTED; | |
| 340 } | |
| 341 UserConnectState user_connect_state() const { return user_connect_state_; } | |
| 342 bool failed() const { return state_ == STATE_FAILURE; } | |
| 343 bool disconnected() const { return IsDisconnectedState(state_); } | |
| 344 bool online() const { return state_ == STATE_ONLINE; } | |
| 345 bool restricted_pool() const { return state_ == STATE_PORTAL; } | |
| 346 ConnectionError error() const { return error_; } | |
| 347 ConnectionState state() const { return state_; } | |
| 348 // Is this network connectable. Currently, this is mainly used by 802.1x | |
| 349 // networks to specify that the network is not configured yet. | |
| 350 bool connectable() const { return connectable_; } | |
| 351 // Is this the active network, i.e, the one through which | |
| 352 // network traffic is being routed? A network can be connected, | |
| 353 // but not be carrying traffic. | |
| 354 bool is_active() const { return is_active_; } | |
| 355 bool preferred() const { return priority_ != kPriorityNotSet; } | |
| 356 bool auto_connect() const { return auto_connect_; } | |
| 357 bool save_credentials() const { return save_credentials_; } | |
| 358 | |
| 359 bool added() const { return added_; } | |
| 360 bool notify_failure() const { return notify_failure_; } | |
| 361 const std::string& profile_path() const { return profile_path_; } | |
| 362 NetworkProfileType profile_type() const { return profile_type_; } | |
| 363 | |
| 364 const std::string& unique_id() const { return unique_id_; } | |
| 365 int priority_order() const { return priority_order_; } | |
| 366 | |
| 367 const NetworkUIData& ui_data() const { return ui_data_; } | |
| 368 | |
| 369 void set_notify_failure(bool state) { notify_failure_ = state; } | |
| 370 | |
| 371 void SetPreferred(bool preferred); | |
| 372 | |
| 373 void SetAutoConnect(bool auto_connect); | |
| 374 | |
| 375 void SetName(const std::string& name); | |
| 376 | |
| 377 void SetSaveCredentials(bool save_credentials); | |
| 378 | |
| 379 void ClearUIData(); | |
| 380 | |
| 381 // This will resolve any automatic configuration that has to occur | |
| 382 // (provisioning certificates, etc.) before attempting to connect to the | |
| 383 // network. When configuration is complete, calls the closure to finish the | |
| 384 // connection or show the config dialog to collect user-supplied info. | |
| 385 virtual void AttemptConnection(const base::Closure& connect); | |
| 386 | |
| 387 // Return a string representation of the state code. | |
| 388 std::string GetStateString() const; | |
| 389 | |
| 390 // Return a string representation of the error code. | |
| 391 std::string GetErrorString() const; | |
| 392 | |
| 393 // Return true if the network must be in the user profile (e.g. has certs). | |
| 394 virtual bool RequiresUserProfile() const; | |
| 395 | |
| 396 // Copy any credentials from a remembered network that are unset in |this|. | |
| 397 virtual void CopyCredentialsFromRemembered(Network* remembered); | |
| 398 | |
| 399 // Static helper functions. | |
| 400 static bool IsConnectedState(ConnectionState state) { | |
| 401 return (state == STATE_READY || | |
| 402 state == STATE_ONLINE || | |
| 403 state == STATE_PORTAL); | |
| 404 } | |
| 405 static bool IsConnectingState(ConnectionState state) { | |
| 406 return (state == STATE_CONNECT_REQUESTED || | |
| 407 state == STATE_ASSOCIATION || | |
| 408 state == STATE_CONFIGURATION || | |
| 409 state == STATE_CARRIER); | |
| 410 } | |
| 411 static bool IsDisconnectedState(ConnectionState state) { | |
| 412 return (state == STATE_UNKNOWN || | |
| 413 state == STATE_IDLE || | |
| 414 state == STATE_DISCONNECT || | |
| 415 state == STATE_FAILURE || | |
| 416 state == STATE_ACTIVATION_FAILURE); | |
| 417 } | |
| 418 | |
| 419 // Adopts the given enrollment handler to handle any certificate enrollment | |
| 420 // URIs encountered during network connection. | |
| 421 void SetEnrollmentDelegate(EnrollmentDelegate* delegate); | |
| 422 | |
| 423 virtual bool UpdateStatus(const std::string& key, | |
| 424 const base::Value& value, | |
| 425 PropertyIndex* index); | |
| 426 | |
| 427 // Creates a Network object for the given type for testing. | |
| 428 static Network* CreateForTesting(ConnectionType type); | |
| 429 | |
| 430 protected: | |
| 431 Network(const std::string& service_path, | |
| 432 ConnectionType type); | |
| 433 | |
| 434 NetworkParser* network_parser() { return network_parser_.get(); } | |
| 435 void SetNetworkParser(NetworkParser* parser); | |
| 436 | |
| 437 // Set the state and update flags if necessary. | |
| 438 void SetState(ConnectionState state); | |
| 439 | |
| 440 // Set the error state and update notify_failure_ | |
| 441 void SetError(ConnectionError error); | |
| 442 | |
| 443 // Parse name/value pairs from libcros. | |
| 444 virtual void ParseInfo(const base::DictionaryValue& info); | |
| 445 | |
| 446 // Erase cached credentials, used when "Save password" is unchecked. | |
| 447 virtual void EraseCredentials(); | |
| 448 | |
| 449 // Calculate a unique identifier for the network. | |
| 450 virtual void CalculateUniqueId(); | |
| 451 | |
| 452 // Methods to asynchronously set network service properties | |
| 453 virtual void SetStringProperty(const char* prop, const std::string& str, | |
| 454 std::string* dest); | |
| 455 virtual void SetBooleanProperty(const char* prop, bool b, bool* dest); | |
| 456 virtual void SetIntegerProperty(const char* prop, int i, int* dest); | |
| 457 virtual void SetValueProperty(const char* prop, const base::Value& val); | |
| 458 virtual void ClearProperty(const char* prop); | |
| 459 | |
| 460 // This will clear the property if string is empty. Otherwise, it will set it. | |
| 461 virtual void SetOrClearStringProperty(const char* prop, | |
| 462 const std::string& str, | |
| 463 std::string* dest); | |
| 464 | |
| 465 void set_unique_id(const std::string& unique_id) { unique_id_ = unique_id; } | |
| 466 const CertificatePattern& client_cert_pattern() const { | |
| 467 return ui_data_.certificate_pattern(); | |
| 468 } | |
| 469 | |
| 470 ClientCertType client_cert_type() const { | |
| 471 return ui_data_.certificate_type(); | |
| 472 } | |
| 473 | |
| 474 EnrollmentDelegate* enrollment_delegate() const { | |
| 475 return enrollment_delegate_.get(); | |
| 476 } | |
| 477 | |
| 478 private: | |
| 479 // This allows NetworkParser and its subclasses access to device | |
| 480 // privates so that they can be reconstituted during parsing. The | |
| 481 // parsers only access things through the private set_ functions so | |
| 482 // that this class can evolve without having to change all the | |
| 483 // parsers. | |
| 484 friend class NetworkParser; | |
| 485 friend class NativeNetworkParser; | |
| 486 friend class NativeVirtualNetworkParser; | |
| 487 // We reach directly into the network for testing purposes. | |
| 488 friend class MobileActivatorTest; | |
| 489 // This allows the implementation classes access to privates. | |
| 490 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 491 | |
| 492 // Use these functions at your peril. They are used by the various | |
| 493 // parsers to set state, and really shouldn't be used by anything else | |
| 494 // because they don't do the error checking and sending to the | |
| 495 // network layer that the other setters do. | |
| 496 void set_device_path(const std::string& device_path) { | |
| 497 device_path_ = device_path; | |
| 498 } | |
| 499 void set_name(const std::string& name) { name_ = name; } | |
| 500 void set_connecting(); | |
| 501 void set_behind_portal() { | |
| 502 state_ = STATE_PORTAL; | |
| 503 } | |
| 504 void set_connected() { | |
| 505 state_ = STATE_ONLINE; | |
| 506 } | |
| 507 void set_disconnected() { | |
| 508 state_ = STATE_IDLE; | |
| 509 } | |
| 510 void set_connectable(bool connectable) { connectable_ = connectable; } | |
| 511 void set_user_connect_state(UserConnectState user_connect_state) { | |
| 512 user_connect_state_ = user_connect_state; | |
| 513 } | |
| 514 void set_is_active(bool is_active) { is_active_ = is_active; } | |
| 515 void set_added(bool added) { added_ = added; } | |
| 516 void set_auto_connect(bool auto_connect) { auto_connect_ = auto_connect; } | |
| 517 void set_save_credentials(bool save_credentials) { | |
| 518 save_credentials_ = save_credentials; | |
| 519 } | |
| 520 void set_profile_path(const std::string& path) { profile_path_ = path; } | |
| 521 void set_profile_type(NetworkProfileType type) { profile_type_ = type; } | |
| 522 void set_ui_data(const NetworkUIData& ui_data) { | |
| 523 ui_data_ = ui_data; | |
| 524 } | |
| 525 void set_client_cert_pattern(const CertificatePattern& pattern) { | |
| 526 ui_data_.set_certificate_pattern(pattern); | |
| 527 } | |
| 528 void set_client_cert_type(ClientCertType type) { | |
| 529 ui_data_.set_certificate_type(type); | |
| 530 } | |
| 531 | |
| 532 // Set the profile path and update the flimflam property. | |
| 533 void SetProfilePath(const std::string& profile_path); | |
| 534 | |
| 535 // Trigger an asynchronous initialization the IP address field. | |
| 536 void InitIPAddress(); | |
| 537 | |
| 538 // Initialize the IP address field. | |
| 539 static void InitIPAddressCallback( | |
| 540 const std::string& service_path, | |
| 541 const NetworkIPConfigVector& ip_configs, | |
| 542 const std::string& hardware_address); | |
| 543 | |
| 544 std::string device_path_; | |
| 545 std::string name_; | |
| 546 std::string ip_address_; | |
| 547 ConnectionState state_; | |
| 548 ConnectionError error_; | |
| 549 bool connectable_; | |
| 550 UserConnectState user_connect_state_; | |
| 551 bool is_active_; | |
| 552 int priority_; // determines order in network list. | |
| 553 bool auto_connect_; | |
| 554 bool save_credentials_; // save passphrase and EAP credentials to disk. | |
| 555 scoped_ptr<EnrollmentDelegate> enrollment_delegate_; | |
| 556 | |
| 557 // Unique identifier, set the first time the network is parsed. | |
| 558 std::string unique_id_; | |
| 559 | |
| 560 // Priority value, corresponds to index in list from shill (0 = first) | |
| 561 int priority_order_; | |
| 562 | |
| 563 // Set to true if the UI requested this as a new network. | |
| 564 bool added_; | |
| 565 | |
| 566 // Set to true when a new connection failure occurs; cleared when observers | |
| 567 // are notified. | |
| 568 bool notify_failure_; | |
| 569 | |
| 570 // Profile path for networks. | |
| 571 std::string profile_path_; | |
| 572 | |
| 573 // Set to profile type based on profile_path_. | |
| 574 NetworkProfileType profile_type_; | |
| 575 | |
| 576 // These must not be modified after construction. | |
| 577 std::string service_path_; | |
| 578 ConnectionType type_; | |
| 579 | |
| 580 // UI-level state that is opaque to the connection manager. The value is | |
| 581 // stored in JSON-serialized from in the connection manager. | |
| 582 NetworkUIData ui_data_; | |
| 583 | |
| 584 // This is the parser we use to parse messages from the native | |
| 585 // network layer. | |
| 586 scoped_ptr<NetworkParser> network_parser_; | |
| 587 | |
| 588 DISALLOW_COPY_AND_ASSIGN(Network); | |
| 589 }; | |
| 590 | |
| 591 // Class for networks of TYPE_ETHERNET. | |
| 592 class EthernetNetwork : public Network { | |
| 593 public: | |
| 594 explicit EthernetNetwork(const std::string& service_path); | |
| 595 private: | |
| 596 // This allows the implementation classes access to privates. | |
| 597 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 598 | |
| 599 DISALLOW_COPY_AND_ASSIGN(EthernetNetwork); | |
| 600 }; | |
| 601 | |
| 602 // Class for networks of TYPE_VPN. | |
| 603 class VirtualNetwork : public Network { | |
| 604 public: | |
| 605 explicit VirtualNetwork(const std::string& service_path); | |
| 606 virtual ~VirtualNetwork(); | |
| 607 | |
| 608 const std::string& server_hostname() const { return server_hostname_; } | |
| 609 ProviderType provider_type() const { return provider_type_; } | |
| 610 const std::string& ca_cert_pem() const { return ca_cert_pem_; } | |
| 611 const std::string& psk_passphrase() const { return psk_passphrase_; } | |
| 612 const std::string& client_cert_id() const { return client_cert_id_; } | |
| 613 const std::string& username() const { return username_; } | |
| 614 const std::string& user_passphrase() const { return user_passphrase_; } | |
| 615 const std::string& group_name() const { return group_name_; } | |
| 616 | |
| 617 // Sets the well-known PKCS#11 slot and PIN for accessing certificates. | |
| 618 void SetCertificateSlotAndPin( | |
| 619 const std::string& slot, const std::string& pin); | |
| 620 | |
| 621 // Network overrides. | |
| 622 virtual bool RequiresUserProfile() const OVERRIDE; | |
| 623 virtual void CopyCredentialsFromRemembered(Network* remembered) OVERRIDE; | |
| 624 virtual void AttemptConnection(const base::Closure& connect) OVERRIDE; | |
| 625 | |
| 626 // Public getters. | |
| 627 bool NeedMoreInfoToConnect() const; | |
| 628 std::string GetProviderTypeString() const; | |
| 629 // Returns true if a PSK passphrase is required to connect. | |
| 630 bool IsPSKPassphraseRequired() const; | |
| 631 // Returns true if a user passphrase is required to connect. | |
| 632 bool IsUserPassphraseRequired() const; | |
| 633 | |
| 634 // Public setters. | |
| 635 void SetCACertPEM(const std::string& ca_cert_pem); | |
| 636 void SetL2TPIPsecPSKCredentials(const std::string& psk_passphrase, | |
| 637 const std::string& username, | |
| 638 const std::string& user_passphrase, | |
| 639 const std::string& group_name); | |
| 640 void SetL2TPIPsecCertCredentials(const std::string& client_cert_id, | |
| 641 const std::string& username, | |
| 642 const std::string& user_passphrase, | |
| 643 const std::string& group_name); | |
| 644 void SetOpenVPNCredentials(const std::string& client_cert_id, | |
| 645 const std::string& username, | |
| 646 const std::string& user_passphrase, | |
| 647 const std::string& otp); | |
| 648 void SetServerHostname(const std::string& server_hostname); | |
| 649 | |
| 650 private: | |
| 651 // This allows NetworkParser and its subclasses access to | |
| 652 // device privates so that they can be reconstituted during parsing. | |
| 653 // The parsers only access things through the private set_ functions | |
| 654 // so that this class can evolve without having to change all the | |
| 655 // parsers. | |
| 656 friend class NativeNetworkParser; | |
| 657 friend class NativeVirtualNetworkParser; | |
| 658 | |
| 659 // This allows the implementation classes access to privates. | |
| 660 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 661 | |
| 662 // Use these functions at your peril. They are used by the various | |
| 663 // parsers to set state, and really shouldn't be used by anything else | |
| 664 // because they don't do the error checking and sending to the | |
| 665 // network layer that the other setters do. | |
| 666 void set_server_hostname(const std::string& server_hostname) { | |
| 667 server_hostname_ = server_hostname; | |
| 668 } | |
| 669 void set_provider_type(ProviderType provider_type) { | |
| 670 provider_type_ = provider_type; | |
| 671 } | |
| 672 void set_ca_cert_pem(const std::string& ca_cert_pem) { | |
| 673 ca_cert_pem_ = ca_cert_pem; | |
| 674 } | |
| 675 void set_psk_passphrase(const std::string& psk_passphrase) { | |
| 676 psk_passphrase_ = psk_passphrase; | |
| 677 } | |
| 678 void set_psk_passphrase_required(bool psk_passphrase_required) { | |
| 679 psk_passphrase_required_ = psk_passphrase_required; | |
| 680 } | |
| 681 void set_client_cert_id(const std::string& client_cert_id) { | |
| 682 client_cert_id_ = client_cert_id; | |
| 683 } | |
| 684 void set_username(const std::string& username) { username_ = username; } | |
| 685 void set_user_passphrase(const std::string& user_passphrase) { | |
| 686 user_passphrase_ = user_passphrase; | |
| 687 } | |
| 688 void set_user_passphrase_required(bool user_passphrase_required) { | |
| 689 user_passphrase_required_ = user_passphrase_required; | |
| 690 } | |
| 691 void set_group_name(const std::string& group_name) { | |
| 692 group_name_ = group_name; | |
| 693 } | |
| 694 | |
| 695 // Matches the client certificate pattern by checking to see if a certificate | |
| 696 // exists that meets the pattern criteria. If it finds one, it sets the | |
| 697 // appropriate network property. If not, it passes |connect| to the | |
| 698 // EnrollmentDelegate to do something with the enrollment URI (e.g. launch a | |
| 699 // dialog) to install the certificate, and then invoke |connect|. If | |
| 700 // |allow_enroll| is false, then the enrollment handler will not be invoked in | |
| 701 // the case of a missing certificate. | |
| 702 void MatchCertificatePattern(bool allow_enroll, const base::Closure& connect); | |
| 703 | |
| 704 // Network overrides. | |
| 705 virtual void EraseCredentials() OVERRIDE; | |
| 706 virtual void CalculateUniqueId() OVERRIDE; | |
| 707 | |
| 708 std::string server_hostname_; | |
| 709 ProviderType provider_type_; | |
| 710 std::string ca_cert_pem_; | |
| 711 std::string psk_passphrase_; | |
| 712 bool psk_passphrase_required_; | |
| 713 // PKCS#11 ID for client certificate. | |
| 714 std::string client_cert_id_; | |
| 715 std::string username_; | |
| 716 std::string user_passphrase_; | |
| 717 bool user_passphrase_required_; | |
| 718 std::string group_name_; | |
| 719 | |
| 720 // Weak pointer factory for wrapping pointers to this network in callbacks. | |
| 721 base::WeakPtrFactory<VirtualNetwork> weak_pointer_factory_; | |
| 722 | |
| 723 DISALLOW_COPY_AND_ASSIGN(VirtualNetwork); | |
| 724 }; | |
| 725 typedef std::vector<VirtualNetwork*> VirtualNetworkVector; | |
| 726 | |
| 727 // Base class for networks of TYPE_WIFI or TYPE_CELLULAR. | |
| 728 class WirelessNetwork : public Network { | |
| 729 public: | |
| 730 // Test API for accessing setters in tests. | |
| 731 class TestApi { | |
| 732 public: | |
| 733 explicit TestApi(WirelessNetwork* network) : network_(network) {} | |
| 734 void SetStrength(int strength) { network_->set_strength(strength); } | |
| 735 private: | |
| 736 WirelessNetwork* network_; | |
| 737 }; | |
| 738 friend class TestApi; | |
| 739 | |
| 740 int strength() const { return strength_; } | |
| 741 | |
| 742 protected: | |
| 743 WirelessNetwork(const std::string& service_path, | |
| 744 ConnectionType type) | |
| 745 : Network(service_path, type), strength_(0) {} | |
| 746 | |
| 747 private: | |
| 748 // This allows NativeWirelessNetworkParser access to device privates | |
| 749 // so that they can be reconstituted during parsing. The parsers | |
| 750 // only access things through the private set_ functions so that | |
| 751 // this class can evolve without having to change all the parsers. | |
| 752 friend class NativeWirelessNetworkParser; | |
| 753 | |
| 754 // This allows the implementation classes access to privates. | |
| 755 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 756 | |
| 757 // The friend parsers use this. | |
| 758 void set_strength(int strength) { strength_ = strength; } | |
| 759 | |
| 760 int strength_; // 0-100 | |
| 761 | |
| 762 DISALLOW_COPY_AND_ASSIGN(WirelessNetwork); | |
| 763 }; | |
| 764 | |
| 765 // Class for networks of TYPE_CELLULAR. | |
| 766 class CellularNetwork : public WirelessNetwork { | |
| 767 public: | |
| 768 // Test API for accessing setters in tests. | |
| 769 class TestApi { | |
| 770 public: | |
| 771 explicit TestApi(CellularNetwork* network) : network_(network) {} | |
| 772 void SetRoamingState(NetworkRoamingState roaming_state) { | |
| 773 network_->set_roaming_state(roaming_state); | |
| 774 } | |
| 775 private: | |
| 776 CellularNetwork* network_; | |
| 777 }; | |
| 778 friend class TestApi; | |
| 779 | |
| 780 explicit CellularNetwork(const std::string& service_path); | |
| 781 virtual ~CellularNetwork(); | |
| 782 | |
| 783 // Starts device activation process. Returns false if the device state does | |
| 784 // not permit activation. | |
| 785 virtual bool StartActivation(); | |
| 786 virtual void CompleteActivation(); | |
| 787 | |
| 788 bool activate_over_non_cellular_network() const { | |
| 789 return activate_over_non_cellular_network_; | |
| 790 } | |
| 791 const ActivationState activation_state() const { return activation_state_; } | |
| 792 bool activated() const { | |
| 793 return activation_state() == ACTIVATION_STATE_ACTIVATED; | |
| 794 } | |
| 795 const NetworkTechnology network_technology() const { | |
| 796 return network_technology_; | |
| 797 } | |
| 798 const NetworkRoamingState roaming_state() const { return roaming_state_; } | |
| 799 const std::string& operator_name() const { return operator_name_; } | |
| 800 const std::string& operator_code() const { return operator_code_; } | |
| 801 const std::string& operator_country() const { return operator_country_; } | |
| 802 bool out_of_credits() const { return out_of_credits_; } | |
| 803 const std::string& payment_url() const { return payment_url_; } | |
| 804 const std::string& usage_url() const { return usage_url_; } | |
| 805 const std::string& post_data() const { return post_data_; } | |
| 806 const bool using_post() const { return using_post_; } | |
| 807 const CellularApn& apn() const { return apn_; } | |
| 808 const CellularApn& last_good_apn() const { return last_good_apn_; } | |
| 809 | |
| 810 // Sets the APN to use in establishing data connections. Only | |
| 811 // the fields of the APN that are needed for making connections | |
| 812 // are passed to shill. The name, localized_name, and language | |
| 813 // fields are ignored. | |
| 814 void SetApn(const CellularApn& apn); | |
| 815 | |
| 816 // Returns true if network supports activation. | |
| 817 bool SupportsActivation() const; | |
| 818 | |
| 819 // Returns whether the network needs to be activated. | |
| 820 bool NeedsActivation() const; | |
| 821 | |
| 822 // Return a string representation of network technology. | |
| 823 std::string GetNetworkTechnologyString() const; | |
| 824 // Return a string representation of activation state. | |
| 825 std::string GetActivationStateString() const; | |
| 826 // Return a string representation of roaming state. | |
| 827 std::string GetRoamingStateString() const; | |
| 828 | |
| 829 // Return a string representation of |activation_state|. | |
| 830 static std::string ActivationStateToString(ActivationState activation_state); | |
| 831 | |
| 832 private: | |
| 833 // This allows NativeCellularNetworkParser access to device privates | |
| 834 // so that they can be reconstituted during parsing. The parsers | |
| 835 // only access things through the private set_ functions so that | |
| 836 // this class can evolve without having to change all the parsers. | |
| 837 friend class NativeCellularNetworkParser; | |
| 838 // We reach directly into the network for testing purposes. | |
| 839 friend class MobileActivatorTest; | |
| 840 | |
| 841 // This allows the implementation classes access to privates. | |
| 842 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 843 | |
| 844 // Use these functions at your peril. They are used by the various | |
| 845 // parsers to set state, and really shouldn't be used by anything else | |
| 846 // because they don't do the error checking and sending to the | |
| 847 // network layer that the other setters do. | |
| 848 void set_activate_over_non_cellular_network(bool value) { | |
| 849 activate_over_non_cellular_network_ = value; | |
| 850 } | |
| 851 void set_activation_state(ActivationState activation_state) { | |
| 852 activation_state_ = activation_state; | |
| 853 } | |
| 854 void set_network_technology(NetworkTechnology network_technology) { | |
| 855 network_technology_ = network_technology; | |
| 856 } | |
| 857 void set_roaming_state(NetworkRoamingState roaming_state) { | |
| 858 roaming_state_ = roaming_state; | |
| 859 } | |
| 860 void set_operator_name(const std::string& operator_name) { | |
| 861 operator_name_ = operator_name; | |
| 862 } | |
| 863 void set_operator_code(const std::string& operator_code) { | |
| 864 operator_code_ = operator_code; | |
| 865 } | |
| 866 void set_operator_country(const std::string& operator_country) { | |
| 867 operator_country_ = operator_country; | |
| 868 } | |
| 869 void set_out_of_credits(bool out_of_credits) { | |
| 870 out_of_credits_ = out_of_credits; | |
| 871 } | |
| 872 void set_payment_url(const std::string& payment_url) { | |
| 873 payment_url_ = payment_url; | |
| 874 } | |
| 875 void set_post_data(const std::string& post_data) { | |
| 876 post_data_ = post_data; | |
| 877 } | |
| 878 void set_using_post(bool using_post) { | |
| 879 using_post_ = using_post; | |
| 880 } | |
| 881 void set_usage_url(const std::string& usage_url) { usage_url_ = usage_url; } | |
| 882 void set_apn(const base::DictionaryValue& apn) { apn_.Set(apn); } | |
| 883 void set_last_good_apn(const base::DictionaryValue& last_good_apn) { | |
| 884 last_good_apn_.Set(last_good_apn); | |
| 885 } | |
| 886 | |
| 887 bool activate_over_non_cellular_network_; | |
| 888 bool out_of_credits_; | |
| 889 ActivationState activation_state_; | |
| 890 NetworkTechnology network_technology_; | |
| 891 NetworkRoamingState roaming_state_; | |
| 892 // Carrier Info | |
| 893 std::string operator_name_; | |
| 894 std::string operator_code_; | |
| 895 std::string operator_country_; | |
| 896 std::string payment_url_; | |
| 897 std::string usage_url_; | |
| 898 std::string post_data_; | |
| 899 bool using_post_; | |
| 900 // Cached values | |
| 901 CellularApn apn_; | |
| 902 CellularApn last_good_apn_; | |
| 903 | |
| 904 DISALLOW_COPY_AND_ASSIGN(CellularNetwork); | |
| 905 }; | |
| 906 typedef std::vector<CellularNetwork*> CellularNetworkVector; | |
| 907 | |
| 908 // Class for networks of TYPE_WIFI. | |
| 909 class WifiNetwork : public WirelessNetwork { | |
| 910 public: | |
| 911 // Test API for accessing setters in tests. | |
| 912 class TestApi { | |
| 913 public: | |
| 914 explicit TestApi(WifiNetwork* network) : network_(network) {} | |
| 915 void SetEncryption(ConnectionSecurity encryption) { | |
| 916 network_->set_encryption(encryption); | |
| 917 } | |
| 918 void SetSsid(const std::string& ssid) { | |
| 919 network_->SetSsid(ssid); | |
| 920 } | |
| 921 void SetHexSsid(const std::string& ssid_hex) { | |
| 922 network_->SetHexSsid(ssid_hex); | |
| 923 } | |
| 924 private: | |
| 925 WifiNetwork* network_; | |
| 926 }; | |
| 927 friend class TestApi; | |
| 928 | |
| 929 explicit WifiNetwork(const std::string& service_path); | |
| 930 virtual ~WifiNetwork(); | |
| 931 | |
| 932 bool encrypted() const { return encryption_ != SECURITY_NONE; } | |
| 933 ConnectionSecurity encryption() const { return encryption_; } | |
| 934 const std::string& passphrase() const { return passphrase_; } | |
| 935 const std::string& identity() const { return identity_; } | |
| 936 bool passphrase_required() const { return passphrase_required_; } | |
| 937 bool hidden_ssid() const { return hidden_ssid_; } | |
| 938 const std::string& bssid() const { return bssid_; } | |
| 939 int frequency() const { return frequency_; } | |
| 940 | |
| 941 EAPMethod eap_method() const { return eap_method_; } | |
| 942 EAPPhase2Auth eap_phase_2_auth() const { return eap_phase_2_auth_; } | |
| 943 const std::string& eap_server_ca_cert_pem() const { | |
| 944 return eap_server_ca_cert_pem_; } | |
| 945 const std::string& eap_client_cert_pkcs11_id() const { | |
| 946 return eap_client_cert_pkcs11_id_; } | |
| 947 const bool eap_use_system_cas() const { return eap_use_system_cas_; } | |
| 948 const std::string& eap_identity() const { return eap_identity_; } | |
| 949 const std::string& eap_anonymous_identity() const { | |
| 950 return eap_anonymous_identity_; | |
| 951 } | |
| 952 const std::string& eap_passphrase() const { return eap_passphrase_; } | |
| 953 const bool eap_save_credentials() const { return eap_save_credentials_; } | |
| 954 | |
| 955 const std::string& GetPassphrase() const; | |
| 956 | |
| 957 // Set property and call SetNetworkServiceProperty: | |
| 958 | |
| 959 void SetPassphrase(const std::string& passphrase); | |
| 960 | |
| 961 // 802.1x properties | |
| 962 void SetEAPMethod(EAPMethod method); | |
| 963 void SetEAPPhase2Auth(EAPPhase2Auth auth); | |
| 964 void SetEAPServerCaCertPEM(const std::string& ca_cert_pem); | |
| 965 void SetEAPClientCertPkcs11Id(const std::string& pkcs11_id); | |
| 966 void SetEAPUseSystemCAs(bool use_system_cas); | |
| 967 void SetEAPIdentity(const std::string& identity); | |
| 968 void SetEAPAnonymousIdentity(const std::string& identity); | |
| 969 void SetEAPPassphrase(const std::string& passphrase); | |
| 970 | |
| 971 // Sets the well-known PKCS#11 PIN for accessing certificates. | |
| 972 void SetCertificatePin(const std::string& pin); | |
| 973 | |
| 974 // Network overrides. | |
| 975 virtual bool RequiresUserProfile() const OVERRIDE; | |
| 976 virtual void AttemptConnection(const base::Closure& connect) OVERRIDE; | |
| 977 | |
| 978 // Return a string representation of the encryption code. | |
| 979 // This not translated and should be only used for debugging purposes. | |
| 980 std::string GetEncryptionString() const; | |
| 981 | |
| 982 // Return true if a passphrase or other input is required to connect. | |
| 983 bool IsPassphraseRequired() const; | |
| 984 | |
| 985 protected: | |
| 986 // This allows NativeWifiNetworkParser access to device privates so | |
| 987 // that they can be reconstituted during parsing. The parsers only | |
| 988 // access things through the private set_ functions so that this | |
| 989 // class can evolve without having to change all the parsers. | |
| 990 friend class NativeWifiNetworkParser; | |
| 991 | |
| 992 // This allows the implementation classes access to privates. | |
| 993 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 994 | |
| 995 // Use these functions at your peril. They are used by the various | |
| 996 // parsers to set state, and really shouldn't be used by anything else | |
| 997 // because they don't do the error checking and sending to the | |
| 998 // network layer that the other setters do. | |
| 999 | |
| 1000 bool SetSsid(const std::string& ssid); | |
| 1001 bool SetHexSsid(const std::string& ssid_hex); | |
| 1002 | |
| 1003 void set_encryption(ConnectionSecurity encryption) { | |
| 1004 encryption_ = encryption; | |
| 1005 } | |
| 1006 void set_passphrase(const std::string& passphrase) { | |
| 1007 passphrase_ = passphrase; | |
| 1008 user_passphrase_ = passphrase; | |
| 1009 } | |
| 1010 void set_passphrase_required(bool passphrase_required) { | |
| 1011 passphrase_required_ = passphrase_required; | |
| 1012 } | |
| 1013 void set_identity(const std::string& identity) { | |
| 1014 identity_ = identity; | |
| 1015 } | |
| 1016 void set_hidden_ssid(bool hidden_ssid) { | |
| 1017 hidden_ssid_ = hidden_ssid; | |
| 1018 } | |
| 1019 void set_bssid(const std::string& bssid) { bssid_ = bssid; } | |
| 1020 void set_frequency(int frequency) { frequency_ = frequency; } | |
| 1021 void set_eap_method(EAPMethod eap_method) { eap_method_ = eap_method; } | |
| 1022 void set_eap_phase_2_auth(EAPPhase2Auth eap_phase_2_auth) { | |
| 1023 eap_phase_2_auth_ = eap_phase_2_auth; | |
| 1024 } | |
| 1025 void set_eap_server_ca_cert_pem(const std::string& eap_server_ca_cert_pem) { | |
| 1026 eap_server_ca_cert_pem_ = eap_server_ca_cert_pem; | |
| 1027 } | |
| 1028 void set_eap_client_cert_pkcs11_id( | |
| 1029 const std::string& eap_client_cert_pkcs11_id) { | |
| 1030 eap_client_cert_pkcs11_id_ = eap_client_cert_pkcs11_id; | |
| 1031 } | |
| 1032 void set_eap_use_system_cas(bool eap_use_system_cas) { | |
| 1033 eap_use_system_cas_ = eap_use_system_cas; | |
| 1034 } | |
| 1035 void set_eap_identity(const std::string& eap_identity) { | |
| 1036 eap_identity_ = eap_identity; | |
| 1037 } | |
| 1038 void set_eap_anonymous_identity(const std::string& eap_anonymous_identity) { | |
| 1039 eap_anonymous_identity_ = eap_anonymous_identity; | |
| 1040 } | |
| 1041 void set_eap_passphrase(const std::string& eap_passphrase) { | |
| 1042 eap_passphrase_ = eap_passphrase; | |
| 1043 } | |
| 1044 void set_eap_save_credentials(bool save_credentials) { | |
| 1045 eap_save_credentials_ = save_credentials; | |
| 1046 } | |
| 1047 | |
| 1048 // Matches the client certificate pattern by checking to see if a certificate | |
| 1049 // exists that meets the pattern criteria. If it finds one, it sets the | |
| 1050 // appropriate network property. If not, it passes |connect| to the | |
| 1051 // EnrollmentDelegate to do something with the enrollment URI (e.g. launch a | |
| 1052 // dialog) to install the certificate, and then invoke |connect|. If | |
| 1053 // |allow_enroll| is false, then the enrollment handler will not be invoked in | |
| 1054 // the case of a missing certificate. | |
| 1055 void MatchCertificatePattern(bool allow_enroll, const base::Closure& connect); | |
| 1056 | |
| 1057 // Network overrides. | |
| 1058 virtual void EraseCredentials() OVERRIDE; | |
| 1059 virtual void CalculateUniqueId() OVERRIDE; | |
| 1060 | |
| 1061 ConnectionSecurity encryption_; | |
| 1062 std::string passphrase_; | |
| 1063 bool passphrase_required_; | |
| 1064 std::string identity_; | |
| 1065 bool hidden_ssid_; | |
| 1066 std::string bssid_; | |
| 1067 int frequency_; | |
| 1068 | |
| 1069 EAPMethod eap_method_; | |
| 1070 EAPPhase2Auth eap_phase_2_auth_; | |
| 1071 std::string eap_server_ca_cert_pem_; | |
| 1072 std::string eap_client_cert_pkcs11_id_; | |
| 1073 bool eap_use_system_cas_; | |
| 1074 std::string eap_identity_; | |
| 1075 std::string eap_anonymous_identity_; | |
| 1076 std::string eap_passphrase_; | |
| 1077 bool eap_save_credentials_; | |
| 1078 | |
| 1079 // Internal state (not stored in shill). | |
| 1080 // Passphrase set by user (stored for UI). | |
| 1081 std::string user_passphrase_; | |
| 1082 | |
| 1083 // Weak pointer factory for wrapping pointers to this network in callbacks. | |
| 1084 base::WeakPtrFactory<WifiNetwork> weak_pointer_factory_; | |
| 1085 | |
| 1086 DISALLOW_COPY_AND_ASSIGN(WifiNetwork); | |
| 1087 }; | |
| 1088 | |
| 1089 typedef std::vector<WifiNetwork*> WifiNetworkVector; | |
| 1090 | |
| 1091 | |
| 1092 // Class for networks of TYPE_WIMAX. | |
| 1093 class WimaxNetwork : public WirelessNetwork { | |
| 1094 public: | |
| 1095 explicit WimaxNetwork(const std::string& service_path); | |
| 1096 virtual ~WimaxNetwork(); | |
| 1097 | |
| 1098 bool passphrase_required() const { return passphrase_required_; } | |
| 1099 const std::string& eap_identity() const { return eap_identity_; } | |
| 1100 const std::string& eap_passphrase() const { return eap_passphrase_; } | |
| 1101 | |
| 1102 void SetEAPIdentity(const std::string& identity); | |
| 1103 void SetEAPPassphrase(const std::string& passphrase); | |
| 1104 | |
| 1105 protected: | |
| 1106 // This allows NativeWimaxNetworkParser access to device privates so | |
| 1107 // that they can be reconstituted during parsing. The parsers only | |
| 1108 // access things through the private set_ functions so that this | |
| 1109 // class can evolve without having to change all the parsers. | |
| 1110 friend class NativeWimaxNetworkParser; | |
| 1111 | |
| 1112 // This allows the implementation classes access to privates. | |
| 1113 NETWORK_LIBRARY_IMPL_FRIENDS; | |
| 1114 | |
| 1115 void set_eap_identity(const std::string& identity) { | |
| 1116 eap_identity_ = identity; | |
| 1117 } | |
| 1118 void set_eap_passphrase(const std::string& passphrase) { | |
| 1119 eap_passphrase_ = passphrase; | |
| 1120 } | |
| 1121 void set_passphrase_required(bool passphrase_required) { | |
| 1122 passphrase_required_ = passphrase_required; | |
| 1123 } | |
| 1124 | |
| 1125 // Network overrides. | |
| 1126 virtual void EraseCredentials() OVERRIDE; | |
| 1127 virtual void CalculateUniqueId() OVERRIDE; | |
| 1128 | |
| 1129 bool passphrase_required_; | |
| 1130 std::string eap_identity_; | |
| 1131 std::string eap_passphrase_; | |
| 1132 | |
| 1133 DISALLOW_COPY_AND_ASSIGN(WimaxNetwork); | |
| 1134 }; | |
| 1135 | |
| 1136 typedef std::vector<WimaxNetwork*> WimaxNetworkVector; | |
| 1137 | |
| 1138 // Geolocation data. | |
| 1139 struct CellTower { | |
| 1140 CellTower(); | |
| 1141 | |
| 1142 enum RadioType { | |
| 1143 RADIOTYPE_GSM, | |
| 1144 RADIOTYPE_CDMA, | |
| 1145 RADIOTYPE_WCDMA, | |
| 1146 } radio_type; // GSM/WCDMA CDMA | |
| 1147 int mobile_country_code; // MCC MCC | |
| 1148 int mobile_network_code; // MNC SID | |
| 1149 int location_area_code; // LAC NID | |
| 1150 int cell_id; // CID BID | |
| 1151 base::Time timestamp; // Timestamp when this cell was primary | |
| 1152 int signal_strength; // Radio signal strength measured in dBm. | |
| 1153 int timing_advance; // Represents the distance from the cell tower. | |
| 1154 // Each unit is roughly 550 meters. | |
| 1155 }; | |
| 1156 | |
| 1157 typedef std::vector<CellTower> CellTowerVector; | |
| 1158 | |
| 1159 // This class handles the interaction with the ChromeOS network library APIs. | |
| 1160 // Classes can add themselves as observers. Users can get an instance of the | |
| 1161 // library like this: chromeos::NetworkLibrary::Get() | |
| 1162 class NetworkLibrary { | |
| 1163 public: | |
| 1164 enum HardwareAddressFormat { | |
| 1165 FORMAT_RAW_HEX, | |
| 1166 FORMAT_COLON_SEPARATED_HEX | |
| 1167 }; | |
| 1168 | |
| 1169 // Used to configure which IP parameters will be specified by DHCP and which | |
| 1170 // will be set by the user. | |
| 1171 enum UseDHCP { | |
| 1172 USE_DHCP_ADDRESS = 0x1, | |
| 1173 USE_DHCP_NETMASK = 0x1 << 1, | |
| 1174 USE_DHCP_GATEWAY = 0x1 << 2, | |
| 1175 USE_DHCP_NAME_SERVERS = 0x1 << 3, | |
| 1176 USE_DHCP_ALL_ROUTING_INFO = | |
| 1177 (USE_DHCP_ADDRESS | | |
| 1178 USE_DHCP_NETMASK | | |
| 1179 USE_DHCP_GATEWAY), | |
| 1180 }; | |
| 1181 | |
| 1182 class NetworkProfileObserver { | |
| 1183 public: | |
| 1184 // Called when the list of network profiles was changed. | |
| 1185 virtual void OnProfileListChanged() = 0; | |
| 1186 protected: | |
| 1187 virtual ~NetworkProfileObserver() {} | |
| 1188 }; | |
| 1189 | |
| 1190 class NetworkManagerObserver { | |
| 1191 public: | |
| 1192 // Called when the state of the network manager has changed, | |
| 1193 // for example, networks have appeared or disappeared. | |
| 1194 virtual void OnNetworkManagerChanged(NetworkLibrary* obj) = 0; | |
| 1195 protected: | |
| 1196 virtual ~NetworkManagerObserver() {} | |
| 1197 }; | |
| 1198 | |
| 1199 class NetworkObserver { | |
| 1200 public: | |
| 1201 // Called when the state of a single network has changed, | |
| 1202 // for example signal strength or connection state. | |
| 1203 virtual void OnNetworkChanged(NetworkLibrary* cros, | |
| 1204 const Network* network) = 0; | |
| 1205 protected: | |
| 1206 virtual ~NetworkObserver() {} | |
| 1207 }; | |
| 1208 | |
| 1209 class NetworkDeviceObserver { | |
| 1210 public: | |
| 1211 // Called when |device| got notification about new networks available. | |
| 1212 virtual void OnNetworkDeviceFoundNetworks(NetworkLibrary* cros, | |
| 1213 const NetworkDevice* device) {} | |
| 1214 | |
| 1215 // Called when |device| got notification about SIM lock change. | |
| 1216 virtual void OnNetworkDeviceSimLockChanged(NetworkLibrary* cros, | |
| 1217 const NetworkDevice* device) {} | |
| 1218 protected: | |
| 1219 virtual ~NetworkDeviceObserver() {} | |
| 1220 }; | |
| 1221 | |
| 1222 class PinOperationObserver { | |
| 1223 public: | |
| 1224 // Called when pin async operation has completed. | |
| 1225 // Network is NULL when we don't have an associated Network object. | |
| 1226 virtual void OnPinOperationCompleted(NetworkLibrary* cros, | |
| 1227 PinOperationError error) = 0; | |
| 1228 protected: | |
| 1229 virtual ~PinOperationObserver() {} | |
| 1230 }; | |
| 1231 | |
| 1232 virtual ~NetworkLibrary() {} | |
| 1233 | |
| 1234 virtual void Init() = 0; | |
| 1235 | |
| 1236 // Returns true if libcros was loaded instead of stubbed out. | |
| 1237 virtual bool IsCros() const = 0; | |
| 1238 | |
| 1239 virtual void AddNetworkProfileObserver(NetworkProfileObserver* observer) = 0; | |
| 1240 virtual void RemoveNetworkProfileObserver( | |
| 1241 NetworkProfileObserver* observer) = 0; | |
| 1242 | |
| 1243 virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) = 0; | |
| 1244 virtual void RemoveNetworkManagerObserver( | |
| 1245 NetworkManagerObserver* observer) = 0; | |
| 1246 | |
| 1247 // An attempt to add an observer that has already been added for a | |
| 1248 // give service path will be ignored. | |
| 1249 virtual void AddNetworkObserver(const std::string& service_path, | |
| 1250 NetworkObserver* observer) = 0; | |
| 1251 // Remove an observer of a single network | |
| 1252 virtual void RemoveNetworkObserver(const std::string& service_path, | |
| 1253 NetworkObserver* observer) = 0; | |
| 1254 // Stop |observer| from observing any networks | |
| 1255 virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) = 0; | |
| 1256 | |
| 1257 // Add an observer for a single network device. | |
| 1258 virtual void AddNetworkDeviceObserver(const std::string& device_path, | |
| 1259 NetworkDeviceObserver* observer) = 0; | |
| 1260 // Remove an observer for a single network device. | |
| 1261 virtual void RemoveNetworkDeviceObserver(const std::string& device_path, | |
| 1262 NetworkDeviceObserver* observer) = 0; | |
| 1263 | |
| 1264 virtual void AddPinOperationObserver(PinOperationObserver* observer) = 0; | |
| 1265 virtual void RemovePinOperationObserver(PinOperationObserver* observer) = 0; | |
| 1266 | |
| 1267 // Return the active or default Ethernet network (or NULL if none). | |
| 1268 virtual const EthernetNetwork* ethernet_network() const = 0; | |
| 1269 virtual bool ethernet_connecting() const = 0; | |
| 1270 virtual bool ethernet_connected() const = 0; | |
| 1271 | |
| 1272 // Return the active Wifi network (or NULL if none active). | |
| 1273 virtual const WifiNetwork* wifi_network() const = 0; | |
| 1274 virtual bool wifi_connecting() const = 0; | |
| 1275 virtual bool wifi_connected() const = 0; | |
| 1276 | |
| 1277 // Return the active Cellular network (or NULL if none active). | |
| 1278 virtual const CellularNetwork* cellular_network() const = 0; | |
| 1279 virtual bool cellular_connecting() const = 0; | |
| 1280 virtual bool cellular_connected() const = 0; | |
| 1281 | |
| 1282 // Return the active Wimax network (or NULL if none active). | |
| 1283 virtual const WimaxNetwork* wimax_network() const = 0; | |
| 1284 virtual bool wimax_connecting() const = 0; | |
| 1285 virtual bool wimax_connected() const = 0; | |
| 1286 | |
| 1287 // Return the active virtual network (or NULL if none active). | |
| 1288 virtual const VirtualNetwork* virtual_network() const = 0; | |
| 1289 virtual bool virtual_network_connecting() const = 0; | |
| 1290 virtual bool virtual_network_connected() const = 0; | |
| 1291 | |
| 1292 // Return true if any network is currently connected. | |
| 1293 virtual bool Connected() const = 0; | |
| 1294 | |
| 1295 // Return true if any network is currently connecting. | |
| 1296 virtual bool Connecting() const = 0; | |
| 1297 | |
| 1298 // Returns the current list of wifi networks. | |
| 1299 virtual const WifiNetworkVector& wifi_networks() const = 0; | |
| 1300 | |
| 1301 // Returns the list of remembered wifi networks. | |
| 1302 virtual const WifiNetworkVector& remembered_wifi_networks() const = 0; | |
| 1303 | |
| 1304 // Returns the current list of cellular networks. | |
| 1305 virtual const CellularNetworkVector& cellular_networks() const = 0; | |
| 1306 | |
| 1307 // Returns the current list of Wimax networks. | |
| 1308 virtual const WimaxNetworkVector& wimax_networks() const = 0; | |
| 1309 | |
| 1310 // Returns the current list of virtual networks. | |
| 1311 virtual const VirtualNetworkVector& virtual_networks() const = 0; | |
| 1312 | |
| 1313 // Returns the current list of virtual networks. | |
| 1314 virtual const VirtualNetworkVector& remembered_virtual_networks() const = 0; | |
| 1315 | |
| 1316 virtual const Network* active_network() const = 0; | |
| 1317 virtual const Network* active_nonvirtual_network() const = 0; | |
| 1318 virtual const Network* connected_network() const = 0; | |
| 1319 virtual const Network* connecting_network() const = 0; | |
| 1320 | |
| 1321 virtual bool ethernet_available() const = 0; | |
| 1322 virtual bool wifi_available() const = 0; | |
| 1323 virtual bool wimax_available() const = 0; | |
| 1324 virtual bool cellular_available() const = 0; | |
| 1325 | |
| 1326 virtual bool ethernet_enabled() const = 0; | |
| 1327 virtual bool wifi_enabled() const = 0; | |
| 1328 virtual bool wimax_enabled() const = 0; | |
| 1329 virtual bool cellular_enabled() const = 0; | |
| 1330 | |
| 1331 virtual bool wifi_scanning() const = 0; | |
| 1332 virtual bool cellular_initializing() const = 0; | |
| 1333 | |
| 1334 // Return a pointer to the device, if it exists, or NULL. | |
| 1335 virtual const NetworkDevice* FindNetworkDeviceByPath( | |
| 1336 const std::string& path) const = 0; | |
| 1337 | |
| 1338 // Returns device with TYPE_CELLULAR or TYPE_WIMAX. | |
| 1339 // Returns NULL if none exists. | |
| 1340 virtual const NetworkDevice* FindMobileDevice() const = 0; | |
| 1341 | |
| 1342 // Returns device with TYPE_CELLULAR. Returns NULL if none exists. | |
| 1343 virtual const NetworkDevice* FindCellularDevice() const = 0; | |
| 1344 | |
| 1345 // Return a pointer to the network, if it exists, or NULL. | |
| 1346 // NOTE: Never store these results, store service paths instead. | |
| 1347 // The pattern for doing an operation on a Network is: | |
| 1348 // Network* network = cros->FindNetworkByPath(service_path); | |
| 1349 // network->SetFoo(); | |
| 1350 // network->Connect(); | |
| 1351 // As long as this is done in sequence on the UI thread it will be safe; | |
| 1352 // the network list only gets updated on the UI thread. | |
| 1353 virtual Network* FindNetworkByPath(const std::string& path) const = 0; | |
| 1354 virtual Network* FindNetworkByUniqueId( | |
| 1355 const std::string& unique_id) const = 0; | |
| 1356 virtual WifiNetwork* FindWifiNetworkByPath(const std::string& path) const = 0; | |
| 1357 virtual CellularNetwork* FindCellularNetworkByPath( | |
| 1358 const std::string& path) const = 0; | |
| 1359 virtual WimaxNetwork* FindWimaxNetworkByPath( | |
| 1360 const std::string& path) const = 0; | |
| 1361 virtual VirtualNetwork* FindVirtualNetworkByPath( | |
| 1362 const std::string& path) const = 0; | |
| 1363 | |
| 1364 // Return a pointer to the remembered network, if it exists, or NULL. | |
| 1365 virtual Network* FindRememberedNetworkByPath( | |
| 1366 const std::string& path) const = 0; | |
| 1367 | |
| 1368 // Return a pointer to the ONC dictionary for a network identified by unique | |
| 1369 // ID. Returns NULL if there is no ONC dictionary available for that network. | |
| 1370 // The ONC dictionary is usually only present for policy-configure networks | |
| 1371 // which get reconfigured at startup. | |
| 1372 virtual const base::DictionaryValue* FindOncForNetwork( | |
| 1373 const std::string& unique_id) const = 0; | |
| 1374 | |
| 1375 // Records information that cellular plan payment has happened. | |
| 1376 virtual void SignalCellularPlanPayment() = 0; | |
| 1377 | |
| 1378 // Returns true if cellular plan payment has been recorded recently. | |
| 1379 virtual bool HasRecentCellularPlanPayment() = 0; | |
| 1380 | |
| 1381 // Returns home carrier ID if available, otherwise empty string is returned. | |
| 1382 // Carrier ID format: <carrier name> (country). Ex.: "Verizon (us)". | |
| 1383 virtual const std::string& GetCellularHomeCarrierId() const = 0; | |
| 1384 | |
| 1385 // Checks if the current cellular device should be activated by directly | |
| 1386 // calling it's activate function instead of going through the activation | |
| 1387 // process. | |
| 1388 // Note: Currently Sprint is the only carrier using direct activation. | |
| 1389 virtual bool CellularDeviceUsesDirectActivation() const = 0; | |
| 1390 | |
| 1391 // Passes |old_pin|, |new_pin| to change SIM card PIM. | |
| 1392 virtual void ChangePin(const std::string& old_pin, | |
| 1393 const std::string& new_pin) = 0; | |
| 1394 | |
| 1395 // Passes |pin|, |require_pin| value to change SIM card RequirePin setting. | |
| 1396 virtual void ChangeRequirePin(bool require_pin, | |
| 1397 const std::string& pin) = 0; | |
| 1398 | |
| 1399 // Passes |pin| to unlock SIM card. | |
| 1400 virtual void EnterPin(const std::string& pin) = 0; | |
| 1401 | |
| 1402 // Passes |puk|, |new_pin| to unblock SIM card. | |
| 1403 virtual void UnblockPin(const std::string& puk, | |
| 1404 const std::string& new_pin) = 0; | |
| 1405 | |
| 1406 // Request a scan for available cellular networks. | |
| 1407 virtual void RequestCellularScan() = 0; | |
| 1408 | |
| 1409 // Request a register in cellular network with |network_id|. | |
| 1410 virtual void RequestCellularRegister(const std::string& network_id) = 0; | |
| 1411 | |
| 1412 // Change data roaming restriction for current cellular device. | |
| 1413 virtual void SetCellularDataRoamingAllowed(bool new_value) = 0; | |
| 1414 | |
| 1415 // Changes the active cellular carrier to the one provided, calls the closure | |
| 1416 // once the transition is complete. | |
| 1417 virtual void SetCarrier(const std::string& carrier, | |
| 1418 const NetworkOperationCallback& completed) = 0; | |
| 1419 | |
| 1420 // Return true if GSM SIM card can work only with enabled roaming. | |
| 1421 virtual bool IsCellularAlwaysInRoaming() = 0; | |
| 1422 | |
| 1423 // Request a scan for new wifi networks. | |
| 1424 virtual void RequestNetworkScan() = 0; | |
| 1425 | |
| 1426 // TODO(joth): Add GetCellTowers to retrieve a CellTowerVector. | |
| 1427 | |
| 1428 // Returns false if there is no way to connect to this network, even with | |
| 1429 // user input (e.g. it requires a user profile but none is available). | |
| 1430 virtual bool CanConnectToNetwork(const Network* network) const = 0; | |
| 1431 | |
| 1432 // Connect to the specified wireless network. | |
| 1433 virtual void ConnectToWifiNetwork(WifiNetwork* network) = 0; | |
| 1434 | |
| 1435 // Connect to the specified wireless network and set its profile | |
| 1436 // to SHARED if |shared| is true, otherwise to USER. | |
| 1437 virtual void ConnectToWifiNetwork(WifiNetwork* network, bool shared) = 0; | |
| 1438 | |
| 1439 // Connect to the specified cellular network. | |
| 1440 virtual void ConnectToCellularNetwork(CellularNetwork* network) = 0; | |
| 1441 | |
| 1442 // Connect to the specified WiMAX network. | |
| 1443 virtual void ConnectToWimaxNetwork(WimaxNetwork* network) = 0; | |
| 1444 | |
| 1445 // Connect to the specified WiMAX network and set its profile | |
| 1446 // to SHARED if |shared| is true, otherwise to USER. | |
| 1447 virtual void ConnectToWimaxNetwork(WimaxNetwork* network, bool shared) = 0; | |
| 1448 | |
| 1449 // Connect to the specified virtual network. | |
| 1450 virtual void ConnectToVirtualNetwork(VirtualNetwork* network) = 0; | |
| 1451 | |
| 1452 // Connect to an unconfigured network with given SSID, security, passphrase, | |
| 1453 // and optional EAP configuration. If |security| is SECURITY_8021X, | |
| 1454 // |eap_config| must be provided. | |
| 1455 struct EAPConfigData { | |
| 1456 EAPConfigData(); | |
| 1457 ~EAPConfigData(); | |
| 1458 EAPMethod method; | |
| 1459 EAPPhase2Auth auth; | |
| 1460 std::string server_ca_cert_pem; | |
| 1461 bool use_system_cas; | |
| 1462 std::string client_cert_pkcs11_id; | |
| 1463 std::string identity; | |
| 1464 std::string anonymous_identity; | |
| 1465 }; | |
| 1466 virtual void ConnectToUnconfiguredWifiNetwork( | |
| 1467 const std::string& ssid, | |
| 1468 ConnectionSecurity security, | |
| 1469 const std::string& passphrase, | |
| 1470 const EAPConfigData* eap_config, | |
| 1471 bool save_credentials, | |
| 1472 bool shared) = 0; | |
| 1473 | |
| 1474 // Connect to the specified virtual network with service name. | |
| 1475 // VPNConfigData must be provided. | |
| 1476 struct VPNConfigData { | |
| 1477 VPNConfigData(); | |
| 1478 ~VPNConfigData(); | |
| 1479 std::string psk; | |
| 1480 std::string server_ca_cert_pem; | |
| 1481 std::string client_cert_pkcs11_id; | |
| 1482 std::string username; | |
| 1483 std::string user_passphrase; | |
| 1484 std::string otp; | |
| 1485 std::string group_name; | |
| 1486 bool save_credentials; | |
| 1487 }; | |
| 1488 virtual void ConnectToUnconfiguredVirtualNetwork( | |
| 1489 const std::string& service_name, | |
| 1490 const std::string& server_hostname, | |
| 1491 ProviderType provider_type, | |
| 1492 const VPNConfigData& config) = 0; | |
| 1493 | |
| 1494 // Disconnect from the specified network. | |
| 1495 virtual void DisconnectFromNetwork(const Network* network) = 0; | |
| 1496 | |
| 1497 // Forget the network corresponding to service_path. | |
| 1498 virtual void ForgetNetwork(const std::string& service_path) = 0; | |
| 1499 | |
| 1500 // Enables/disables the ethernet network device. | |
| 1501 virtual void EnableEthernetNetworkDevice(bool enable) = 0; | |
| 1502 | |
| 1503 // Enables/disables the wifi network device. | |
| 1504 virtual void EnableWifiNetworkDevice(bool enable) = 0; | |
| 1505 | |
| 1506 // Enables/disables the wimax network device. | |
| 1507 virtual void EnableWimaxNetworkDevice(bool enable) = 0; | |
| 1508 | |
| 1509 // Enables/disables the cellular network device. | |
| 1510 virtual void EnableCellularNetworkDevice(bool enable) = 0; | |
| 1511 | |
| 1512 // Fetches IP configs and hardware address for a given device_path and returns | |
| 1513 // them via the given callback. | |
| 1514 virtual void GetIPConfigs(const std::string& device_path, | |
| 1515 HardwareAddressFormat format, | |
| 1516 const NetworkGetIPConfigsCallback& callback) = 0; | |
| 1517 | |
| 1518 // Sets the configuration of the IP parameters. This is called when user | |
| 1519 // changes IP settings from dhcp to static or vice versa or when user changes | |
| 1520 // the ip config info. If nothing is changed, this method does nothing. | |
| 1521 // |dhcp_usage_mask| is a bitmask composed of items from the UseDHCP enum, and | |
| 1522 // indicates which of the supplied values are overridden by values given by | |
| 1523 // the default IP acquisition technique for the service (DHCP, usually). | |
| 1524 virtual void SetIPParameters(const std::string& service_path, | |
| 1525 const std::string& address, | |
| 1526 const std::string& netmask, | |
| 1527 const std::string& gateway, | |
| 1528 const std::string& name_servers, | |
| 1529 int dhcp_usage_mask) = 0; | |
| 1530 | |
| 1531 // Requests the service properties associated with |service_path|. Calls | |
| 1532 // |callback| with the properties when competed. | |
| 1533 typedef base::Callback<void(const std::string& service_path, | |
| 1534 const base::DictionaryValue* properties)> | |
| 1535 NetworkServicePropertiesCallback; | |
| 1536 virtual void RequestNetworkServiceProperties( | |
| 1537 const std::string& service_path, | |
| 1538 const NetworkServicePropertiesCallback& callback) = 0; | |
| 1539 | |
| 1540 // Load networks from a list of NetworkConfigurations of ONC. | |
| 1541 virtual void LoadOncNetworks(const base::ListValue& network_configs, | |
| 1542 onc::ONCSource source) = 0; | |
| 1543 | |
| 1544 // This sets the active network for the network type. Note: priority order | |
| 1545 // is unchanged (i.e. if a wifi network is set to active, but an ethernet | |
| 1546 // network is still active, active_network() will still return the ethernet | |
| 1547 // network). Other networks of the same type will become inactive. | |
| 1548 // Used for testing. | |
| 1549 virtual bool SetActiveNetwork(ConnectionType type, | |
| 1550 const std::string& service_path) = 0; | |
| 1551 | |
| 1552 // Factory function, creates a new instance and returns ownership. | |
| 1553 // For normal usage, access the singleton via NetworkLibrary::Get(). | |
| 1554 static NetworkLibrary* GetImpl(bool stub); | |
| 1555 | |
| 1556 // Initializes the global instance. | |
| 1557 static void Initialize(bool use_stub); | |
| 1558 | |
| 1559 // Destroys the global instance. Must be called before AtExitManager is | |
| 1560 // destroyed to ensure a clean shutdown. | |
| 1561 static void Shutdown(); | |
| 1562 | |
| 1563 // Gets the global instance. Returns NULL if Initialize() has not been | |
| 1564 // called (or Shutdown() has been called). | |
| 1565 static NetworkLibrary* Get(); | |
| 1566 | |
| 1567 // Sets the network library to be returned from Get(). The existing network | |
| 1568 // library will be deleted. | |
| 1569 static void SetForTesting(NetworkLibrary* network_library); | |
| 1570 }; | |
| 1571 | |
| 1572 // The class is used for enabling the stub libcros, and cleaning it up at | |
| 1573 // the end of the object lifetime. Useful for testing. | |
| 1574 class ScopedStubNetworkLibraryEnabler { | |
| 1575 public: | |
| 1576 ScopedStubNetworkLibraryEnabler() { | |
| 1577 NetworkLibrary::Initialize(true); | |
| 1578 } | |
| 1579 | |
| 1580 ~ScopedStubNetworkLibraryEnabler() { | |
| 1581 NetworkLibrary::Shutdown(); | |
| 1582 } | |
| 1583 | |
| 1584 private: | |
| 1585 DISALLOW_COPY_AND_ASSIGN(ScopedStubNetworkLibraryEnabler); | |
| 1586 }; | |
| 1587 | |
| 1588 } // namespace chromeos | |
| 1589 | |
| 1590 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ | |
| OLD | NEW |