cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / chromeos / network / onc / onc_signature.cc
blobb70b5790feb206903183fe9ee14511b9c6b7a0e2
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromeos/network/onc/onc_signature.h"
7 #include "chromeos/network/onc/onc_constants.h"
8 #include "third_party/cros_system_api/dbus/service_constants.h"
10 using base::Value;
12 namespace chromeos {
13 namespace onc {
14 namespace {
16 const OncValueSignature kBoolSignature = {
17 Value::TYPE_BOOLEAN, NULL
19 const OncValueSignature kStringSignature = {
20 Value::TYPE_STRING, NULL
22 const OncValueSignature kIntegerSignature = {
23 Value::TYPE_INTEGER, NULL
25 const OncValueSignature kStringListSignature = {
26 Value::TYPE_LIST, NULL, &kStringSignature
28 const OncValueSignature kIntegerListSignature = {
29 Value::TYPE_LIST, NULL, &kIntegerSignature
31 const OncValueSignature kIPConfigListSignature = {
32 Value::TYPE_LIST, NULL, &kIPConfigSignature
35 const OncFieldSignature issuer_subject_pattern_fields[] = {
36 { certificate::kCommonName, &kStringSignature },
37 { certificate::kLocality, &kStringSignature },
38 { certificate::kOrganization, &kStringSignature },
39 { certificate::kOrganizationalUnit, &kStringSignature },
40 { NULL }
43 const OncFieldSignature certificate_pattern_fields[] = {
44 { kRecommended, &kRecommendedSignature },
45 { certificate::kEnrollmentURI, &kStringListSignature },
46 { certificate::kIssuer, &kIssuerSubjectPatternSignature },
47 { certificate::kIssuerCARef, &kStringListSignature },
48 { certificate::kIssuerCAPEMs, &kStringListSignature },
49 { certificate::kSubject, &kIssuerSubjectPatternSignature },
50 { NULL }
53 const OncFieldSignature eap_fields[] = {
54 { kRecommended, &kRecommendedSignature },
55 { eap::kAnonymousIdentity, &kStringSignature },
56 { eap::kClientCertPattern, &kCertificatePatternSignature },
57 { eap::kClientCertRef, &kStringSignature },
58 { eap::kClientCertType, &kStringSignature },
59 { eap::kIdentity, &kStringSignature },
60 { eap::kInner, &kStringSignature },
61 { eap::kOuter, &kStringSignature },
62 { eap::kPassword, &kStringSignature },
63 { eap::kSaveCredentials, &kBoolSignature },
64 { eap::kServerCAPEMs, &kStringListSignature },
65 { eap::kServerCARef, &kStringSignature },
66 { eap::kUseSystemCAs, &kBoolSignature },
67 { NULL }
70 const OncFieldSignature ipsec_fields[] = {
71 { kRecommended, &kRecommendedSignature },
72 { ipsec::kAuthenticationType, &kStringSignature },
73 { vpn::kClientCertPattern, &kCertificatePatternSignature },
74 { vpn::kClientCertRef, &kStringSignature },
75 { vpn::kClientCertType, &kStringSignature },
76 { ipsec::kGroup, &kStringSignature },
77 { ipsec::kIKEVersion, &kIntegerSignature },
78 { ipsec::kPSK, &kStringSignature },
79 { vpn::kSaveCredentials, &kBoolSignature },
80 { ipsec::kServerCAPEMs, &kStringSignature },
81 { ipsec::kServerCARef, &kStringSignature },
82 // Not yet supported.
83 // { ipsec::kEAP, &kEAPSignature },
84 // { ipsec::kXAUTH, &kXAUTHSignature },
85 { NULL }
88 const OncFieldSignature l2tp_fields[] = {
89 { kRecommended, &kRecommendedSignature },
90 { vpn::kPassword, &kStringSignature },
91 { vpn::kSaveCredentials, &kBoolSignature },
92 { vpn::kUsername, &kStringSignature },
93 { NULL }
96 const OncFieldSignature openvpn_fields[] = {
97 { kRecommended, &kRecommendedSignature },
98 { openvpn::kAuth, &kStringSignature },
99 { openvpn::kAuthNoCache, &kBoolSignature },
100 { openvpn::kAuthRetry, &kStringSignature },
101 { openvpn::kCipher, &kStringSignature },
102 { vpn::kClientCertPattern, &kCertificatePatternSignature },
103 { vpn::kClientCertRef, &kStringSignature },
104 { vpn::kClientCertType, &kStringSignature },
105 { openvpn::kCompLZO, &kStringSignature },
106 { openvpn::kCompNoAdapt, &kBoolSignature },
107 { openvpn::kKeyDirection, &kStringSignature },
108 { openvpn::kNsCertType, &kStringSignature },
109 { vpn::kPassword, &kStringSignature },
110 { openvpn::kPort, &kIntegerSignature },
111 { openvpn::kProto, &kStringSignature },
112 { openvpn::kPushPeerInfo, &kBoolSignature },
113 { openvpn::kRemoteCertEKU, &kStringSignature },
114 { openvpn::kRemoteCertKU, &kStringListSignature },
115 { openvpn::kRemoteCertTLS, &kStringSignature },
116 { openvpn::kRenegSec, &kIntegerSignature },
117 { vpn::kSaveCredentials, &kBoolSignature },
118 { openvpn::kServerCAPEMs, &kStringListSignature },
119 { openvpn::kServerCARef, &kStringSignature },
120 // Not supported, yet.
121 { openvpn::kServerCertPEM, &kStringSignature },
122 { openvpn::kServerCertRef, &kStringSignature },
123 { openvpn::kServerPollTimeout, &kIntegerSignature },
124 { openvpn::kShaper, &kIntegerSignature },
125 { openvpn::kStaticChallenge, &kStringSignature },
126 { openvpn::kTLSAuthContents, &kStringSignature },
127 { openvpn::kTLSRemote, &kStringSignature },
128 { vpn::kUsername, &kStringSignature },
129 // Not supported, yet.
130 { openvpn::kVerb, &kStringSignature },
131 { NULL }
134 const OncFieldSignature vpn_fields[] = {
135 { kRecommended, &kRecommendedSignature },
136 { vpn::kAutoConnect, &kBoolSignature },
137 { vpn::kHost, &kStringSignature },
138 { vpn::kIPsec, &kIPsecSignature },
139 { vpn::kL2TP, &kL2TPSignature },
140 { vpn::kOpenVPN, &kOpenVPNSignature },
141 { vpn::kType, &kStringSignature },
142 { NULL }
145 const OncFieldSignature ethernet_fields[] = {
146 { kRecommended, &kRecommendedSignature },
147 // Not supported, yet.
148 { ethernet::kAuthentication, &kStringSignature },
149 { ethernet::kEAP, &kEAPSignature },
150 { NULL }
153 // Not supported, yet.
154 const OncFieldSignature ipconfig_fields[] = {
155 { ipconfig::kGateway, &kStringSignature },
156 { ipconfig::kIPAddress, &kStringSignature },
157 { network_config::kNameServers, &kStringSignature },
158 { ipconfig::kRoutingPrefix, &kIntegerSignature },
159 { network_config::kSearchDomains, &kStringListSignature },
160 { ipconfig::kType, &kStringSignature },
161 { NULL }
164 const OncFieldSignature proxy_location_fields[] = {
165 { proxy::kHost, &kStringSignature },
166 { proxy::kPort, &kIntegerSignature },
167 { NULL }
170 const OncFieldSignature proxy_manual_fields[] = {
171 { proxy::kFtp, &kProxyLocationSignature },
172 { proxy::kHttp, &kProxyLocationSignature },
173 { proxy::kHttps, &kProxyLocationSignature },
174 { proxy::kSocks, &kProxyLocationSignature },
175 { NULL }
178 const OncFieldSignature proxy_settings_fields[] = {
179 { kRecommended, &kRecommendedSignature },
180 { proxy::kExcludeDomains, &kStringListSignature },
181 { proxy::kManual, &kProxyManualSignature },
182 { proxy::kPAC, &kStringSignature },
183 { proxy::kType, &kStringSignature },
184 { NULL }
187 const OncFieldSignature wifi_fields[] = {
188 { kRecommended, &kRecommendedSignature },
189 { wifi::kAutoConnect, &kBoolSignature },
190 { wifi::kEAP, &kEAPSignature },
191 { wifi::kHiddenSSID, &kBoolSignature },
192 { wifi::kPassphrase, &kStringSignature },
193 { wifi::kSSID, &kStringSignature },
194 { wifi::kSecurity, &kStringSignature },
195 { NULL }
198 const OncFieldSignature wifi_with_state_fields[] = {
199 { wifi::kBSSID, &kStringSignature },
200 { wifi::kFrequency, &kIntegerSignature },
201 { wifi::kFrequencyList, &kIntegerListSignature },
202 { wifi::kSignalStrength, &kIntegerSignature },
203 { NULL }
206 const OncFieldSignature cellular_provider_fields[] = {
207 { cellular_provider::kCode, &kStringSignature },
208 { cellular_provider::kCountry, &kStringSignature },
209 { cellular_provider::kName, &kStringSignature },
210 { NULL }
213 const OncFieldSignature cellular_with_state_fields[] = {
214 { kRecommended, &kRecommendedSignature },
215 { cellular::kActivateOverNonCellularNetwork, &kBoolSignature },
216 { cellular::kActivationState, &kStringSignature },
217 { cellular::kAllowRoaming, &kStringSignature },
218 { cellular::kAPN, &kStringSignature },
219 { cellular::kCarrier, &kStringSignature },
220 { cellular::kESN, &kStringSignature },
221 { cellular::kFamily, &kStringSignature },
222 { cellular::kFirmwareRevision, &kStringSignature },
223 { cellular::kFoundNetworks, &kStringSignature },
224 { cellular::kHardwareRevision, &kStringSignature },
225 { cellular::kHomeProvider, &kCellularProviderSignature },
226 { cellular::kICCID, &kStringSignature },
227 { cellular::kIMEI, &kStringSignature },
228 { cellular::kIMSI, &kStringSignature },
229 { cellular::kManufacturer, &kStringSignature },
230 { cellular::kMDN, &kStringSignature },
231 { cellular::kMEID, &kStringSignature },
232 { cellular::kMIN, &kStringSignature },
233 { cellular::kModelID, &kStringSignature },
234 { cellular::kNetworkTechnology, &kStringSignature },
235 { cellular::kPRLVersion, &kStringSignature },
236 { cellular::kProviderRequiresRoaming, &kStringSignature },
237 { cellular::kRoamingState, &kStringSignature },
238 { cellular::kSelectedNetwork, &kStringSignature },
239 { cellular::kServingOperator, &kCellularProviderSignature },
240 { cellular::kSIMLockStatus, &kStringSignature },
241 { cellular::kSIMPresent, &kStringSignature },
242 { cellular::kSupportedCarriers, &kStringSignature },
243 { cellular::kSupportNetworkScan, &kStringSignature },
244 { NULL }
247 const OncFieldSignature network_configuration_fields[] = {
248 { kRecommended, &kRecommendedSignature },
249 { network_config::kEthernet, &kEthernetSignature },
250 { network_config::kGUID, &kStringSignature },
251 // Not supported, yet.
252 { network_config::kIPConfigs, &kIPConfigListSignature },
253 { network_config::kName, &kStringSignature },
254 // Not supported, yet.
255 { network_config::kNameServers, &kStringListSignature },
256 { network_config::kProxySettings, &kProxySettingsSignature },
257 { kRemove, &kBoolSignature },
258 // Not supported, yet.
259 { network_config::kSearchDomains, &kStringListSignature },
260 { network_config::kType, &kStringSignature },
261 { network_config::kVPN, &kVPNSignature },
262 { network_config::kWiFi, &kWiFiSignature },
263 { NULL }
266 const OncFieldSignature network_with_state_fields[] = {
267 { network_config::kCellular, &kCellularWithStateSignature },
268 { network_config::kConnectionState, &kStringSignature },
269 { network_config::kWiFi, &kWiFiWithStateSignature },
270 { NULL }
273 const OncFieldSignature certificate_fields[] = {
274 { certificate::kGUID, &kStringSignature },
275 { certificate::kPKCS12, &kStringSignature },
276 { kRemove, &kBoolSignature },
277 { certificate::kTrustBits, &kStringListSignature },
278 { certificate::kType, &kStringSignature },
279 { certificate::kX509, &kStringSignature },
280 { NULL }
283 const OncFieldSignature toplevel_configuration_fields[] = {
284 { toplevel_config::kCertificates, &kCertificateListSignature },
285 { toplevel_config::kNetworkConfigurations,
286 &kNetworkConfigurationListSignature },
287 { toplevel_config::kType, &kStringSignature },
288 { encrypted::kCipher, &kStringSignature },
289 { encrypted::kCiphertext, &kStringSignature },
290 { encrypted::kHMAC, &kStringSignature },
291 { encrypted::kHMACMethod, &kStringSignature },
292 { encrypted::kIV, &kStringSignature },
293 { encrypted::kIterations, &kIntegerSignature },
294 { encrypted::kSalt, &kStringSignature },
295 { encrypted::kStretch, &kStringSignature },
296 { NULL }
299 } // namespace
301 const OncValueSignature kRecommendedSignature = {
302 Value::TYPE_LIST, NULL, &kStringSignature
304 const OncValueSignature kEAPSignature = {
305 Value::TYPE_DICTIONARY, eap_fields, NULL
307 const OncValueSignature kIssuerSubjectPatternSignature = {
308 Value::TYPE_DICTIONARY, issuer_subject_pattern_fields, NULL
310 const OncValueSignature kCertificatePatternSignature = {
311 Value::TYPE_DICTIONARY, certificate_pattern_fields, NULL
313 const OncValueSignature kIPsecSignature = {
314 Value::TYPE_DICTIONARY, ipsec_fields, NULL
316 const OncValueSignature kL2TPSignature = {
317 Value::TYPE_DICTIONARY, l2tp_fields, NULL
319 const OncValueSignature kOpenVPNSignature = {
320 Value::TYPE_DICTIONARY, openvpn_fields, NULL
322 const OncValueSignature kVPNSignature = {
323 Value::TYPE_DICTIONARY, vpn_fields, NULL
325 const OncValueSignature kEthernetSignature = {
326 Value::TYPE_DICTIONARY, ethernet_fields, NULL
328 const OncValueSignature kIPConfigSignature = {
329 Value::TYPE_DICTIONARY, ipconfig_fields, NULL
331 const OncValueSignature kProxyLocationSignature = {
332 Value::TYPE_DICTIONARY, proxy_location_fields, NULL
334 const OncValueSignature kProxyManualSignature = {
335 Value::TYPE_DICTIONARY, proxy_manual_fields, NULL
337 const OncValueSignature kProxySettingsSignature = {
338 Value::TYPE_DICTIONARY, proxy_settings_fields, NULL
340 const OncValueSignature kWiFiSignature = {
341 Value::TYPE_DICTIONARY, wifi_fields, NULL
343 const OncValueSignature kCertificateSignature = {
344 Value::TYPE_DICTIONARY, certificate_fields, NULL
346 const OncValueSignature kNetworkConfigurationSignature = {
347 Value::TYPE_DICTIONARY, network_configuration_fields, NULL
349 const OncValueSignature kCertificateListSignature = {
350 Value::TYPE_LIST, NULL, &kCertificateSignature
352 const OncValueSignature kNetworkConfigurationListSignature = {
353 Value::TYPE_LIST, NULL, &kNetworkConfigurationSignature
355 const OncValueSignature kToplevelConfigurationSignature = {
356 Value::TYPE_DICTIONARY, toplevel_configuration_fields, NULL
359 // Derived "ONC with State" signatures.
360 const OncValueSignature kNetworkWithStateSignature = {
361 Value::TYPE_DICTIONARY, network_with_state_fields, NULL,
362 &kNetworkConfigurationSignature
364 const OncValueSignature kWiFiWithStateSignature = {
365 Value::TYPE_DICTIONARY, wifi_with_state_fields, NULL, &kWiFiSignature
367 const OncValueSignature kCellularWithStateSignature = {
368 Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL
370 const OncValueSignature kCellularProviderSignature = {
371 Value::TYPE_DICTIONARY, cellular_provider_fields, NULL
374 const OncFieldSignature* GetFieldSignature(const OncValueSignature& signature,
375 const std::string& onc_field_name) {
376 if (!signature.fields)
377 return NULL;
378 for (const OncFieldSignature* field_signature = signature.fields;
379 field_signature->onc_field_name != NULL; ++field_signature) {
380 if (onc_field_name == field_signature->onc_field_name)
381 return field_signature;
383 if (signature.base_signature)
384 return GetFieldSignature(*signature.base_signature, onc_field_name);
385 return NULL;
388 namespace {
390 struct CredentialEntry {
391 const OncValueSignature* value_signature;
392 const char* field_name;
395 const CredentialEntry credentials[] = {
396 { &kEAPSignature, onc::eap::kPassword },
397 { &kIPsecSignature, onc::ipsec::kPSK },
398 { &kL2TPSignature, onc::vpn::kPassword },
399 { &kOpenVPNSignature, onc::vpn::kPassword },
400 { &kOpenVPNSignature, onc::openvpn::kTLSAuthContents },
401 { &kWiFiSignature, onc::wifi::kPassphrase },
402 { NULL }
405 } // namespace
407 bool FieldIsCredential(const OncValueSignature& signature,
408 const std::string& onc_field_name) {
409 for (const CredentialEntry* entry = credentials;
410 entry->value_signature != NULL; ++entry) {
411 if (&signature == entry->value_signature &&
412 onc_field_name == entry->field_name) {
413 return true;
416 return false;
419 } // namespace onc
420 } // namespace chromeos