| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |
| #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/singleton.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/timer/timer.h" |
| #include "base/values.h" |
| #include "chrome/browser/chromeos/cros/network_constants.h" |
| #include "chromeos/network/network_ip_config.h" |
| #include "chromeos/network/network_ui_data.h" |
| #include "chromeos/network/network_util.h" |
| #include "chromeos/network/onc/onc_constants.h" |
| |
| namespace chromeos { |
| |
| class CertificatePattern; |
| class EnrollmentDelegate; |
| class NetworkDeviceParser; |
| class NetworkParser; |
| |
| // This is the list of all implementation classes that are allowed |
| // access to the internals of the network library classes. |
| #define NETWORK_LIBRARY_IMPL_FRIENDS \ |
| friend class NetworkLibraryImplBase; \ |
| friend class NetworkLibraryImplCros; \ |
| friend class NetworkLibraryImplStub; |
| |
| |
| // Simple wrapper for property Cellular.FoundNetworks. |
| struct FoundCellularNetwork { |
| FoundCellularNetwork(); |
| ~FoundCellularNetwork(); |
| |
| std::string status; |
| std::string network_id; |
| std::string short_name; |
| std::string long_name; |
| std::string technology; |
| }; |
| typedef std::vector<FoundCellularNetwork> CellularNetworkList; |
| |
| struct CellularApn { |
| std::string apn; |
| std::string network_id; |
| std::string username; |
| std::string password; |
| std::string name; |
| std::string localized_name; |
| std::string language; |
| |
| CellularApn(); |
| CellularApn(const std::string& apn, const std::string& network_id, |
| const std::string& username, const std::string& password); |
| ~CellularApn(); |
| void Set(const base::DictionaryValue& dict); |
| }; |
| typedef std::vector<CellularApn> CellularApnList; |
| |
| // The value of priority if it is not set. |
| const int kPriorityNotSet = 0; |
| // The value of priority if network is preferred. |
| const int kPriorityPreferred = 1; |
| |
| // Contains data related to the shill.Device interface, |
| // e.g. ethernet, wifi, cellular. |
| // TODO(dpolukhin): refactor to make base class and device specific derivatives. |
| class NetworkDevice { |
| public: |
| explicit NetworkDevice(const std::string& device_path); |
| ~NetworkDevice(); |
| |
| NetworkDeviceParser* device_parser() { return device_parser_.get(); } |
| void SetNetworkDeviceParser(NetworkDeviceParser* parser); |
| |
| // Device info. |
| const std::string& device_path() const { return device_path_; } |
| const std::string& name() const { return name_; } |
| const std::string& unique_id() const { return unique_id_; } |
| ConnectionType type() const { return type_; } |
| bool scanning() const { return scanning_; } |
| const std::string& meid() const { return meid_; } |
| const std::string& iccid() const { return iccid_; } |
| const std::string& imei() const { return imei_; } |
| const std::string& imsi() const { return imsi_; } |
| const std::string& esn() const { return esn_; } |
| const std::string& mdn() const { return mdn_; } |
| const std::string& min() const { return min_; } |
| const std::string& model_id() const { return model_id_; } |
| const std::string& manufacturer() const { return manufacturer_; } |
| SimLockState sim_lock_state() const { return sim_lock_state_; } |
| bool is_sim_locked() const { |
| return sim_lock_state_ == SIM_LOCKED_PIN || |
| sim_lock_state_ == SIM_LOCKED_PUK; |
| } |
| // Returns true if GSM modem and SIM as absent, otherwise |
| // returns false: GSM modem and SIM card is present or CDMA modem. |
| bool is_sim_absent() const { |
| return technology_family() == TECHNOLOGY_FAMILY_GSM && |
| !is_sim_locked() && !sim_present_; |
| } |
| int sim_retries_left() const { return sim_retries_left_; } |
| SimPinRequire sim_pin_required() const { return sim_pin_required_; } |
| bool powered() const { return powered_; } |
| const std::string& firmware_revision() const { return firmware_revision_; } |
| const std::string& hardware_revision() const { return hardware_revision_; } |
| const unsigned int prl_version() const { return prl_version_; } |
| const std::string& home_provider_code() const { return home_provider_code_; } |
| const std::string& home_provider_country() const { |
| return home_provider_country_; |
| } |
| const std::string& home_provider_id() const { return home_provider_id_; } |
| const std::string& home_provider_name() const { return home_provider_name_; } |
| const bool provider_requires_roaming() const { |
| return provider_requires_roaming_; |
| } |
| const std::string& selected_cellular_network() const { |
| return selected_cellular_network_; |
| } |
| const CellularNetworkList& found_cellular_networks() const { |
| return found_cellular_networks_; |
| } |
| bool data_roaming_allowed() const { return data_roaming_allowed_; } |
| bool support_network_scan() const { return support_network_scan_; } |
| std::string carrier() const { return carrier_; } |
| base::ListValue* supported_carriers() const { |
| return supported_carriers_.get(); |
| } |
| enum TechnologyFamily technology_family() const { return technology_family_; } |
| const CellularApnList& provider_apn_list() const { |
| return provider_apn_list_; |
| } |
| |
| // Updates the property specified by |key| with the contents of |
| // |value|. Returns false on failure. Upon success, returns the |
| // PropertyIndex that was updated in |index|. |index| may be NULL |
| // if not needed. |
| bool UpdateStatus(const std::string& key, |
| const base::Value& value, |
| PropertyIndex* index); |
| |
| protected: |
| void set_unique_id(const std::string& unique_id) { unique_id_ = unique_id; } |
| |
| private: |
| // This allows NetworkDeviceParser and its subclasses access to |
| // device privates so that they can be reconstituted during parsing. |
| // The parsers only access things through the private set_ functions |
| // so that this class can evolve without having to change all the |
| // parsers. |
| friend class NativeNetworkDeviceParser; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // Use these functions at your peril. They are used by the various |
| // parsers to set state, and really shouldn't be used by anyone |
| // else. |
| void set_device_path(const std::string& device_path) { |
| device_path_ = device_path; |
| } |
| void set_name(const std::string& name) { name_ = name; } |
| void set_type(ConnectionType type) { type_ = type; } |
| void set_scanning(bool scanning) { scanning_ = scanning; } |
| void set_meid(const std::string& meid) { meid_ = meid; } |
| void set_iccid(const std::string& iccid) { iccid_ = iccid; } |
| void set_imei(const std::string& imei) { imei_ = imei; } |
| void set_imsi(const std::string& imsi) { imsi_ = imsi; } |
| void set_esn(const std::string& esn) { esn_ = esn; } |
| void set_mdn(const std::string& mdn) { mdn_ = mdn; } |
| void set_min(const std::string& min) { min_ = min; } |
| void set_technology_family(TechnologyFamily technology_family) { |
| technology_family_ = technology_family; |
| } |
| void set_carrier(const std::string& carrier) { carrier_ = carrier; } |
| void set_supported_carriers(const base::ListValue& supported_carriers) { |
| supported_carriers_.reset(supported_carriers.DeepCopy()); |
| } |
| void set_home_provider_code(const std::string& home_provider_code) { |
| home_provider_code_ = home_provider_code; |
| } |
| void set_home_provider_country(const std::string& home_provider_country) { |
| home_provider_country_ = home_provider_country; |
| } |
| void set_home_provider_id(const std::string& home_provider_id) { |
| home_provider_id_ = home_provider_id; |
| } |
| void set_home_provider_name(const std::string& home_provider_name) { |
| home_provider_name_ = home_provider_name; |
| } |
| void set_provider_requires_roaming(bool provider_requires_roaming) { |
| provider_requires_roaming_ = provider_requires_roaming; |
| } |
| void set_model_id(const std::string& model_id) { model_id_ = model_id; } |
| void set_manufacturer(const std::string& manufacturer) { |
| manufacturer_ = manufacturer; |
| } |
| void set_prl_version(int prl_version) { |
| prl_version_ = prl_version; |
| } |
| void set_sim_lock_state(SimLockState sim_lock_state) { |
| sim_lock_state_ = sim_lock_state; |
| } |
| void set_sim_retries_left(int sim_retries_left) { |
| sim_retries_left_ = sim_retries_left; |
| } |
| void set_sim_pin_required(SimPinRequire sim_pin_required) { |
| sim_pin_required_ = sim_pin_required; |
| } |
| void set_sim_present(bool sim_present) { |
| sim_present_ = sim_present; |
| } |
| void set_powered(bool powered) { |
| powered_ = powered; |
| } |
| void set_firmware_revision(const std::string& firmware_revision) { |
| firmware_revision_ = firmware_revision; |
| } |
| void set_hardware_revision(const std::string& hardware_revision) { |
| hardware_revision_ = hardware_revision; |
| } |
| void set_selected_cellular_network( |
| const std::string& selected_cellular_network) { |
| selected_cellular_network_ = selected_cellular_network; |
| } |
| void set_found_cellular_networks( |
| const CellularNetworkList& found_cellular_networks) { |
| found_cellular_networks_ = found_cellular_networks; |
| } |
| void set_data_roaming_allowed(bool data_roaming_allowed) { |
| data_roaming_allowed_ = data_roaming_allowed; |
| } |
| void set_support_network_scan(bool support_network_scan) { |
| support_network_scan_ = support_network_scan; |
| } |
| void set_provider_apn_list(const CellularApnList& provider_apn_list) { |
| provider_apn_list_ = provider_apn_list; |
| } |
| |
| void ParseInfo(const base::DictionaryValue& info); |
| |
| // General device info. |
| std::string device_path_; |
| std::string name_; |
| std::string unique_id_; |
| ConnectionType type_; |
| bool scanning_; |
| // Cellular specific device info. |
| TechnologyFamily technology_family_; |
| std::string carrier_; |
| scoped_ptr<base::ListValue> supported_carriers_; |
| std::string home_provider_code_; |
| std::string home_provider_country_; |
| std::string home_provider_id_; |
| std::string home_provider_name_; |
| bool provider_requires_roaming_; |
| std::string meid_; |
| std::string imei_; |
| std::string iccid_; |
| std::string imsi_; |
| std::string esn_; |
| std::string mdn_; |
| std::string min_; |
| std::string model_id_; |
| std::string manufacturer_; |
| SimLockState sim_lock_state_; |
| int sim_retries_left_; |
| SimPinRequire sim_pin_required_; |
| bool sim_present_; |
| bool powered_; |
| std::string firmware_revision_; |
| std::string hardware_revision_; |
| int prl_version_; |
| std::string selected_cellular_network_; |
| CellularNetworkList found_cellular_networks_; |
| bool data_roaming_allowed_; |
| bool support_network_scan_; |
| CellularApnList provider_apn_list_; |
| |
| // This is the parser we use to parse messages from the native |
| // network layer. |
| scoped_ptr<NetworkDeviceParser> device_parser_; |
| |
| DISALLOW_COPY_AND_ASSIGN(NetworkDevice); |
| }; |
| |
| // Contains data common to all network service types. |
| class Network { |
| public: |
| virtual ~Network(); |
| |
| // Test API for accessing setters in tests. |
| class TestApi { |
| public: |
| explicit TestApi(Network* network) : network_(network) {} |
| void SetConnected() { |
| network_->set_connected(); |
| } |
| void SetConnecting() { |
| network_->set_connecting(); |
| } |
| void SetDisconnected() { |
| network_->set_disconnected(); |
| } |
| void SetUserConnectState(UserConnectState user_connect_state) { |
| network_->set_user_connect_state(user_connect_state); |
| } |
| |
| private: |
| Network* network_; |
| }; |
| friend class TestApi; |
| |
| const std::string& service_path() const { return service_path_; } |
| const std::string& name() const { return name_; } |
| const std::string& device_path() const { return device_path_; } |
| const std::string& ip_address() const { return ip_address_; } |
| ConnectionType type() const { return type_; } |
| ConnectionState connection_state() const { return state_; } |
| bool connecting() const { return IsConnectingState(state_); } |
| bool configuring() const { return state_ == STATE_CONFIGURATION; } |
| bool connected() const { return IsConnectedState(state_); } |
| bool connecting_or_connected() const { return connecting() || connected(); } |
| // True when a user-initiated connection attempt is in progress |
| bool connection_started() const { |
| return user_connect_state_ == USER_CONNECT_STARTED; |
| } |
| UserConnectState user_connect_state() const { return user_connect_state_; } |
| bool failed() const { return state_ == STATE_FAILURE; } |
| bool disconnected() const { return IsDisconnectedState(state_); } |
| bool online() const { return state_ == STATE_ONLINE; } |
| bool restricted_pool() const { return state_ == STATE_PORTAL; } |
| ConnectionError error() const { return error_; } |
| ConnectionState state() const { return state_; } |
| // Is this network connectable. Currently, this is mainly used by 802.1x |
| // networks to specify that the network is not configured yet. |
| bool connectable() const { return connectable_; } |
| // Is this the active network, i.e, the one through which |
| // network traffic is being routed? A network can be connected, |
| // but not be carrying traffic. |
| bool is_active() const { return is_active_; } |
| bool preferred() const { return priority_ != kPriorityNotSet; } |
| bool auto_connect() const { return auto_connect_; } |
| bool save_credentials() const { return save_credentials_; } |
| |
| bool added() const { return added_; } |
| bool notify_failure() const { return notify_failure_; } |
| const std::string& profile_path() const { return profile_path_; } |
| NetworkProfileType profile_type() const { return profile_type_; } |
| |
| const std::string& unique_id() const { return unique_id_; } |
| int priority_order() const { return priority_order_; } |
| |
| const NetworkUIData& ui_data() const { return ui_data_; } |
| |
| void set_notify_failure(bool state) { notify_failure_ = state; } |
| |
| void SetPreferred(bool preferred); |
| |
| void SetAutoConnect(bool auto_connect); |
| |
| void SetName(const std::string& name); |
| |
| void SetSaveCredentials(bool save_credentials); |
| |
| void ClearUIData(); |
| |
| // This will resolve any automatic configuration that has to occur |
| // (provisioning certificates, etc.) before attempting to connect to the |
| // network. When configuration is complete, calls the closure to finish the |
| // connection or show the config dialog to collect user-supplied info. |
| virtual void AttemptConnection(const base::Closure& connect); |
| |
| // Return a string representation of the state code. |
| std::string GetStateString() const; |
| |
| // Return a string representation of the error code. |
| std::string GetErrorString() const; |
| |
| // Return true if the network must be in the user profile (e.g. has certs). |
| virtual bool RequiresUserProfile() const; |
| |
| // Copy any credentials from a remembered network that are unset in |this|. |
| virtual void CopyCredentialsFromRemembered(Network* remembered); |
| |
| // Static helper functions. |
| static bool IsConnectedState(ConnectionState state) { |
| return (state == STATE_READY || |
| state == STATE_ONLINE || |
| state == STATE_PORTAL); |
| } |
| static bool IsConnectingState(ConnectionState state) { |
| return (state == STATE_CONNECT_REQUESTED || |
| state == STATE_ASSOCIATION || |
| state == STATE_CONFIGURATION || |
| state == STATE_CARRIER); |
| } |
| static bool IsDisconnectedState(ConnectionState state) { |
| return (state == STATE_UNKNOWN || |
| state == STATE_IDLE || |
| state == STATE_DISCONNECT || |
| state == STATE_FAILURE || |
| state == STATE_ACTIVATION_FAILURE); |
| } |
| |
| // Adopts the given enrollment handler to handle any certificate enrollment |
| // URIs encountered during network connection. |
| void SetEnrollmentDelegate(EnrollmentDelegate* delegate); |
| |
| virtual bool UpdateStatus(const std::string& key, |
| const base::Value& value, |
| PropertyIndex* index); |
| |
| // Creates a Network object for the given type for testing. |
| static Network* CreateForTesting(ConnectionType type); |
| |
| protected: |
| Network(const std::string& service_path, |
| ConnectionType type); |
| |
| NetworkParser* network_parser() { return network_parser_.get(); } |
| void SetNetworkParser(NetworkParser* parser); |
| |
| // Set the state and update flags if necessary. |
| void SetState(ConnectionState state); |
| |
| // Set the error state and update notify_failure_ |
| void SetError(ConnectionError error); |
| |
| // Parse name/value pairs from libcros. |
| virtual void ParseInfo(const base::DictionaryValue& info); |
| |
| // Erase cached credentials, used when "Save password" is unchecked. |
| virtual void EraseCredentials(); |
| |
| // Calculate a unique identifier for the network. |
| virtual void CalculateUniqueId(); |
| |
| // Methods to asynchronously set network service properties |
| virtual void SetStringProperty(const char* prop, const std::string& str, |
| std::string* dest); |
| virtual void SetBooleanProperty(const char* prop, bool b, bool* dest); |
| virtual void SetIntegerProperty(const char* prop, int i, int* dest); |
| virtual void SetValueProperty(const char* prop, const base::Value& val); |
| virtual void ClearProperty(const char* prop); |
| |
| // This will clear the property if string is empty. Otherwise, it will set it. |
| virtual void SetOrClearStringProperty(const char* prop, |
| const std::string& str, |
| std::string* dest); |
| |
| void set_unique_id(const std::string& unique_id) { unique_id_ = unique_id; } |
| const CertificatePattern& client_cert_pattern() const { |
| return ui_data_.certificate_pattern(); |
| } |
| |
| ClientCertType client_cert_type() const { |
| return ui_data_.certificate_type(); |
| } |
| |
| EnrollmentDelegate* enrollment_delegate() const { |
| return enrollment_delegate_.get(); |
| } |
| |
| private: |
| // This allows NetworkParser and its subclasses access to device |
| // privates so that they can be reconstituted during parsing. The |
| // parsers only access things through the private set_ functions so |
| // that this class can evolve without having to change all the |
| // parsers. |
| friend class NetworkParser; |
| friend class NativeNetworkParser; |
| friend class NativeVirtualNetworkParser; |
| // We reach directly into the network for testing purposes. |
| friend class MobileActivatorTest; |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // Use these functions at your peril. They are used by the various |
| // parsers to set state, and really shouldn't be used by anything else |
| // because they don't do the error checking and sending to the |
| // network layer that the other setters do. |
| void set_device_path(const std::string& device_path) { |
| device_path_ = device_path; |
| } |
| void set_name(const std::string& name) { name_ = name; } |
| void set_connecting(); |
| void set_behind_portal() { |
| state_ = STATE_PORTAL; |
| } |
| void set_connected() { |
| state_ = STATE_ONLINE; |
| } |
| void set_disconnected() { |
| state_ = STATE_IDLE; |
| } |
| void set_connectable(bool connectable) { connectable_ = connectable; } |
| void set_user_connect_state(UserConnectState user_connect_state) { |
| user_connect_state_ = user_connect_state; |
| } |
| void set_is_active(bool is_active) { is_active_ = is_active; } |
| void set_added(bool added) { added_ = added; } |
| void set_auto_connect(bool auto_connect) { auto_connect_ = auto_connect; } |
| void set_save_credentials(bool save_credentials) { |
| save_credentials_ = save_credentials; |
| } |
| void set_profile_path(const std::string& path) { profile_path_ = path; } |
| void set_profile_type(NetworkProfileType type) { profile_type_ = type; } |
| void set_ui_data(const NetworkUIData& ui_data) { |
| ui_data_ = ui_data; |
| } |
| void set_client_cert_pattern(const CertificatePattern& pattern) { |
| ui_data_.set_certificate_pattern(pattern); |
| } |
| void set_client_cert_type(ClientCertType type) { |
| ui_data_.set_certificate_type(type); |
| } |
| |
| // Set the profile path and update the flimflam property. |
| void SetProfilePath(const std::string& profile_path); |
| |
| // Trigger an asynchronous initialization the IP address field. |
| void InitIPAddress(); |
| |
| // Initialize the IP address field. |
| static void InitIPAddressCallback( |
| const std::string& service_path, |
| const NetworkIPConfigVector& ip_configs, |
| const std::string& hardware_address); |
| |
| std::string device_path_; |
| std::string name_; |
| std::string ip_address_; |
| ConnectionState state_; |
| ConnectionError error_; |
| bool connectable_; |
| UserConnectState user_connect_state_; |
| bool is_active_; |
| int priority_; // determines order in network list. |
| bool auto_connect_; |
| bool save_credentials_; // save passphrase and EAP credentials to disk. |
| scoped_ptr<EnrollmentDelegate> enrollment_delegate_; |
| |
| // Unique identifier, set the first time the network is parsed. |
| std::string unique_id_; |
| |
| // Priority value, corresponds to index in list from shill (0 = first) |
| int priority_order_; |
| |
| // Set to true if the UI requested this as a new network. |
| bool added_; |
| |
| // Set to true when a new connection failure occurs; cleared when observers |
| // are notified. |
| bool notify_failure_; |
| |
| // Profile path for networks. |
| std::string profile_path_; |
| |
| // Set to profile type based on profile_path_. |
| NetworkProfileType profile_type_; |
| |
| // These must not be modified after construction. |
| std::string service_path_; |
| ConnectionType type_; |
| |
| // UI-level state that is opaque to the connection manager. The value is |
| // stored in JSON-serialized from in the connection manager. |
| NetworkUIData ui_data_; |
| |
| // This is the parser we use to parse messages from the native |
| // network layer. |
| scoped_ptr<NetworkParser> network_parser_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Network); |
| }; |
| |
| // Class for networks of TYPE_ETHERNET. |
| class EthernetNetwork : public Network { |
| public: |
| explicit EthernetNetwork(const std::string& service_path); |
| private: |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| DISALLOW_COPY_AND_ASSIGN(EthernetNetwork); |
| }; |
| |
| // Class for networks of TYPE_VPN. |
| class VirtualNetwork : public Network { |
| public: |
| explicit VirtualNetwork(const std::string& service_path); |
| virtual ~VirtualNetwork(); |
| |
| const std::string& server_hostname() const { return server_hostname_; } |
| ProviderType provider_type() const { return provider_type_; } |
| const std::string& ca_cert_pem() const { return ca_cert_pem_; } |
| const std::string& psk_passphrase() const { return psk_passphrase_; } |
| const std::string& client_cert_id() const { return client_cert_id_; } |
| const std::string& username() const { return username_; } |
| const std::string& user_passphrase() const { return user_passphrase_; } |
| const std::string& group_name() const { return group_name_; } |
| |
| // Sets the well-known PKCS#11 slot and PIN for accessing certificates. |
| void SetCertificateSlotAndPin( |
| const std::string& slot, const std::string& pin); |
| |
| // Network overrides. |
| virtual bool RequiresUserProfile() const OVERRIDE; |
| virtual void CopyCredentialsFromRemembered(Network* remembered) OVERRIDE; |
| virtual void AttemptConnection(const base::Closure& connect) OVERRIDE; |
| |
| // Public getters. |
| bool NeedMoreInfoToConnect() const; |
| std::string GetProviderTypeString() const; |
| // Returns true if a PSK passphrase is required to connect. |
| bool IsPSKPassphraseRequired() const; |
| // Returns true if a user passphrase is required to connect. |
| bool IsUserPassphraseRequired() const; |
| |
| // Public setters. |
| void SetCACertPEM(const std::string& ca_cert_pem); |
| void SetL2TPIPsecPSKCredentials(const std::string& psk_passphrase, |
| const std::string& username, |
| const std::string& user_passphrase, |
| const std::string& group_name); |
| void SetL2TPIPsecCertCredentials(const std::string& client_cert_id, |
| const std::string& username, |
| const std::string& user_passphrase, |
| const std::string& group_name); |
| void SetOpenVPNCredentials(const std::string& client_cert_id, |
| const std::string& username, |
| const std::string& user_passphrase, |
| const std::string& otp); |
| void SetServerHostname(const std::string& server_hostname); |
| |
| private: |
| // This allows NetworkParser and its subclasses access to |
| // device privates so that they can be reconstituted during parsing. |
| // The parsers only access things through the private set_ functions |
| // so that this class can evolve without having to change all the |
| // parsers. |
| friend class NativeNetworkParser; |
| friend class NativeVirtualNetworkParser; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // Use these functions at your peril. They are used by the various |
| // parsers to set state, and really shouldn't be used by anything else |
| // because they don't do the error checking and sending to the |
| // network layer that the other setters do. |
| void set_server_hostname(const std::string& server_hostname) { |
| server_hostname_ = server_hostname; |
| } |
| void set_provider_type(ProviderType provider_type) { |
| provider_type_ = provider_type; |
| } |
| void set_ca_cert_pem(const std::string& ca_cert_pem) { |
| ca_cert_pem_ = ca_cert_pem; |
| } |
| void set_psk_passphrase(const std::string& psk_passphrase) { |
| psk_passphrase_ = psk_passphrase; |
| } |
| void set_psk_passphrase_required(bool psk_passphrase_required) { |
| psk_passphrase_required_ = psk_passphrase_required; |
| } |
| void set_client_cert_id(const std::string& client_cert_id) { |
| client_cert_id_ = client_cert_id; |
| } |
| void set_username(const std::string& username) { username_ = username; } |
| void set_user_passphrase(const std::string& user_passphrase) { |
| user_passphrase_ = user_passphrase; |
| } |
| void set_user_passphrase_required(bool user_passphrase_required) { |
| user_passphrase_required_ = user_passphrase_required; |
| } |
| void set_group_name(const std::string& group_name) { |
| group_name_ = group_name; |
| } |
| |
| // Matches the client certificate pattern by checking to see if a certificate |
| // exists that meets the pattern criteria. If it finds one, it sets the |
| // appropriate network property. If not, it passes |connect| to the |
| // EnrollmentDelegate to do something with the enrollment URI (e.g. launch a |
| // dialog) to install the certificate, and then invoke |connect|. If |
| // |allow_enroll| is false, then the enrollment handler will not be invoked in |
| // the case of a missing certificate. |
| void MatchCertificatePattern(bool allow_enroll, const base::Closure& connect); |
| |
| // Network overrides. |
| virtual void EraseCredentials() OVERRIDE; |
| virtual void CalculateUniqueId() OVERRIDE; |
| |
| std::string server_hostname_; |
| ProviderType provider_type_; |
| std::string ca_cert_pem_; |
| std::string psk_passphrase_; |
| bool psk_passphrase_required_; |
| // PKCS#11 ID for client certificate. |
| std::string client_cert_id_; |
| std::string username_; |
| std::string user_passphrase_; |
| bool user_passphrase_required_; |
| std::string group_name_; |
| |
| // Weak pointer factory for wrapping pointers to this network in callbacks. |
| base::WeakPtrFactory<VirtualNetwork> weak_pointer_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(VirtualNetwork); |
| }; |
| typedef std::vector<VirtualNetwork*> VirtualNetworkVector; |
| |
| // Base class for networks of TYPE_WIFI or TYPE_CELLULAR. |
| class WirelessNetwork : public Network { |
| public: |
| // Test API for accessing setters in tests. |
| class TestApi { |
| public: |
| explicit TestApi(WirelessNetwork* network) : network_(network) {} |
| void SetStrength(int strength) { network_->set_strength(strength); } |
| private: |
| WirelessNetwork* network_; |
| }; |
| friend class TestApi; |
| |
| int strength() const { return strength_; } |
| |
| protected: |
| WirelessNetwork(const std::string& service_path, |
| ConnectionType type) |
| : Network(service_path, type), strength_(0) {} |
| |
| private: |
| // This allows NativeWirelessNetworkParser access to device privates |
| // so that they can be reconstituted during parsing. The parsers |
| // only access things through the private set_ functions so that |
| // this class can evolve without having to change all the parsers. |
| friend class NativeWirelessNetworkParser; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // The friend parsers use this. |
| void set_strength(int strength) { strength_ = strength; } |
| |
| int strength_; // 0-100 |
| |
| DISALLOW_COPY_AND_ASSIGN(WirelessNetwork); |
| }; |
| |
| // Class for networks of TYPE_CELLULAR. |
| class CellularNetwork : public WirelessNetwork { |
| public: |
| // Test API for accessing setters in tests. |
| class TestApi { |
| public: |
| explicit TestApi(CellularNetwork* network) : network_(network) {} |
| void SetRoamingState(NetworkRoamingState roaming_state) { |
| network_->set_roaming_state(roaming_state); |
| } |
| private: |
| CellularNetwork* network_; |
| }; |
| friend class TestApi; |
| |
| explicit CellularNetwork(const std::string& service_path); |
| virtual ~CellularNetwork(); |
| |
| // Starts device activation process. Returns false if the device state does |
| // not permit activation. |
| virtual bool StartActivation(); |
| virtual void CompleteActivation(); |
| |
| bool activate_over_non_cellular_network() const { |
| return activate_over_non_cellular_network_; |
| } |
| const ActivationState activation_state() const { return activation_state_; } |
| bool activated() const { |
| return activation_state() == ACTIVATION_STATE_ACTIVATED; |
| } |
| const NetworkTechnology network_technology() const { |
| return network_technology_; |
| } |
| const NetworkRoamingState roaming_state() const { return roaming_state_; } |
| const std::string& operator_name() const { return operator_name_; } |
| const std::string& operator_code() const { return operator_code_; } |
| const std::string& operator_country() const { return operator_country_; } |
| bool out_of_credits() const { return out_of_credits_; } |
| const std::string& payment_url() const { return payment_url_; } |
| const std::string& usage_url() const { return usage_url_; } |
| const std::string& post_data() const { return post_data_; } |
| const bool using_post() const { return using_post_; } |
| const CellularApn& apn() const { return apn_; } |
| const CellularApn& last_good_apn() const { return last_good_apn_; } |
| |
| // Sets the APN to use in establishing data connections. Only |
| // the fields of the APN that are needed for making connections |
| // are passed to shill. The name, localized_name, and language |
| // fields are ignored. |
| void SetApn(const CellularApn& apn); |
| |
| // Returns true if network supports activation. |
| bool SupportsActivation() const; |
| |
| // Returns whether the network needs to be activated. |
| bool NeedsActivation() const; |
| |
| // Return a string representation of network technology. |
| std::string GetNetworkTechnologyString() const; |
| // Return a string representation of activation state. |
| std::string GetActivationStateString() const; |
| // Return a string representation of roaming state. |
| std::string GetRoamingStateString() const; |
| |
| // Return a string representation of |activation_state|. |
| static std::string ActivationStateToString(ActivationState activation_state); |
| |
| private: |
| // This allows NativeCellularNetworkParser access to device privates |
| // so that they can be reconstituted during parsing. The parsers |
| // only access things through the private set_ functions so that |
| // this class can evolve without having to change all the parsers. |
| friend class NativeCellularNetworkParser; |
| // We reach directly into the network for testing purposes. |
| friend class MobileActivatorTest; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // Use these functions at your peril. They are used by the various |
| // parsers to set state, and really shouldn't be used by anything else |
| // because they don't do the error checking and sending to the |
| // network layer that the other setters do. |
| void set_activate_over_non_cellular_network(bool value) { |
| activate_over_non_cellular_network_ = value; |
| } |
| void set_activation_state(ActivationState activation_state) { |
| activation_state_ = activation_state; |
| } |
| void set_network_technology(NetworkTechnology network_technology) { |
| network_technology_ = network_technology; |
| } |
| void set_roaming_state(NetworkRoamingState roaming_state) { |
| roaming_state_ = roaming_state; |
| } |
| void set_operator_name(const std::string& operator_name) { |
| operator_name_ = operator_name; |
| } |
| void set_operator_code(const std::string& operator_code) { |
| operator_code_ = operator_code; |
| } |
| void set_operator_country(const std::string& operator_country) { |
| operator_country_ = operator_country; |
| } |
| void set_out_of_credits(bool out_of_credits) { |
| out_of_credits_ = out_of_credits; |
| } |
| void set_payment_url(const std::string& payment_url) { |
| payment_url_ = payment_url; |
| } |
| void set_post_data(const std::string& post_data) { |
| post_data_ = post_data; |
| } |
| void set_using_post(bool using_post) { |
| using_post_ = using_post; |
| } |
| void set_usage_url(const std::string& usage_url) { usage_url_ = usage_url; } |
| void set_apn(const base::DictionaryValue& apn) { apn_.Set(apn); } |
| void set_last_good_apn(const base::DictionaryValue& last_good_apn) { |
| last_good_apn_.Set(last_good_apn); |
| } |
| |
| bool activate_over_non_cellular_network_; |
| bool out_of_credits_; |
| ActivationState activation_state_; |
| NetworkTechnology network_technology_; |
| NetworkRoamingState roaming_state_; |
| // Carrier Info |
| std::string operator_name_; |
| std::string operator_code_; |
| std::string operator_country_; |
| std::string payment_url_; |
| std::string usage_url_; |
| std::string post_data_; |
| bool using_post_; |
| // Cached values |
| CellularApn apn_; |
| CellularApn last_good_apn_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CellularNetwork); |
| }; |
| typedef std::vector<CellularNetwork*> CellularNetworkVector; |
| |
| // Class for networks of TYPE_WIFI. |
| class WifiNetwork : public WirelessNetwork { |
| public: |
| // Test API for accessing setters in tests. |
| class TestApi { |
| public: |
| explicit TestApi(WifiNetwork* network) : network_(network) {} |
| void SetEncryption(ConnectionSecurity encryption) { |
| network_->set_encryption(encryption); |
| } |
| void SetSsid(const std::string& ssid) { |
| network_->SetSsid(ssid); |
| } |
| void SetHexSsid(const std::string& ssid_hex) { |
| network_->SetHexSsid(ssid_hex); |
| } |
| private: |
| WifiNetwork* network_; |
| }; |
| friend class TestApi; |
| |
| explicit WifiNetwork(const std::string& service_path); |
| virtual ~WifiNetwork(); |
| |
| bool encrypted() const { return encryption_ != SECURITY_NONE; } |
| ConnectionSecurity encryption() const { return encryption_; } |
| const std::string& passphrase() const { return passphrase_; } |
| const std::string& identity() const { return identity_; } |
| bool passphrase_required() const { return passphrase_required_; } |
| bool hidden_ssid() const { return hidden_ssid_; } |
| const std::string& bssid() const { return bssid_; } |
| int frequency() const { return frequency_; } |
| |
| EAPMethod eap_method() const { return eap_method_; } |
| EAPPhase2Auth eap_phase_2_auth() const { return eap_phase_2_auth_; } |
| const std::string& eap_server_ca_cert_pem() const { |
| return eap_server_ca_cert_pem_; } |
| const std::string& eap_client_cert_pkcs11_id() const { |
| return eap_client_cert_pkcs11_id_; } |
| const bool eap_use_system_cas() const { return eap_use_system_cas_; } |
| const std::string& eap_identity() const { return eap_identity_; } |
| const std::string& eap_anonymous_identity() const { |
| return eap_anonymous_identity_; |
| } |
| const std::string& eap_passphrase() const { return eap_passphrase_; } |
| const bool eap_save_credentials() const { return eap_save_credentials_; } |
| |
| const std::string& GetPassphrase() const; |
| |
| // Set property and call SetNetworkServiceProperty: |
| |
| void SetPassphrase(const std::string& passphrase); |
| |
| // 802.1x properties |
| void SetEAPMethod(EAPMethod method); |
| void SetEAPPhase2Auth(EAPPhase2Auth auth); |
| void SetEAPServerCaCertPEM(const std::string& ca_cert_pem); |
| void SetEAPClientCertPkcs11Id(const std::string& pkcs11_id); |
| void SetEAPUseSystemCAs(bool use_system_cas); |
| void SetEAPIdentity(const std::string& identity); |
| void SetEAPAnonymousIdentity(const std::string& identity); |
| void SetEAPPassphrase(const std::string& passphrase); |
| |
| // Sets the well-known PKCS#11 PIN for accessing certificates. |
| void SetCertificatePin(const std::string& pin); |
| |
| // Network overrides. |
| virtual bool RequiresUserProfile() const OVERRIDE; |
| virtual void AttemptConnection(const base::Closure& connect) OVERRIDE; |
| |
| // Return a string representation of the encryption code. |
| // This not translated and should be only used for debugging purposes. |
| std::string GetEncryptionString() const; |
| |
| // Return true if a passphrase or other input is required to connect. |
| bool IsPassphraseRequired() const; |
| |
| protected: |
| // This allows NativeWifiNetworkParser access to device privates so |
| // that they can be reconstituted during parsing. The parsers only |
| // access things through the private set_ functions so that this |
| // class can evolve without having to change all the parsers. |
| friend class NativeWifiNetworkParser; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| // Use these functions at your peril. They are used by the various |
| // parsers to set state, and really shouldn't be used by anything else |
| // because they don't do the error checking and sending to the |
| // network layer that the other setters do. |
| |
| bool SetSsid(const std::string& ssid); |
| bool SetHexSsid(const std::string& ssid_hex); |
| |
| void set_encryption(ConnectionSecurity encryption) { |
| encryption_ = encryption; |
| } |
| void set_passphrase(const std::string& passphrase) { |
| passphrase_ = passphrase; |
| user_passphrase_ = passphrase; |
| } |
| void set_passphrase_required(bool passphrase_required) { |
| passphrase_required_ = passphrase_required; |
| } |
| void set_identity(const std::string& identity) { |
| identity_ = identity; |
| } |
| void set_hidden_ssid(bool hidden_ssid) { |
| hidden_ssid_ = hidden_ssid; |
| } |
| void set_bssid(const std::string& bssid) { bssid_ = bssid; } |
| void set_frequency(int frequency) { frequency_ = frequency; } |
| void set_eap_method(EAPMethod eap_method) { eap_method_ = eap_method; } |
| void set_eap_phase_2_auth(EAPPhase2Auth eap_phase_2_auth) { |
| eap_phase_2_auth_ = eap_phase_2_auth; |
| } |
| void set_eap_server_ca_cert_pem(const std::string& eap_server_ca_cert_pem) { |
| eap_server_ca_cert_pem_ = eap_server_ca_cert_pem; |
| } |
| void set_eap_client_cert_pkcs11_id( |
| const std::string& eap_client_cert_pkcs11_id) { |
| eap_client_cert_pkcs11_id_ = eap_client_cert_pkcs11_id; |
| } |
| void set_eap_use_system_cas(bool eap_use_system_cas) { |
| eap_use_system_cas_ = eap_use_system_cas; |
| } |
| void set_eap_identity(const std::string& eap_identity) { |
| eap_identity_ = eap_identity; |
| } |
| void set_eap_anonymous_identity(const std::string& eap_anonymous_identity) { |
| eap_anonymous_identity_ = eap_anonymous_identity; |
| } |
| void set_eap_passphrase(const std::string& eap_passphrase) { |
| eap_passphrase_ = eap_passphrase; |
| } |
| void set_eap_save_credentials(bool save_credentials) { |
| eap_save_credentials_ = save_credentials; |
| } |
| |
| // Matches the client certificate pattern by checking to see if a certificate |
| // exists that meets the pattern criteria. If it finds one, it sets the |
| // appropriate network property. If not, it passes |connect| to the |
| // EnrollmentDelegate to do something with the enrollment URI (e.g. launch a |
| // dialog) to install the certificate, and then invoke |connect|. If |
| // |allow_enroll| is false, then the enrollment handler will not be invoked in |
| // the case of a missing certificate. |
| void MatchCertificatePattern(bool allow_enroll, const base::Closure& connect); |
| |
| // Network overrides. |
| virtual void EraseCredentials() OVERRIDE; |
| virtual void CalculateUniqueId() OVERRIDE; |
| |
| ConnectionSecurity encryption_; |
| std::string passphrase_; |
| bool passphrase_required_; |
| std::string identity_; |
| bool hidden_ssid_; |
| std::string bssid_; |
| int frequency_; |
| |
| EAPMethod eap_method_; |
| EAPPhase2Auth eap_phase_2_auth_; |
| std::string eap_server_ca_cert_pem_; |
| std::string eap_client_cert_pkcs11_id_; |
| bool eap_use_system_cas_; |
| std::string eap_identity_; |
| std::string eap_anonymous_identity_; |
| std::string eap_passphrase_; |
| bool eap_save_credentials_; |
| |
| // Internal state (not stored in shill). |
| // Passphrase set by user (stored for UI). |
| std::string user_passphrase_; |
| |
| // Weak pointer factory for wrapping pointers to this network in callbacks. |
| base::WeakPtrFactory<WifiNetwork> weak_pointer_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WifiNetwork); |
| }; |
| |
| typedef std::vector<WifiNetwork*> WifiNetworkVector; |
| |
| |
| // Class for networks of TYPE_WIMAX. |
| class WimaxNetwork : public WirelessNetwork { |
| public: |
| explicit WimaxNetwork(const std::string& service_path); |
| virtual ~WimaxNetwork(); |
| |
| bool passphrase_required() const { return passphrase_required_; } |
| const std::string& eap_identity() const { return eap_identity_; } |
| const std::string& eap_passphrase() const { return eap_passphrase_; } |
| |
| void SetEAPIdentity(const std::string& identity); |
| void SetEAPPassphrase(const std::string& passphrase); |
| |
| protected: |
| // This allows NativeWimaxNetworkParser access to device privates so |
| // that they can be reconstituted during parsing. The parsers only |
| // access things through the private set_ functions so that this |
| // class can evolve without having to change all the parsers. |
| friend class NativeWimaxNetworkParser; |
| |
| // This allows the implementation classes access to privates. |
| NETWORK_LIBRARY_IMPL_FRIENDS; |
| |
| void set_eap_identity(const std::string& identity) { |
| eap_identity_ = identity; |
| } |
| void set_eap_passphrase(const std::string& passphrase) { |
| eap_passphrase_ = passphrase; |
| } |
| void set_passphrase_required(bool passphrase_required) { |
| passphrase_required_ = passphrase_required; |
| } |
| |
| // Network overrides. |
| virtual void EraseCredentials() OVERRIDE; |
| virtual void CalculateUniqueId() OVERRIDE; |
| |
| bool passphrase_required_; |
| std::string eap_identity_; |
| std::string eap_passphrase_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WimaxNetwork); |
| }; |
| |
| typedef std::vector<WimaxNetwork*> WimaxNetworkVector; |
| |
| // Geolocation data. |
| struct CellTower { |
| CellTower(); |
| |
| enum RadioType { |
| RADIOTYPE_GSM, |
| RADIOTYPE_CDMA, |
| RADIOTYPE_WCDMA, |
| } radio_type; // GSM/WCDMA CDMA |
| int mobile_country_code; // MCC MCC |
| int mobile_network_code; // MNC SID |
| int location_area_code; // LAC NID |
| int cell_id; // CID BID |
| base::Time timestamp; // Timestamp when this cell was primary |
| int signal_strength; // Radio signal strength measured in dBm. |
| int timing_advance; // Represents the distance from the cell tower. |
| // Each unit is roughly 550 meters. |
| }; |
| |
| typedef std::vector<CellTower> CellTowerVector; |
| |
| // This class handles the interaction with the ChromeOS network library APIs. |
| // Classes can add themselves as observers. Users can get an instance of the |
| // library like this: chromeos::NetworkLibrary::Get() |
| class NetworkLibrary { |
| public: |
| enum HardwareAddressFormat { |
| FORMAT_RAW_HEX, |
| FORMAT_COLON_SEPARATED_HEX |
| }; |
| |
| // Used to configure which IP parameters will be specified by DHCP and which |
| // will be set by the user. |
| enum UseDHCP { |
| USE_DHCP_ADDRESS = 0x1, |
| USE_DHCP_NETMASK = 0x1 << 1, |
| USE_DHCP_GATEWAY = 0x1 << 2, |
| USE_DHCP_NAME_SERVERS = 0x1 << 3, |
| USE_DHCP_ALL_ROUTING_INFO = |
| (USE_DHCP_ADDRESS | |
| USE_DHCP_NETMASK | |
| USE_DHCP_GATEWAY), |
| }; |
| |
| class NetworkProfileObserver { |
| public: |
| // Called when the list of network profiles was changed. |
| virtual void OnProfileListChanged() = 0; |
| protected: |
| virtual ~NetworkProfileObserver() {} |
| }; |
| |
| class NetworkManagerObserver { |
| public: |
| // Called when the state of the network manager has changed, |
| // for example, networks have appeared or disappeared. |
| virtual void OnNetworkManagerChanged(NetworkLibrary* obj) = 0; |
| protected: |
| virtual ~NetworkManagerObserver() {} |
| }; |
| |
| class NetworkObserver { |
| public: |
| // Called when the state of a single network has changed, |
| // for example signal strength or connection state. |
| virtual void OnNetworkChanged(NetworkLibrary* cros, |
| const Network* network) = 0; |
| protected: |
| virtual ~NetworkObserver() {} |
| }; |
| |
| class NetworkDeviceObserver { |
| public: |
| // Called when |device| got notification about new networks available. |
| virtual void OnNetworkDeviceFoundNetworks(NetworkLibrary* cros, |
| const NetworkDevice* device) {} |
| |
| // Called when |device| got notification about SIM lock change. |
| virtual void OnNetworkDeviceSimLockChanged(NetworkLibrary* cros, |
| const NetworkDevice* device) {} |
| protected: |
| virtual ~NetworkDeviceObserver() {} |
| }; |
| |
| class PinOperationObserver { |
| public: |
| // Called when pin async operation has completed. |
| // Network is NULL when we don't have an associated Network object. |
| virtual void OnPinOperationCompleted(NetworkLibrary* cros, |
| PinOperationError error) = 0; |
| protected: |
| virtual ~PinOperationObserver() {} |
| }; |
| |
| virtual ~NetworkLibrary() {} |
| |
| virtual void Init() = 0; |
| |
| // Returns true if libcros was loaded instead of stubbed out. |
| virtual bool IsCros() const = 0; |
| |
| virtual void AddNetworkProfileObserver(NetworkProfileObserver* observer) = 0; |
| virtual void RemoveNetworkProfileObserver( |
| NetworkProfileObserver* observer) = 0; |
| |
| virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) = 0; |
| virtual void RemoveNetworkManagerObserver( |
| NetworkManagerObserver* observer) = 0; |
| |
| // An attempt to add an observer that has already been added for a |
| // give service path will be ignored. |
| virtual void AddNetworkObserver(const std::string& service_path, |
| NetworkObserver* observer) = 0; |
| // Remove an observer of a single network |
| virtual void RemoveNetworkObserver(const std::string& service_path, |
| NetworkObserver* observer) = 0; |
| // Stop |observer| from observing any networks |
| virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) = 0; |
| |
| // Add an observer for a single network device. |
| virtual void AddNetworkDeviceObserver(const std::string& device_path, |
| NetworkDeviceObserver* observer) = 0; |
| // Remove an observer for a single network device. |
| virtual void RemoveNetworkDeviceObserver(const std::string& device_path, |
| NetworkDeviceObserver* observer) = 0; |
| |
| virtual void AddPinOperationObserver(PinOperationObserver* observer) = 0; |
| virtual void RemovePinOperationObserver(PinOperationObserver* observer) = 0; |
| |
| // Return the active or default Ethernet network (or NULL if none). |
| virtual const EthernetNetwork* ethernet_network() const = 0; |
| virtual bool ethernet_connecting() const = 0; |
| virtual bool ethernet_connected() const = 0; |
| |
| // Return the active Wifi network (or NULL if none active). |
| virtual const WifiNetwork* wifi_network() const = 0; |
| virtual bool wifi_connecting() const = 0; |
| virtual bool wifi_connected() const = 0; |
| |
| // Return the active Cellular network (or NULL if none active). |
| virtual const CellularNetwork* cellular_network() const = 0; |
| virtual bool cellular_connecting() const = 0; |
| virtual bool cellular_connected() const = 0; |
| |
| // Return the active Wimax network (or NULL if none active). |
| virtual const WimaxNetwork* wimax_network() const = 0; |
| virtual bool wimax_connecting() const = 0; |
| virtual bool wimax_connected() const = 0; |
| |
| // Return the active virtual network (or NULL if none active). |
| virtual const VirtualNetwork* virtual_network() const = 0; |
| virtual bool virtual_network_connecting() const = 0; |
| virtual bool virtual_network_connected() const = 0; |
| |
| // Return true if any network is currently connected. |
| virtual bool Connected() const = 0; |
| |
| // Return true if any network is currently connecting. |
| virtual bool Connecting() const = 0; |
| |
| // Returns the current list of wifi networks. |
| virtual const WifiNetworkVector& wifi_networks() const = 0; |
| |
| // Returns the list of remembered wifi networks. |
| virtual const WifiNetworkVector& remembered_wifi_networks() const = 0; |
| |
| // Returns the current list of cellular networks. |
| virtual const CellularNetworkVector& cellular_networks() const = 0; |
| |
| // Returns the current list of Wimax networks. |
| virtual const WimaxNetworkVector& wimax_networks() const = 0; |
| |
| // Returns the current list of virtual networks. |
| virtual const VirtualNetworkVector& virtual_networks() const = 0; |
| |
| // Returns the current list of virtual networks. |
| virtual const VirtualNetworkVector& remembered_virtual_networks() const = 0; |
| |
| virtual const Network* active_network() const = 0; |
| virtual const Network* active_nonvirtual_network() const = 0; |
| virtual const Network* connected_network() const = 0; |
| virtual const Network* connecting_network() const = 0; |
| |
| virtual bool ethernet_available() const = 0; |
| virtual bool wifi_available() const = 0; |
| virtual bool wimax_available() const = 0; |
| virtual bool cellular_available() const = 0; |
| |
| virtual bool ethernet_enabled() const = 0; |
| virtual bool wifi_enabled() const = 0; |
| virtual bool wimax_enabled() const = 0; |
| virtual bool cellular_enabled() const = 0; |
| |
| virtual bool wifi_scanning() const = 0; |
| virtual bool cellular_initializing() const = 0; |
| |
| // Return a pointer to the device, if it exists, or NULL. |
| virtual const NetworkDevice* FindNetworkDeviceByPath( |
| const std::string& path) const = 0; |
| |
| // Returns device with TYPE_CELLULAR or TYPE_WIMAX. |
| // Returns NULL if none exists. |
| virtual const NetworkDevice* FindMobileDevice() const = 0; |
| |
| // Returns device with TYPE_CELLULAR. Returns NULL if none exists. |
| virtual const NetworkDevice* FindCellularDevice() const = 0; |
| |
| // Return a pointer to the network, if it exists, or NULL. |
| // NOTE: Never store these results, store service paths instead. |
| // The pattern for doing an operation on a Network is: |
| // Network* network = cros->FindNetworkByPath(service_path); |
| // network->SetFoo(); |
| // network->Connect(); |
| // As long as this is done in sequence on the UI thread it will be safe; |
| // the network list only gets updated on the UI thread. |
| virtual Network* FindNetworkByPath(const std::string& path) const = 0; |
| virtual Network* FindNetworkByUniqueId( |
| const std::string& unique_id) const = 0; |
| virtual WifiNetwork* FindWifiNetworkByPath(const std::string& path) const = 0; |
| virtual CellularNetwork* FindCellularNetworkByPath( |
| const std::string& path) const = 0; |
| virtual WimaxNetwork* FindWimaxNetworkByPath( |
| const std::string& path) const = 0; |
| virtual VirtualNetwork* FindVirtualNetworkByPath( |
| const std::string& path) const = 0; |
| |
| // Return a pointer to the remembered network, if it exists, or NULL. |
| virtual Network* FindRememberedNetworkByPath( |
| const std::string& path) const = 0; |
| |
| // Return a pointer to the ONC dictionary for a network identified by unique |
| // ID. Returns NULL if there is no ONC dictionary available for that network. |
| // The ONC dictionary is usually only present for policy-configure networks |
| // which get reconfigured at startup. |
| virtual const base::DictionaryValue* FindOncForNetwork( |
| const std::string& unique_id) const = 0; |
| |
| // Records information that cellular plan payment has happened. |
| virtual void SignalCellularPlanPayment() = 0; |
| |
| // Returns true if cellular plan payment has been recorded recently. |
| virtual bool HasRecentCellularPlanPayment() = 0; |
| |
| // Returns home carrier ID if available, otherwise empty string is returned. |
| // Carrier ID format: <carrier name> (country). Ex.: "Verizon (us)". |
| virtual const std::string& GetCellularHomeCarrierId() const = 0; |
| |
| // Checks if the current cellular device should be activated by directly |
| // calling it's activate function instead of going through the activation |
| // process. |
| // Note: Currently Sprint is the only carrier using direct activation. |
| virtual bool CellularDeviceUsesDirectActivation() const = 0; |
| |
| // Passes |old_pin|, |new_pin| to change SIM card PIM. |
| virtual void ChangePin(const std::string& old_pin, |
| const std::string& new_pin) = 0; |
| |
| // Passes |pin|, |require_pin| value to change SIM card RequirePin setting. |
| virtual void ChangeRequirePin(bool require_pin, |
| const std::string& pin) = 0; |
| |
| // Passes |pin| to unlock SIM card. |
| virtual void EnterPin(const std::string& pin) = 0; |
| |
| // Passes |puk|, |new_pin| to unblock SIM card. |
| virtual void UnblockPin(const std::string& puk, |
| const std::string& new_pin) = 0; |
| |
| // Request a scan for available cellular networks. |
| virtual void RequestCellularScan() = 0; |
| |
| // Request a register in cellular network with |network_id|. |
| virtual void RequestCellularRegister(const std::string& network_id) = 0; |
| |
| // Change data roaming restriction for current cellular device. |
| virtual void SetCellularDataRoamingAllowed(bool new_value) = 0; |
| |
| // Changes the active cellular carrier to the one provided, calls the closure |
| // once the transition is complete. |
| virtual void SetCarrier(const std::string& carrier, |
| const NetworkOperationCallback& completed) = 0; |
| |
| // Return true if GSM SIM card can work only with enabled roaming. |
| virtual bool IsCellularAlwaysInRoaming() = 0; |
| |
| // Request a scan for new wifi networks. |
| virtual void RequestNetworkScan() = 0; |
| |
| // TODO(joth): Add GetCellTowers to retrieve a CellTowerVector. |
| |
| // Returns false if there is no way to connect to this network, even with |
| // user input (e.g. it requires a user profile but none is available). |
| virtual bool CanConnectToNetwork(const Network* network) const = 0; |
| |
| // Connect to the specified wireless network. |
| virtual void ConnectToWifiNetwork(WifiNetwork* network) = 0; |
| |
| // Connect to the specified wireless network and set its profile |
| // to SHARED if |shared| is true, otherwise to USER. |
| virtual void ConnectToWifiNetwork(WifiNetwork* network, bool shared) = 0; |
| |
| // Connect to the specified cellular network. |
| virtual void ConnectToCellularNetwork(CellularNetwork* network) = 0; |
| |
| // Connect to the specified WiMAX network. |
| virtual void ConnectToWimaxNetwork(WimaxNetwork* network) = 0; |
| |
| // Connect to the specified WiMAX network and set its profile |
| // to SHARED if |shared| is true, otherwise to USER. |
| virtual void ConnectToWimaxNetwork(WimaxNetwork* network, bool shared) = 0; |
| |
| // Connect to the specified virtual network. |
| virtual void ConnectToVirtualNetwork(VirtualNetwork* network) = 0; |
| |
| // Connect to an unconfigured network with given SSID, security, passphrase, |
| // and optional EAP configuration. If |security| is SECURITY_8021X, |
| // |eap_config| must be provided. |
| struct EAPConfigData { |
| EAPConfigData(); |
| ~EAPConfigData(); |
| EAPMethod method; |
| EAPPhase2Auth auth; |
| std::string server_ca_cert_pem; |
| bool use_system_cas; |
| std::string client_cert_pkcs11_id; |
| std::string identity; |
| std::string anonymous_identity; |
| }; |
| virtual void ConnectToUnconfiguredWifiNetwork( |
| const std::string& ssid, |
| ConnectionSecurity security, |
| const std::string& passphrase, |
| const EAPConfigData* eap_config, |
| bool save_credentials, |
| bool shared) = 0; |
| |
| // Connect to the specified virtual network with service name. |
| // VPNConfigData must be provided. |
| struct VPNConfigData { |
| VPNConfigData(); |
| ~VPNConfigData(); |
| std::string psk; |
| std::string server_ca_cert_pem; |
| std::string client_cert_pkcs11_id; |
| std::string username; |
| std::string user_passphrase; |
| std::string otp; |
| std::string group_name; |
| bool save_credentials; |
| }; |
| virtual void ConnectToUnconfiguredVirtualNetwork( |
| const std::string& service_name, |
| const std::string& server_hostname, |
| ProviderType provider_type, |
| const VPNConfigData& config) = 0; |
| |
| // Disconnect from the specified network. |
| virtual void DisconnectFromNetwork(const Network* network) = 0; |
| |
| // Forget the network corresponding to service_path. |
| virtual void ForgetNetwork(const std::string& service_path) = 0; |
| |
| // Enables/disables the ethernet network device. |
| virtual void EnableEthernetNetworkDevice(bool enable) = 0; |
| |
| // Enables/disables the wifi network device. |
| virtual void EnableWifiNetworkDevice(bool enable) = 0; |
| |
| // Enables/disables the wimax network device. |
| virtual void EnableWimaxNetworkDevice(bool enable) = 0; |
| |
| // Enables/disables the cellular network device. |
| virtual void EnableCellularNetworkDevice(bool enable) = 0; |
| |
| // Fetches IP configs and hardware address for a given device_path and returns |
| // them via the given callback. |
| virtual void GetIPConfigs(const std::string& device_path, |
| HardwareAddressFormat format, |
| const NetworkGetIPConfigsCallback& callback) = 0; |
| |
| // Sets the configuration of the IP parameters. This is called when user |
| // changes IP settings from dhcp to static or vice versa or when user changes |
| // the ip config info. If nothing is changed, this method does nothing. |
| // |dhcp_usage_mask| is a bitmask composed of items from the UseDHCP enum, and |
| // indicates which of the supplied values are overridden by values given by |
| // the default IP acquisition technique for the service (DHCP, usually). |
| virtual void SetIPParameters(const std::string& service_path, |
| const std::string& address, |
| const std::string& netmask, |
| const std::string& gateway, |
| const std::string& name_servers, |
| int dhcp_usage_mask) = 0; |
| |
| // Requests the service properties associated with |service_path|. Calls |
| // |callback| with the properties when competed. |
| typedef base::Callback<void(const std::string& service_path, |
| const base::DictionaryValue* properties)> |
| NetworkServicePropertiesCallback; |
| virtual void RequestNetworkServiceProperties( |
| const std::string& service_path, |
| const NetworkServicePropertiesCallback& callback) = 0; |
| |
| // Load networks from a list of NetworkConfigurations of ONC. |
| virtual void LoadOncNetworks(const base::ListValue& network_configs, |
| onc::ONCSource source) = 0; |
| |
| // This sets the active network for the network type. Note: priority order |
| // is unchanged (i.e. if a wifi network is set to active, but an ethernet |
| // network is still active, active_network() will still return the ethernet |
| // network). Other networks of the same type will become inactive. |
| // Used for testing. |
| virtual bool SetActiveNetwork(ConnectionType type, |
| const std::string& service_path) = 0; |
| |
| // Factory function, creates a new instance and returns ownership. |
| // For normal usage, access the singleton via NetworkLibrary::Get(). |
| static NetworkLibrary* GetImpl(bool stub); |
| |
| // Initializes the global instance. |
| static void Initialize(bool use_stub); |
| |
| // Destroys the global instance. Must be called before AtExitManager is |
| // destroyed to ensure a clean shutdown. |
| static void Shutdown(); |
| |
| // Gets the global instance. Returns NULL if Initialize() has not been |
| // called (or Shutdown() has been called). |
| static NetworkLibrary* Get(); |
| |
| // Sets the network library to be returned from Get(). The existing network |
| // library will be deleted. |
| static void SetForTesting(NetworkLibrary* network_library); |
| }; |
| |
| // The class is used for enabling the stub libcros, and cleaning it up at |
| // the end of the object lifetime. Useful for testing. |
| class ScopedStubNetworkLibraryEnabler { |
| public: |
| ScopedStubNetworkLibraryEnabler() { |
| NetworkLibrary::Initialize(true); |
| } |
| |
| ~ScopedStubNetworkLibraryEnabler() { |
| NetworkLibrary::Shutdown(); |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ScopedStubNetworkLibraryEnabler); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |