1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
// 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 CHROMEOS_NETWORK_NETWORK_STATE_H_
#define CHROMEOS_NETWORK_NETWORK_STATE_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/values.h"
#include "chromeos/network/managed_state.h"
#include "components/onc/onc_constants.h"
#include "url/gurl.h"
namespace base {
class DictionaryValue;
class Value;
}
namespace chromeos {
// Simple class to provide network state information about a network service.
// This class should always be passed as a const* and should never be held
// on to. Store network_state->path() (defined in ManagedState) instead and
// call NetworkStateHandler::GetNetworkState(path) to retrieve the state for
// the network.
//
// Note: NetworkStateHandler will store an entry for each member of
// Manager.ServiceCompleteList. The visible() method indicates whether the
// network is visible, and the IsInProfile() method indicates whether the
// network is saved in a profile.
class CHROMEOS_EXPORT NetworkState : public ManagedState {
public:
explicit NetworkState(const std::string& path);
~NetworkState() override;
// ManagedState overrides
// If you change this method, update GetProperties too.
bool PropertyChanged(const std::string& key,
const base::Value& value) override;
bool InitialPropertiesReceived(
const base::DictionaryValue& properties) override;
void GetStateProperties(base::DictionaryValue* dictionary) const override;
void IPConfigPropertiesChanged(const base::DictionaryValue& properties);
// Returns true, if the network requires a service activation.
bool RequiresActivation() const;
// Accessors
bool visible() const { return visible_; }
const std::string& security_class() const { return security_class_; }
const std::string& device_path() const { return device_path_; }
const std::string& guid() const { return guid_; }
const std::string& profile_path() const { return profile_path_; }
const std::string& error() const { return error_; }
const std::string& last_error() const { return last_error_; }
void clear_last_error() { last_error_.clear(); }
// Returns |connection_state_| if visible, kStateDisconnect otherwise.
std::string connection_state() const;
const base::DictionaryValue& proxy_config() const { return proxy_config_; }
// IPConfig Properties. These require an extra call to ShillIPConfigClient,
// so cache them to avoid excessively complex client code.
const std::string& ip_address() const { return ip_address_; }
const std::string& gateway() const { return gateway_; }
const std::vector<std::string>& dns_servers() const { return dns_servers_; }
const GURL& web_proxy_auto_discovery_url() const {
return web_proxy_auto_discovery_url_;
}
// Wireless property accessors
bool connectable() const { return connectable_; }
bool is_captive_portal() const { return is_captive_portal_; }
int signal_strength() const { return signal_strength_; }
// Wifi property accessors
const std::string& eap_method() const { return eap_method_; }
const std::vector<uint8_t>& raw_ssid() const { return raw_ssid_; }
// Cellular property accessors
const std::string& network_technology() const {
return network_technology_;
}
const std::string& activation_type() const { return activation_type_; }
const std::string& activation_state() const { return activation_state_; }
const std::string& roaming() const { return roaming_; }
const std::string& payment_url() const { return payment_url_; }
bool cellular_out_of_credits() const { return cellular_out_of_credits_; }
// VPN property accessors
const std::string& vpn_provider_type() const { return vpn_provider_type_; }
const std::string& third_party_vpn_provider_extension_id() const {
return third_party_vpn_provider_extension_id_;
}
// Returns true if |connection_state_| is a connected/connecting state.
bool IsConnectedState() const;
bool IsConnectingState() const;
// Returns true if this is a network stored in a profile.
bool IsInProfile() const;
// Returns true if the network properties are stored in a user profile.
bool IsPrivate() const;
// Returns the |raw_ssid| as a hex-encoded string
std::string GetHexSsid() const;
// Returns a comma separated string of name servers.
std::string GetDnsServersAsString() const;
// Converts the prefix length to a netmask string.
std::string GetNetmask() const;
// Returns a specifier for identifying this network in the absence of a GUID.
// This should only be used by NetworkStateHandler for keeping track of
// GUIDs assigned to unsaved networks.
std::string GetSpecifier() const;
// Set the GUID. Called exclusively by NetworkStateHandler.
void SetGuid(const std::string& guid);
// Returns |error_| if valid, otherwise returns |last_error_|.
std::string GetErrorState() const;
// Helpers (used e.g. when a state, error, or shill dictionary is cached)
static bool StateIsConnected(const std::string& connection_state);
static bool StateIsConnecting(const std::string& connection_state);
static bool NetworkStateIsCaptivePortal(
const base::DictionaryValue& shill_properties);
static bool ErrorIsValid(const std::string& error);
private:
friend class MobileActivatorTest;
friend class NetworkStateHandler;
friend class NetworkChangeNotifierChromeosUpdateTest;
// Updates |name_| from WiFi.HexSSID if provided, and validates |name_|.
// Returns true if |name_| changes.
bool UpdateName(const base::DictionaryValue& properties);
// Set to true if the network is a member of Manager.Services.
bool visible_;
// Network Service properties. Avoid adding any additional properties here.
// Instead use NetworkConfigurationHandler::GetProperties() to asynchronously
// request properties from Shill.
std::string security_class_;
std::string eap_method_; // Needed for WiFi EAP networks
std::string device_path_;
std::string guid_;
std::string connection_state_;
std::string profile_path_;
std::vector<uint8_t> raw_ssid_; // Unknown encoding. Not necessarily UTF-8.
// Reflects the current Shill Service.Error property. This might get cleared
// by Shill shortly after a failure.
std::string error_;
// Last non empty Service.Error property. Cleared by NetworkConnectionHandler
// when a connection attempt is initiated.
std::string last_error_;
// IPConfig properties.
// Note: These do not correspond to actual Shill.Service properties
// but are derived from the service's corresponding IPConfig object.
std::string ip_address_;
std::string gateway_;
std::vector<std::string> dns_servers_;
int prefix_length_; // Used by GetNetmask()
GURL web_proxy_auto_discovery_url_;
// Wireless properties, used for icons and Connect logic.
bool connectable_;
bool is_captive_portal_;
int signal_strength_;
// Cellular properties, used for icons, Connect, and Activation.
std::string network_technology_;
std::string activation_type_;
std::string activation_state_;
std::string roaming_;
std::string payment_url_;
bool cellular_out_of_credits_;
// VPN properties, used to construct the display name and to show the correct
// configuration dialog.
std::string vpn_provider_type_;
std::string third_party_vpn_provider_extension_id_;
// TODO(pneubeck): Remove this once (Managed)NetworkConfigurationHandler
// provides proxy configuration. crbug.com/241775
base::DictionaryValue proxy_config_;
DISALLOW_COPY_AND_ASSIGN(NetworkState);
};
} // namespace chromeos
#endif // CHROMEOS_NETWORK_NETWORK_STATE_H_
|