| Index: chrome/browser/chromeos/cros/network_library.cc
|
| ===================================================================
|
| --- chrome/browser/chromeos/cros/network_library.cc (revision 64441)
|
| +++ chrome/browser/chromeos/cros/network_library.cc (working copy)
|
| @@ -8,6 +8,7 @@
|
| #include <map>
|
|
|
| #include "app/l10n_util.h"
|
| +#include "base/stl_util-inl.h"
|
| #include "base/string_number_conversions.h"
|
| #include "base/string_util.h"
|
| #include "base/utf_string_conversions.h"
|
| @@ -83,6 +84,15 @@
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Network
|
|
|
| +Network::Network(const Network& network) {
|
| + service_path_ = network.service_path();
|
| + device_path_ = network.device_path();
|
| + ip_address_ = network.ip_address();
|
| + type_ = network.type();
|
| + state_ = network.state();
|
| + error_ = network.error();
|
| +}
|
| +
|
| void Network::Clear() {
|
| state_ = STATE_UNKNOWN;
|
| error_ = ERROR_UNKNOWN;
|
| @@ -91,16 +101,16 @@
|
| ip_address_.clear();
|
| }
|
|
|
| -void Network::ConfigureFromService(const ServiceInfo& service) {
|
| - type_ = service.type;
|
| - state_ = service.state;
|
| - error_ = service.error;
|
| - service_path_ = SafeString(service.service_path);
|
| - device_path_ = SafeString(service.device_path);
|
| +Network::Network(const ServiceInfo* service) {
|
| + type_ = service->type;
|
| + state_ = service->state;
|
| + error_ = service->error;
|
| + service_path_ = SafeString(service->service_path);
|
| + device_path_ = SafeString(service->device_path);
|
| ip_address_.clear();
|
| // If connected, get ip config.
|
| - if (EnsureCrosLoaded() && connected() && service.device_path) {
|
| - IPConfigStatus* ipconfig_status = ListIPConfigs(service.device_path);
|
| + if (EnsureCrosLoaded() && connected() && service->device_path) {
|
| + IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path);
|
| if (ipconfig_status) {
|
| for (int i = 0; i < ipconfig_status->size; i++) {
|
| IPConfig ipconfig = ipconfig_status->ips[i];
|
| @@ -180,7 +190,22 @@
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // WirelessNetwork
|
| +WirelessNetwork::WirelessNetwork(const WirelessNetwork& network)
|
| + : Network(network) {
|
| + name_ = network.name();
|
| + strength_ = network.strength();
|
| + auto_connect_ = network.auto_connect();
|
| + favorite_ = network.favorite();
|
| +}
|
|
|
| +WirelessNetwork::WirelessNetwork(const ServiceInfo* service)
|
| + : Network(service) {
|
| + name_ = SafeString(service->name);
|
| + strength_ = service->strength;
|
| + auto_connect_ = service->auto_connect;
|
| + favorite_ = service->favorite;
|
| +}
|
| +
|
| void WirelessNetwork::Clear() {
|
| Network::Clear();
|
| name_.clear();
|
| @@ -189,15 +214,7 @@
|
| favorite_ = false;
|
| }
|
|
|
| -void WirelessNetwork::ConfigureFromService(const ServiceInfo& service) {
|
| - Network::ConfigureFromService(service);
|
| - name_ = SafeString(service.name);
|
| - strength_ = service.strength;
|
| - auto_connect_ = service.auto_connect;
|
| - favorite_ = service.favorite;
|
| -}
|
|
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // CellularNetwork
|
|
|
| @@ -211,6 +228,62 @@
|
| type_ = TYPE_CELLULAR;
|
| }
|
|
|
| +CellularNetwork::CellularNetwork(const CellularNetwork& network)
|
| + : WirelessNetwork(network) {
|
| + activation_state_ = network.activation_state();
|
| + network_technology_ = network.network_technology();
|
| + roaming_state_ = network.roaming_state();
|
| + restricted_pool_ = network.restricted_pool();
|
| + service_name_ = network.service_name();
|
| + operator_name_ = network.operator_name();
|
| + operator_code_ = network.operator_code();
|
| + payment_url_ = network.payment_url();
|
| + meid_ = network.meid();
|
| + imei_ = network.imei();
|
| + imsi_ = network.imsi();
|
| + esn_ = network.esn();
|
| + mdn_ = network.mdn();
|
| + min_ = network.min();
|
| + model_id_ = network.model_id();
|
| + manufacturer_ = network.manufacturer();
|
| + firmware_revision_ = network.firmware_revision();
|
| + hardware_revision_ = network.hardware_revision();
|
| + last_update_ = network.last_update();
|
| + prl_version_ = network.prl_version();
|
| + type_ = TYPE_CELLULAR;
|
| +}
|
| +
|
| +CellularNetwork::CellularNetwork(const ServiceInfo* service)
|
| + : WirelessNetwork(service) {
|
| + service_name_ = SafeString(service->name);
|
| + activation_state_ = service->activation_state;
|
| + network_technology_ = service->network_technology;
|
| + roaming_state_ = service->roaming_state;
|
| + restricted_pool_ = service->restricted_pool;
|
| + // Carrier Info
|
| + if (service->carrier_info) {
|
| + operator_name_ = SafeString(service->carrier_info->operator_name);
|
| + operator_code_ = SafeString(service->carrier_info->operator_code);
|
| + payment_url_ = SafeString(service->carrier_info->payment_url);
|
| + }
|
| + // Device Info
|
| + if (service->device_info) {
|
| + meid_ = SafeString(service->device_info->MEID);
|
| + imei_ = SafeString(service->device_info->IMEI);
|
| + imsi_ = SafeString(service->device_info->IMSI);
|
| + esn_ = SafeString(service->device_info->ESN);
|
| + mdn_ = SafeString(service->device_info->MDN);
|
| + min_ = SafeString(service->device_info->MIN);
|
| + model_id_ = SafeString(service->device_info->model_id);
|
| + manufacturer_ = SafeString(service->device_info->manufacturer);
|
| + firmware_revision_ = SafeString(service->device_info->firmware_revision);
|
| + hardware_revision_ = SafeString(service->device_info->hardware_revision);
|
| + last_update_ = SafeString(service->device_info->last_update);
|
| + prl_version_ = service->device_info->PRL_version;
|
| + }
|
| + type_ = TYPE_CELLULAR;
|
| +}
|
| +
|
| bool CellularNetwork::StartActivation() const {
|
| if (!EnsureCrosLoaded())
|
| return false;
|
| @@ -241,36 +314,6 @@
|
| prl_version_ = 0;
|
| }
|
|
|
| -void CellularNetwork::ConfigureFromService(const ServiceInfo& service) {
|
| - WirelessNetwork::ConfigureFromService(service);
|
| - service_name_ = SafeString(service.name);
|
| - activation_state_ = service.activation_state;
|
| - network_technology_ = service.network_technology;
|
| - roaming_state_ = service.roaming_state;
|
| - restricted_pool_ = service.restricted_pool;
|
| - // Carrier Info
|
| - if (service.carrier_info) {
|
| - operator_name_ = SafeString(service.carrier_info->operator_name);
|
| - operator_code_ = SafeString(service.carrier_info->operator_code);
|
| - payment_url_ = SafeString(service.carrier_info->payment_url);
|
| - }
|
| - // Device Info
|
| - if (service.device_info) {
|
| - meid_ = SafeString(service.device_info->MEID);
|
| - imei_ = SafeString(service.device_info->IMEI);
|
| - imsi_ = SafeString(service.device_info->IMSI);
|
| - esn_ = SafeString(service.device_info->ESN);
|
| - mdn_ = SafeString(service.device_info->MDN);
|
| - min_ = SafeString(service.device_info->MIN);
|
| - model_id_ = SafeString(service.device_info->model_id);
|
| - manufacturer_ = SafeString(service.device_info->manufacturer);
|
| - firmware_revision_ = SafeString(service.device_info->firmware_revision);
|
| - hardware_revision_ = SafeString(service.device_info->hardware_revision);
|
| - last_update_ = SafeString(service.device_info->last_update);
|
| - prl_version_ = service.device_info->PRL_version;
|
| - }
|
| -}
|
| -
|
| bool CellularNetwork::is_gsm() const {
|
| return network_technology_ != NETWORK_TECHNOLOGY_EVDO &&
|
| network_technology_ != NETWORK_TECHNOLOGY_1XRTT &&
|
| @@ -400,8 +443,20 @@
|
| type_ = TYPE_WIFI;
|
| }
|
|
|
| -WifiNetwork::WifiNetwork(const ServiceInfo& service) : WirelessNetwork() {
|
| - ConfigureFromService(service);
|
| +WifiNetwork::WifiNetwork(const WifiNetwork& network)
|
| + : WirelessNetwork(network) {
|
| + encryption_ = network.encryption();
|
| + passphrase_ = network.passphrase();
|
| + identity_ = network.identity();
|
| + cert_path_ = network.cert_path();
|
| +}
|
| +
|
| +WifiNetwork::WifiNetwork(const ServiceInfo* service)
|
| + : WirelessNetwork(service) {
|
| + encryption_ = service->security;
|
| + passphrase_ = SafeString(service->passphrase);
|
| + identity_ = SafeString(service->identity);
|
| + cert_path_ = SafeString(service->cert_path);
|
| type_ = TYPE_WIFI;
|
| }
|
|
|
| @@ -413,14 +468,6 @@
|
| cert_path_.clear();
|
| }
|
|
|
| -void WifiNetwork::ConfigureFromService(const ServiceInfo& service) {
|
| - WirelessNetwork::ConfigureFromService(service);
|
| - encryption_ = service.security;
|
| - passphrase_ = SafeString(service.passphrase);
|
| - identity_ = SafeString(service.identity);
|
| - cert_path_ = SafeString(service.cert_path);
|
| -}
|
| -
|
| std::string WifiNetwork::GetEncryptionString() {
|
| switch (encryption_) {
|
| case SECURITY_UNKNOWN:
|
| @@ -465,6 +512,9 @@
|
| NetworkLibraryImpl()
|
| : network_status_connection_(NULL),
|
| data_plan_monitor_(NULL),
|
| + ethernet_(NULL),
|
| + wifi_(NULL),
|
| + cellular_(NULL),
|
| available_devices_(0),
|
| enabled_devices_(0),
|
| connected_devices_(0),
|
| @@ -485,11 +535,8 @@
|
| }
|
| // DCHECK(!observers_.size());
|
| DCHECK(!property_observers_.size());
|
| - for (PropertyChangeObserverMap::iterator iter = property_observers_.begin();
|
| - iter != property_observers_.end();
|
| - ++iter) {
|
| - delete iter->second;
|
| - }
|
| + STLDeleteValues(&property_observers_);
|
| + ClearNetworks();
|
| }
|
|
|
| void AddObserver(Observer* observer) {
|
| @@ -504,6 +551,8 @@
|
| PropertyObserver* observer) {
|
| DCHECK(service_path);
|
| DCHECK(observer);
|
| + if (!EnsureCrosLoaded())
|
| + return;
|
| // First, add the observer to the callback map.
|
| PropertyChangeObserverMap::iterator iter = property_observers_.find(
|
| std::string(service_path));
|
| @@ -534,17 +583,29 @@
|
| }
|
| }
|
|
|
| - virtual const EthernetNetwork& ethernet_network() const { return ethernet_; }
|
| - virtual bool ethernet_connecting() const { return ethernet_.connecting(); }
|
| - virtual bool ethernet_connected() const { return ethernet_.connected(); }
|
| + virtual EthernetNetwork* ethernet_network() { return ethernet_; }
|
| + virtual bool ethernet_connecting() const {
|
| + return ethernet_ ? ethernet_->connecting() : false;
|
| + }
|
| + virtual bool ethernet_connected() const {
|
| + return ethernet_ ? ethernet_->connected() : false;
|
| + }
|
|
|
| - virtual const WifiNetwork& wifi_network() const { return wifi_; }
|
| - virtual bool wifi_connecting() const { return wifi_.connecting(); }
|
| - virtual bool wifi_connected() const { return wifi_.connected(); }
|
| + virtual WifiNetwork* wifi_network() { return wifi_; }
|
| + virtual bool wifi_connecting() const {
|
| + return wifi_ ? wifi_->connecting() : false;
|
| + }
|
| + virtual bool wifi_connected() const {
|
| + return wifi_ ? wifi_->connected() : false;
|
| + }
|
|
|
| - virtual const CellularNetwork& cellular_network() const { return cellular_; }
|
| - virtual bool cellular_connecting() const { return cellular_.connecting(); }
|
| - virtual bool cellular_connected() const { return cellular_.connected(); }
|
| + virtual CellularNetwork* cellular_network() { return cellular_; }
|
| + virtual bool cellular_connecting() const {
|
| + return cellular_ ? cellular_->connecting() : false;
|
| + }
|
| + virtual bool cellular_connected() const {
|
| + return cellular_ ? cellular_->connected() : false;
|
| + }
|
|
|
| bool Connected() const {
|
| return ethernet_connected() || wifi_connected() || cellular_connected();
|
| @@ -557,12 +618,12 @@
|
| const std::string& IPAddress() const {
|
| // Returns highest priority IP address.
|
| if (ethernet_connected())
|
| - return ethernet_.ip_address();
|
| + return ethernet_->ip_address();
|
| if (wifi_connected())
|
| - return wifi_.ip_address();
|
| + return wifi_->ip_address();
|
| if (cellular_connected())
|
| - return cellular_.ip_address();
|
| - return ethernet_.ip_address();
|
| + return cellular_->ip_address();
|
| + return ethernet_->ip_address();
|
| }
|
|
|
| virtual const WifiNetworkVector& wifi_networks() const {
|
| @@ -577,34 +638,16 @@
|
| return cellular_networks_;
|
| }
|
|
|
| - virtual const CellularNetworkVector& remembered_cellular_networks() const {
|
| - return remembered_cellular_networks_;
|
| - }
|
| -
|
| /////////////////////////////////////////////////////////////////////////////
|
|
|
| - virtual bool FindWifiNetworkByPath(
|
| - const std::string& path, WifiNetwork* result) const {
|
| - const WifiNetwork* wifi =
|
| - GetWirelessNetworkByPath(wifi_networks_, path);
|
| - if (wifi) {
|
| - if (result)
|
| - *result = *wifi;
|
| - return true;
|
| - }
|
| - return false;
|
| + virtual WifiNetwork* FindWifiNetworkByPath(
|
| + const std::string& path) {
|
| + return GetWirelessNetworkByPath(wifi_networks_, path);
|
| }
|
|
|
| - virtual bool FindCellularNetworkByPath(
|
| - const std::string& path, CellularNetwork* result) const {
|
| - const CellularNetwork* cellular =
|
| - GetWirelessNetworkByPath(cellular_networks_, path);
|
| - if (cellular) {
|
| - if (result)
|
| - *result = *cellular;
|
| - return true;
|
| - }
|
| - return false;
|
| + virtual CellularNetwork* FindCellularNetworkByPath(
|
| + const std::string& path) {
|
| + return GetWirelessNetworkByPath(cellular_networks_, path);
|
| }
|
|
|
| virtual void RequestWifiScan() {
|
| @@ -638,27 +681,28 @@
|
| return true;
|
| }
|
|
|
| - virtual void ConnectToWifiNetwork(WifiNetwork network,
|
| + virtual void ConnectToWifiNetwork(const WifiNetwork* network,
|
| const std::string& password,
|
| const std::string& identity,
|
| const std::string& certpath) {
|
| - if (EnsureCrosLoaded()) {
|
| - if (ConnectToNetworkWithCertInfo(network.service_path().c_str(),
|
| - password.empty() ? NULL : password.c_str(),
|
| - identity.empty() ? NULL : identity.c_str(),
|
| - certpath.empty() ? NULL : certpath.c_str())) {
|
| - // Update local cache and notify listeners.
|
| - WifiNetwork* wifi = GetWirelessNetworkByPath(
|
| - wifi_networks_, network.service_path());
|
| - if (wifi) {
|
| - wifi->set_passphrase(password);
|
| - wifi->set_identity(identity);
|
| - wifi->set_cert_path(certpath);
|
| - wifi->set_connecting(true);
|
| - wifi_ = *wifi;
|
| - }
|
| - NotifyNetworkChanged();
|
| + DCHECK(network);
|
| + if (!EnsureCrosLoaded())
|
| + return;
|
| + if (ConnectToNetworkWithCertInfo(network->service_path().c_str(),
|
| + password.empty() ? NULL : password.c_str(),
|
| + identity.empty() ? NULL : identity.c_str(),
|
| + certpath.empty() ? NULL : certpath.c_str())) {
|
| + // Update local cache and notify listeners.
|
| + WifiNetwork* wifi = GetWirelessNetworkByPath(
|
| + wifi_networks_, network->service_path());
|
| + if (wifi) {
|
| + wifi->set_passphrase(password);
|
| + wifi->set_identity(identity);
|
| + wifi->set_cert_path(certpath);
|
| + wifi->set_connecting(true);
|
| + wifi_ = wifi;
|
| }
|
| + NotifyNetworkChanged();
|
| }
|
| }
|
|
|
| @@ -667,119 +711,116 @@
|
| const std::string& identity,
|
| const std::string& certpath,
|
| bool auto_connect) {
|
| - if (EnsureCrosLoaded()) {
|
| - // First create a service from hidden network.
|
| - ServiceInfo* service = GetWifiService(ssid.c_str(),
|
| - SECURITY_UNKNOWN);
|
| - if (service) {
|
| - // Set auto-connect.
|
| - SetAutoConnect(service->service_path, auto_connect);
|
| - // Now connect to that service.
|
| - ConnectToNetworkWithCertInfo(service->service_path,
|
| - password.empty() ? NULL : password.c_str(),
|
| - identity.empty() ? NULL : identity.c_str(),
|
| - certpath.empty() ? NULL : certpath.c_str());
|
| + if (!EnsureCrosLoaded())
|
| + return;
|
|
|
| - // Clean up ServiceInfo object.
|
| - FreeServiceInfo(service);
|
| - } else {
|
| - LOG(WARNING) << "Cannot find hidden network: " << ssid;
|
| - // TODO(chocobo): Show error message.
|
| - }
|
| + // First create a service from hidden network.
|
| + ServiceInfo* service = GetWifiService(ssid.c_str(),
|
| + SECURITY_UNKNOWN);
|
| + if (service) {
|
| + // Set auto-connect.
|
| + SetAutoConnect(service->service_path, auto_connect);
|
| + // Now connect to that service.
|
| + ConnectToNetworkWithCertInfo(service->service_path,
|
| + password.empty() ? NULL : password.c_str(),
|
| + identity.empty() ? NULL : identity.c_str(),
|
| + certpath.empty() ? NULL : certpath.c_str());
|
| +
|
| + // Clean up ServiceInfo object.
|
| + FreeServiceInfo(service);
|
| + } else {
|
| + LOG(WARNING) << "Cannot find hidden network: " << ssid;
|
| + // TODO(chocobo): Show error message.
|
| }
|
| }
|
|
|
| - virtual void ConnectToCellularNetwork(CellularNetwork network) {
|
| - if (EnsureCrosLoaded()) {
|
| - if (ConnectToNetwork(network.service_path().c_str(), NULL)) {
|
| - // Update local cache and notify listeners.
|
| - CellularNetwork* cellular = GetWirelessNetworkByPath(
|
| - cellular_networks_, network.service_path());
|
| - if (cellular) {
|
| - cellular->set_connecting(true);
|
| - cellular_ = *cellular;
|
| - }
|
| - NotifyNetworkChanged();
|
| + virtual void ConnectToCellularNetwork(const CellularNetwork* network) {
|
| + DCHECK(network);
|
| + if (!EnsureCrosLoaded())
|
| + return;
|
| + if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) {
|
| + // Update local cache and notify listeners.
|
| + CellularNetwork* cellular = GetWirelessNetworkByPath(
|
| + cellular_networks_, network->service_path());
|
| + if (cellular) {
|
| + cellular->set_connecting(true);
|
| + cellular_ = cellular;
|
| }
|
| + NotifyNetworkChanged();
|
| }
|
| }
|
|
|
| - virtual void RefreshCellularDataPlans(const CellularNetwork& network) {
|
| - if (!EnsureCrosLoaded())
|
| + virtual void RefreshCellularDataPlans(const CellularNetwork* network) {
|
| + DCHECK(network);
|
| + if (!EnsureCrosLoaded() || !network)
|
| return;
|
| - RequestCellularDataPlanUpdate(network.service_path().c_str());
|
| + RequestCellularDataPlanUpdate(network->service_path().c_str());
|
| }
|
|
|
| - virtual void DisconnectFromWirelessNetwork(const WirelessNetwork& network) {
|
| - if (EnsureCrosLoaded()) {
|
| - if (DisconnectFromNetwork(network.service_path().c_str())) {
|
| - // Update local cache and notify listeners.
|
| - if (network.type() == TYPE_WIFI) {
|
| - WifiNetwork* wifi = GetWirelessNetworkByPath(
|
| - wifi_networks_, network.service_path());
|
| - if (wifi) {
|
| - wifi->set_connected(false);
|
| - wifi_ = WifiNetwork();
|
| - }
|
| - } else if (network.type() == TYPE_CELLULAR) {
|
| - CellularNetwork* cellular = GetWirelessNetworkByPath(
|
| - cellular_networks_, network.service_path());
|
| - if (cellular) {
|
| - cellular->set_connected(false);
|
| - cellular_ = CellularNetwork();
|
| - }
|
| + virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {
|
| + DCHECK(network);
|
| + if (!EnsureCrosLoaded() || !network)
|
| + return;
|
| + if (DisconnectFromNetwork(network->service_path().c_str())) {
|
| + // Update local cache and notify listeners.
|
| + if (network->type() == TYPE_WIFI) {
|
| + WifiNetwork* wifi = GetWirelessNetworkByPath(
|
| + wifi_networks_, network->service_path());
|
| + if (wifi) {
|
| + wifi->set_connected(false);
|
| + wifi_ = NULL;
|
| }
|
| - NotifyNetworkChanged();
|
| + } else if (network->type() == TYPE_CELLULAR) {
|
| + CellularNetwork* cellular = GetWirelessNetworkByPath(
|
| + cellular_networks_, network->service_path());
|
| + if (cellular) {
|
| + cellular->set_connected(false);
|
| + cellular_ = NULL;
|
| + }
|
| }
|
| + NotifyNetworkChanged();
|
| }
|
| }
|
|
|
| - virtual void SaveCellularNetwork(const CellularNetwork& network) {
|
| - // Update the wifi network in the local cache.
|
| - CellularNetwork* cellular = GetWirelessNetworkByPath(
|
| - cellular_networks_, network.service_path());
|
| - if (cellular)
|
| - *cellular = network;
|
| + virtual void SaveCellularNetwork(const CellularNetwork* network) {
|
| + DCHECK(network);
|
| + // Update the cellular network with libcros.
|
| + if (!EnsureCrosLoaded() || !network)
|
| + return;
|
|
|
| - // Update the cellular network with libcros.
|
| - if (EnsureCrosLoaded()) {
|
| - SetAutoConnect(network.service_path().c_str(), network.auto_connect());
|
| - }
|
| + SetAutoConnect(network->service_path().c_str(), network->auto_connect());
|
| }
|
|
|
| - virtual void SaveWifiNetwork(const WifiNetwork& network) {
|
| - // Update the wifi network in the local cache.
|
| - WifiNetwork* wifi = GetWirelessNetworkByPath(
|
| - wifi_networks_, network.service_path());
|
| - if (wifi)
|
| - *wifi = network;
|
| -
|
| + virtual void SaveWifiNetwork(const WifiNetwork* network) {
|
| + DCHECK(network);
|
| // Update the wifi network with libcros.
|
| - if (EnsureCrosLoaded()) {
|
| - SetPassphrase(
|
| - network.service_path().c_str(), network.passphrase().c_str());
|
| - SetIdentity(network.service_path().c_str(), network.identity().c_str());
|
| - SetCertPath(network.service_path().c_str(), network.cert_path().c_str());
|
| - SetAutoConnect(network.service_path().c_str(), network.auto_connect());
|
| - }
|
| + if (!EnsureCrosLoaded() || !network)
|
| + return;
|
| + SetPassphrase(
|
| + network->service_path().c_str(), network->passphrase().c_str());
|
| + SetIdentity(network->service_path().c_str(),
|
| + network->identity().c_str());
|
| + SetCertPath(network->service_path().c_str(),
|
| + network->cert_path().c_str());
|
| + SetAutoConnect(network->service_path().c_str(), network->auto_connect());
|
| }
|
|
|
| - virtual void ForgetWirelessNetwork(const std::string& service_path) {
|
| - if (EnsureCrosLoaded()) {
|
| - if (DeleteRememberedService(service_path.c_str())) {
|
| - // Update local cache and notify listeners.
|
| - remembered_wifi_networks_.erase(
|
| - std::remove_if(remembered_wifi_networks_.begin(),
|
| - remembered_wifi_networks_.end(),
|
| - WirelessNetwork::ServicePathEq(service_path)),
|
| - remembered_wifi_networks_.end());
|
| - remembered_cellular_networks_.erase(
|
| - std::remove_if(remembered_cellular_networks_.begin(),
|
| - remembered_cellular_networks_.end(),
|
| - WirelessNetwork::ServicePathEq(service_path)),
|
| - remembered_cellular_networks_.end());
|
| - NotifyNetworkChanged();
|
| + virtual void ForgetWifiNetwork(const std::string& service_path) {
|
| + if (!EnsureCrosLoaded())
|
| + return;
|
| + if (DeleteRememberedService(service_path.c_str())) {
|
| + // Update local cache and notify listeners.
|
| + for (WifiNetworkVector::iterator iter =
|
| + remembered_wifi_networks_.begin();
|
| + iter != remembered_wifi_networks_.end();
|
| + ++iter) {
|
| + if ((*iter)->service_path() == service_path) {
|
| + delete (*iter);
|
| + remembered_wifi_networks_.erase(iter);
|
| + break;
|
| + }
|
| }
|
| + NotifyNetworkChanged();
|
| }
|
| }
|
|
|
| @@ -874,45 +915,36 @@
|
| }
|
|
|
| output.append("<h3>Ethernet:</h3><table border=1>");
|
| - if (ethernet_enabled()) {
|
| - output.append("<tr>" + ToHtmlTableHeader(ðernet_) + "</tr>");
|
| - output.append("<tr>" + ToHtmlTableRow(ðernet_) + "</tr>");
|
| + if (ethernet_ && ethernet_enabled()) {
|
| + output.append("<tr>" + ToHtmlTableHeader(ethernet_) + "</tr>");
|
| + output.append("<tr>" + ToHtmlTableRow(ethernet_) + "</tr>");
|
| }
|
|
|
| output.append("</table><h3>Wifi:</h3><table border=1>");
|
| for (size_t i = 0; i < wifi_networks_.size(); ++i) {
|
| if (i == 0)
|
| - output.append("<tr>" + ToHtmlTableHeader(&wifi_networks_[i]) + "</tr>");
|
| - output.append("<tr>" + ToHtmlTableRow(&wifi_networks_[i]) + "</tr>");
|
| + output.append("<tr>" + ToHtmlTableHeader(wifi_networks_[i]) + "</tr>");
|
| + output.append("<tr>" + ToHtmlTableRow(wifi_networks_[i]) + "</tr>");
|
| }
|
|
|
| output.append("</table><h3>Cellular:</h3><table border=1>");
|
| for (size_t i = 0; i < cellular_networks_.size(); ++i) {
|
| if (i == 0)
|
| - output.append("<tr>" + ToHtmlTableHeader(&cellular_networks_[i]) +
|
| + output.append("<tr>" + ToHtmlTableHeader(cellular_networks_[i]) +
|
| "</tr>");
|
| - output.append("<tr>" + ToHtmlTableRow(&cellular_networks_[i]) + "</tr>");
|
| + output.append("<tr>" + ToHtmlTableRow(cellular_networks_[i]) + "</tr>");
|
| }
|
|
|
| output.append("</table><h3>Remembered Wifi:</h3><table border=1>");
|
| for (size_t i = 0; i < remembered_wifi_networks_.size(); ++i) {
|
| if (i == 0)
|
| output.append(
|
| - "<tr>" + ToHtmlTableHeader(&remembered_wifi_networks_[i]) +
|
| + "<tr>" + ToHtmlTableHeader(remembered_wifi_networks_[i]) +
|
| "</tr>");
|
| - output.append("<tr>" + ToHtmlTableRow(&remembered_wifi_networks_[i]) +
|
| + output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) +
|
| "</tr>");
|
| }
|
|
|
| - output.append("</table><h3>Remembered Cellular:</h3><table border=1>");
|
| - for (size_t i = 0; i < remembered_cellular_networks_.size(); ++i) {
|
| - if (i == 0)
|
| - output.append("<tr>" +
|
| - ToHtmlTableHeader(&remembered_cellular_networks_[i]) + "</tr>");
|
| - output.append("<tr>" + ToHtmlTableRow(&remembered_cellular_networks_[i]) +
|
| - "</tr>");
|
| - }
|
| -
|
| output.append("</table></body></html>");
|
| return output;
|
| }
|
| @@ -959,9 +991,9 @@
|
| const char* modem_service_path,
|
| const CellularDataPlanList* dataplan) {
|
| NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
|
| - DCHECK(network);
|
| + DCHECK(network && network->cellular_network());
|
| // Store data plan for currently connected cellular network.
|
| - if (network->cellular_network().service_path()
|
| + if (network->cellular_network()->service_path()
|
| .compare(modem_service_path) == 0) {
|
| if (dataplan != NULL) {
|
| network->UpdateCellularDataPlan(*dataplan);
|
| @@ -970,54 +1002,59 @@
|
| }
|
|
|
| static void ParseSystem(SystemInfo* system,
|
| - EthernetNetwork* ethernet,
|
| + EthernetNetwork** ethernet,
|
| WifiNetworkVector* wifi_networks,
|
| CellularNetworkVector* cellular_networks,
|
| - WifiNetworkVector* remembered_wifi_networks,
|
| - CellularNetworkVector* remembered_cellular_networks) {
|
| + WifiNetworkVector* remembered_wifi_networks) {
|
| DVLOG(1) << "ParseSystem:";
|
| - ethernet->Clear();
|
| + DCHECK(!(*ethernet));
|
| for (int i = 0; i < system->service_size; i++) {
|
| - const ServiceInfo service = *system->GetServiceInfo(i);
|
| - DVLOG(1) << " (" << service.type << ") " << service.name
|
| - << " mode=" << service.mode
|
| - << " state=" << service.state
|
| - << " sec=" << service.security
|
| - << " req=" << service.passphrase_required
|
| - << " pass=" << service.passphrase
|
| - << " id=" << service.identity
|
| - << " certpath=" << service.cert_path
|
| - << " str=" << service.strength
|
| - << " fav=" << service.favorite
|
| - << " auto=" << service.auto_connect
|
| - << " error=" << service.error;
|
| + const ServiceInfo* service = system->GetServiceInfo(i);
|
| + DVLOG(1) << " (" << service->type << ") " << service->name
|
| + << " mode=" << service->mode
|
| + << " state=" << service->state
|
| + << " sec=" << service->security
|
| + << " req=" << service->passphrase_required
|
| + << " pass=" << service->passphrase
|
| + << " id=" << service->identity
|
| + << " certpath=" << service->cert_path
|
| + << " str=" << service->strength
|
| + << " fav=" << service->favorite
|
| + << " auto=" << service->auto_connect
|
| + << " error=" << service->error;
|
| // Once a connected ethernet service is found, disregard other ethernet
|
| // services that are also found
|
| - if (service.type == TYPE_ETHERNET && !(ethernet->connected()))
|
| - ethernet->ConfigureFromService(service);
|
| - else if (service.type == TYPE_WIFI)
|
| - wifi_networks->push_back(WifiNetwork(service));
|
| - else if (service.type == TYPE_CELLULAR)
|
| - cellular_networks->push_back(CellularNetwork(service));
|
| + if (service->type == TYPE_ETHERNET)
|
| + (*ethernet) = new EthernetNetwork(service);
|
| + else if (service->type == TYPE_WIFI) {
|
| + wifi_networks->push_back(new WifiNetwork(service));
|
| + } else if (service->type == TYPE_CELLULAR) {
|
| + cellular_networks->push_back(new CellularNetwork(service));
|
| + }
|
| }
|
| +
|
| + // Create placeholder network for ethernet even if the service is not
|
| + // detected at this moment.
|
| + if (!(*ethernet))
|
| + (*ethernet) = new EthernetNetwork();
|
| +
|
| DVLOG(1) << "Remembered networks:";
|
| for (int i = 0; i < system->remembered_service_size; i++) {
|
| - const ServiceInfo& service = *system->GetRememberedServiceInfo(i);
|
| + const ServiceInfo* service = system->GetRememberedServiceInfo(i);
|
| // Only services marked as auto_connect are considered remembered
|
| // networks.
|
| // TODO(chocobo): Don't add to remembered service if currently available.
|
| - if (service.auto_connect) {
|
| - DVLOG(1) << " (" << service.type << ") " << service.name
|
| - << " mode=" << service.mode
|
| - << " sec=" << service.security
|
| - << " pass=" << service.passphrase
|
| - << " id=" << service.identity
|
| - << " certpath=" << service.cert_path
|
| - << " auto=" << service.auto_connect;
|
| - if (service.type == TYPE_WIFI)
|
| - remembered_wifi_networks->push_back(WifiNetwork(service));
|
| - else if (service.type == TYPE_CELLULAR)
|
| - remembered_cellular_networks->push_back(CellularNetwork(service));
|
| + if (service->auto_connect) {
|
| + DVLOG(1) << " (" << service->type << ") " << service->name
|
| + << " mode=" << service->mode
|
| + << " sec=" << service->security
|
| + << " pass=" << service->passphrase
|
| + << " id=" << service->identity
|
| + << " certpath=" << service->cert_path
|
| + << " auto=" << service->auto_connect;
|
| + if (service->type == TYPE_WIFI) {
|
| + remembered_wifi_networks->push_back(new WifiNetwork(service));
|
| + }
|
| }
|
| }
|
| }
|
| @@ -1037,55 +1074,54 @@
|
| }
|
|
|
| void InitTestData() {
|
| - ethernet_.Clear();
|
| - ethernet_.set_connected(true);
|
| - ethernet_.set_service_path("eth1");
|
| + ethernet_ = new EthernetNetwork();
|
| + ethernet_->set_connected(true);
|
| + ethernet_->set_service_path("eth1");
|
|
|
| + STLDeleteElements(&wifi_networks_);
|
| wifi_networks_.clear();
|
| - WifiNetwork wifi1 = WifiNetwork();
|
| - wifi1.set_service_path("fw1");
|
| - wifi1.set_name("Fake Wifi 1");
|
| - wifi1.set_strength(90);
|
| - wifi1.set_connected(false);
|
| - wifi1.set_encryption(SECURITY_NONE);
|
| + WifiNetwork* wifi1 = new WifiNetwork();
|
| + wifi1->set_service_path("fw1");
|
| + wifi1->set_name("Fake Wifi 1");
|
| + wifi1->set_strength(90);
|
| + wifi1->set_connected(false);
|
| + wifi1->set_encryption(SECURITY_NONE);
|
| wifi_networks_.push_back(wifi1);
|
|
|
| - WifiNetwork wifi2 = WifiNetwork();
|
| - wifi2.set_service_path("fw2");
|
| - wifi2.set_name("Fake Wifi 2");
|
| - wifi2.set_strength(70);
|
| - wifi2.set_connected(true);
|
| - wifi2.set_encryption(SECURITY_WEP);
|
| + WifiNetwork* wifi2 = new WifiNetwork();
|
| + wifi2->set_service_path("fw2");
|
| + wifi2->set_name("Fake Wifi 2");
|
| + wifi2->set_strength(70);
|
| + wifi2->set_connected(true);
|
| + wifi2->set_encryption(SECURITY_WEP);
|
| wifi_networks_.push_back(wifi2);
|
|
|
| - WifiNetwork wifi3 = WifiNetwork();
|
| - wifi3.set_service_path("fw3");
|
| - wifi3.set_name("Fake Wifi 3");
|
| - wifi3.set_strength(50);
|
| - wifi3.set_connected(false);
|
| - wifi3.set_encryption(SECURITY_WEP);
|
| + WifiNetwork* wifi3 = new WifiNetwork();
|
| + wifi3->set_service_path("fw3");
|
| + wifi3->set_name("Fake Wifi 3");
|
| + wifi3->set_strength(50);
|
| + wifi3->set_connected(false);
|
| + wifi3->set_encryption(SECURITY_WEP);
|
| wifi_networks_.push_back(wifi3);
|
|
|
| wifi_ = wifi2;
|
|
|
| + STLDeleteElements(&cellular_networks_);
|
| cellular_networks_.clear();
|
|
|
| - CellularNetwork cellular1 = CellularNetwork();
|
| - cellular1.set_service_path("fc1");
|
| - cellular1.set_name("Fake Cellular 1");
|
| - cellular1.set_strength(70);
|
| - cellular1.set_connected(true);
|
| - cellular1.set_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED);
|
| - cellular1.set_payment_url(std::string("http://www.google.com"));
|
| + CellularNetwork* cellular1 = new CellularNetwork();
|
| + cellular1->set_service_path("fc1");
|
| + cellular1->set_name("Fake Cellular 1");
|
| + cellular1->set_strength(70);
|
| + cellular1->set_connected(true);
|
| + cellular1->set_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED);
|
| + cellular1->set_payment_url(std::string("http://www.google.com"));
|
| cellular_networks_.push_back(cellular1);
|
| cellular_ = cellular1;
|
|
|
| remembered_wifi_networks_.clear();
|
| - remembered_wifi_networks_.push_back(wifi2);
|
| + remembered_wifi_networks_.push_back(new WifiNetwork(*wifi2));
|
|
|
| - remembered_cellular_networks_.clear();
|
| - remembered_cellular_networks_.push_back(cellular1);
|
| -
|
| int devices = (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) |
|
| (1 << TYPE_CELLULAR);
|
| available_devices_ = devices;
|
| @@ -1108,7 +1144,7 @@
|
| base::Time::kMicrosecondsPerSecond;
|
| chromeos::CellularDataPlanList test_plans;
|
| test_plans.push_back(test_plan);
|
| - cellular_.SetDataPlans(test_plans);
|
| + cellular_->SetDataPlans(test_plans);
|
| }
|
|
|
| void UpdateSystemInfo() {
|
| @@ -1119,28 +1155,28 @@
|
|
|
| WifiNetwork* GetWifiNetworkByName(const std::string& name) {
|
| for (size_t i = 0; i < wifi_networks_.size(); ++i) {
|
| - if (wifi_networks_[i].name().compare(name) == 0) {
|
| - return &wifi_networks_[i];
|
| + if (wifi_networks_[i]->name().compare(name) == 0) {
|
| + return wifi_networks_[i];
|
| }
|
| }
|
| return NULL;
|
| }
|
|
|
| - template<typename T> T* GetWirelessNetworkByPath(
|
| + template<typename T> T GetWirelessNetworkByPath(
|
| std::vector<T>& networks, const std::string& path) {
|
| typedef typename std::vector<T>::iterator iter_t;
|
| iter_t iter = std::find_if(networks.begin(), networks.end(),
|
| WirelessNetwork::ServicePathEq(path));
|
| - return (iter != networks.end()) ? &(*iter) : NULL;
|
| + return (iter != networks.end()) ? *iter : NULL;
|
| }
|
|
|
| // const version
|
| - template<typename T> const T* GetWirelessNetworkByPath(
|
| + template<typename T> const T GetWirelessNetworkByPath(
|
| const std::vector<T>& networks, const std::string& path) const {
|
| typedef typename std::vector<T>::const_iterator iter_t;
|
| iter_t iter = std::find_if(networks.begin(), networks.end(),
|
| WirelessNetwork::ServicePathEq(path));
|
| - return (iter != networks.end()) ? &(*iter) : NULL;
|
| + return (iter != networks.end()) ? *iter : NULL;
|
| }
|
|
|
| void EnableNetworkDeviceType(ConnectionType device, bool enable) {
|
| @@ -1188,6 +1224,20 @@
|
| }
|
| }
|
|
|
| + void ClearNetworks() {
|
| + if (ethernet_)
|
| + delete ethernet_;
|
| + ethernet_ = NULL;
|
| + wifi_ = NULL;
|
| + cellular_ = NULL;
|
| + STLDeleteElements(&wifi_networks_);
|
| + wifi_networks_.clear();
|
| + STLDeleteElements(&cellular_networks_);
|
| + cellular_networks_.clear();
|
| + STLDeleteElements(&remembered_wifi_networks_);
|
| + remembered_wifi_networks_.clear();
|
| + }
|
| +
|
| void UpdateNetworkStatus() {
|
| // Make sure we run on UI thread.
|
| if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
|
| @@ -1202,31 +1252,33 @@
|
| if (!system)
|
| return;
|
|
|
| - wifi_networks_.clear();
|
| - cellular_networks_.clear();
|
| - remembered_wifi_networks_.clear();
|
| - remembered_cellular_networks_.clear();
|
| +
|
| + std::string prev_cellular_service_path = cellular_ ?
|
| + cellular_->service_path() : std::string();
|
| +
|
| + ClearNetworks();
|
| +
|
| ParseSystem(system, ðernet_, &wifi_networks_, &cellular_networks_,
|
| - &remembered_wifi_networks_, &remembered_cellular_networks_);
|
| + &remembered_wifi_networks_);
|
|
|
| - wifi_ = WifiNetwork();
|
| + wifi_ = NULL;
|
| for (size_t i = 0; i < wifi_networks_.size(); i++) {
|
| - if (wifi_networks_[i].connecting_or_connected()) {
|
| + if (wifi_networks_[i]->connecting_or_connected()) {
|
| wifi_ = wifi_networks_[i];
|
| break; // There is only one connected or connecting wifi network.
|
| }
|
| }
|
| - std::string prev_service_path = cellular_.service_path();
|
| - cellular_ = CellularNetwork();
|
| + cellular_ = NULL;
|
| for (size_t i = 0; i < cellular_networks_.size(); i++) {
|
| - if (cellular_networks_[i].connecting_or_connected()) {
|
| + if (cellular_networks_[i]->connecting_or_connected()) {
|
| + cellular_ = cellular_networks_[i];
|
| // If new cellular, then update data plan list.
|
| - if (cellular_networks_[i].service_path() != prev_service_path) {
|
| + if (cellular_networks_[i]->service_path() !=
|
| + prev_cellular_service_path) {
|
| CellularDataPlanList list;
|
| - RetrieveCellularDataPlans(cellular_.service_path().c_str(), &list);
|
| + RetrieveCellularDataPlans(cellular_->service_path().c_str(), &list);
|
| UpdateCellularDataPlan(list);
|
| }
|
| - cellular_ = cellular_networks_[i];
|
| break; // There is only one connected or connecting cellular network.
|
| }
|
| }
|
| @@ -1241,7 +1293,8 @@
|
| }
|
|
|
| void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) {
|
| - cellular_.SetDataPlans(data_plans);
|
| + DCHECK(cellular_);
|
| + cellular_->SetDataPlans(data_plans);
|
| NotifyCellularDataPlanChanged();
|
| }
|
|
|
| @@ -1260,13 +1313,13 @@
|
| std::map<std::string, PropertyChangeMonitor> property_change_monitors_;
|
|
|
| // The ethernet network.
|
| - EthernetNetwork ethernet_;
|
| + EthernetNetwork* ethernet_;
|
|
|
| // The list of available wifi networks.
|
| WifiNetworkVector wifi_networks_;
|
|
|
| // The current connected (or connecting) wifi network.
|
| - WifiNetwork wifi_;
|
| + WifiNetwork* wifi_;
|
|
|
| // The remembered wifi networks.
|
| WifiNetworkVector remembered_wifi_networks_;
|
| @@ -1275,11 +1328,8 @@
|
| CellularNetworkVector cellular_networks_;
|
|
|
| // The current connected (or connecting) cellular network.
|
| - CellularNetwork cellular_;
|
| + CellularNetwork* cellular_;
|
|
|
| - // The remembered cellular networks.
|
| - CellularNetworkVector remembered_cellular_networks_;
|
| -
|
| // The current available network devices. Bitwise flag of ConnectionTypes.
|
| int available_devices_;
|
|
|
| @@ -1296,24 +1346,29 @@
|
|
|
| class NetworkLibraryStubImpl : public NetworkLibrary {
|
| public:
|
| - NetworkLibraryStubImpl() : ip_address_("1.1.1.1") {}
|
| - ~NetworkLibraryStubImpl() {}
|
| + NetworkLibraryStubImpl()
|
| + : ip_address_("1.1.1.1"),
|
| + ethernet_(new EthernetNetwork()),
|
| + wifi_(NULL),
|
| + cellular_(NULL) {
|
| + }
|
| + ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; }
|
| virtual void AddObserver(Observer* observer) {}
|
| virtual void RemoveObserver(Observer* observer) {}
|
| virtual void AddProperyObserver(const char* service_path,
|
| PropertyObserver* observer) {}
|
| virtual void RemoveProperyObserver(PropertyObserver* observer) {}
|
| - virtual const EthernetNetwork& ethernet_network() const {
|
| + virtual EthernetNetwork* ethernet_network() {
|
| return ethernet_;
|
| }
|
| virtual bool ethernet_connecting() const { return false; }
|
| virtual bool ethernet_connected() const { return true; }
|
| - virtual const WifiNetwork& wifi_network() const {
|
| + virtual WifiNetwork* wifi_network() {
|
| return wifi_;
|
| }
|
| virtual bool wifi_connecting() const { return false; }
|
| virtual bool wifi_connected() const { return false; }
|
| - virtual const CellularNetwork& cellular_network() const {
|
| + virtual CellularNetwork* cellular_network() {
|
| return cellular_;
|
| }
|
| virtual bool cellular_connecting() const { return false; }
|
| @@ -1331,22 +1386,21 @@
|
| virtual const CellularNetworkVector& cellular_networks() const {
|
| return cellular_networks_;
|
| }
|
| - virtual const CellularNetworkVector& remembered_cellular_networks() const {
|
| - return cellular_networks_;
|
| + virtual bool has_cellular_networks() const {
|
| + return cellular_networks_.begin() != cellular_networks_.end();
|
| }
|
| -
|
| /////////////////////////////////////////////////////////////////////////////
|
|
|
| - virtual bool FindWifiNetworkByPath(
|
| - const std::string& path, WifiNetwork* result) const { return false; }
|
| - virtual bool FindCellularNetworkByPath(
|
| - const std::string& path, CellularNetwork* result) const { return false; }
|
| + virtual WifiNetwork* FindWifiNetworkByPath(
|
| + const std::string& path) { return NULL; }
|
| + virtual CellularNetwork* FindCellularNetworkByPath(
|
| + const std::string& path) { return NULL; }
|
| virtual void RequestWifiScan() {}
|
| virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) {
|
| return false;
|
| }
|
|
|
| - virtual void ConnectToWifiNetwork(WifiNetwork network,
|
| + virtual void ConnectToWifiNetwork(const WifiNetwork* network,
|
| const std::string& password,
|
| const std::string& identity,
|
| const std::string& certpath) {}
|
| @@ -1355,12 +1409,12 @@
|
| const std::string& identity,
|
| const std::string& certpath,
|
| bool auto_connect) {}
|
| - virtual void ConnectToCellularNetwork(CellularNetwork network) {}
|
| - virtual void RefreshCellularDataPlans(const CellularNetwork& network) {}
|
| - virtual void DisconnectFromWirelessNetwork(const WirelessNetwork& network) {}
|
| - virtual void SaveCellularNetwork(const CellularNetwork& network) {}
|
| - virtual void SaveWifiNetwork(const WifiNetwork& network) {}
|
| - virtual void ForgetWirelessNetwork(const std::string& service_path) {}
|
| + virtual void ConnectToCellularNetwork(const CellularNetwork* network) {}
|
| + virtual void RefreshCellularDataPlans(const CellularNetwork* network) {}
|
| + virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {}
|
| + virtual void SaveCellularNetwork(const CellularNetwork* network) {}
|
| + virtual void SaveWifiNetwork(const WifiNetwork* network) {}
|
| + virtual void ForgetWifiNetwork(const std::string& service_path) {}
|
| virtual bool ethernet_available() const { return true; }
|
| virtual bool wifi_available() const { return false; }
|
| virtual bool cellular_available() const { return false; }
|
| @@ -1382,9 +1436,9 @@
|
|
|
| private:
|
| std::string ip_address_;
|
| - EthernetNetwork ethernet_;
|
| - WifiNetwork wifi_;
|
| - CellularNetwork cellular_;
|
| + EthernetNetwork* ethernet_;
|
| + WifiNetwork* wifi_;
|
| + CellularNetwork* cellular_;
|
| WifiNetworkVector wifi_networks_;
|
| CellularNetworkVector cellular_networks_;
|
| };
|
|
|