Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: chromeos/network/network_connection_handler.cc

Issue 22867045: Differentiate between 'connect-failed' and 'bad-passphrase' (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/network/network_connection_handler.h" 5 #include "chromeos/network/network_connection_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "chromeos/chromeos_switches.h" 10 #include "chromeos/chromeos_switches.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 "passphrase-required"; 111 "passphrase-required";
112 const char NetworkConnectionHandler::kErrorActivationRequired[] = 112 const char NetworkConnectionHandler::kErrorActivationRequired[] =
113 "activation-required"; 113 "activation-required";
114 const char NetworkConnectionHandler::kErrorCertificateRequired[] = 114 const char NetworkConnectionHandler::kErrorCertificateRequired[] =
115 "certificate-required"; 115 "certificate-required";
116 const char NetworkConnectionHandler::kErrorConfigurationRequired[] = 116 const char NetworkConnectionHandler::kErrorConfigurationRequired[] =
117 "configuration-required"; 117 "configuration-required";
118 const char NetworkConnectionHandler::kErrorAuthenticationRequired[] = 118 const char NetworkConnectionHandler::kErrorAuthenticationRequired[] =
119 "authentication-required"; 119 "authentication-required";
120 const char NetworkConnectionHandler::kErrorShillError[] = "shill-error"; 120 const char NetworkConnectionHandler::kErrorShillError[] = "shill-error";
121 const char NetworkConnectionHandler::kErrorConnectFailed[] = "connect-failed";
122 const char NetworkConnectionHandler::kErrorConfigureFailed[] = 121 const char NetworkConnectionHandler::kErrorConfigureFailed[] =
123 "configure-failed"; 122 "configure-failed";
124 const char NetworkConnectionHandler::kErrorActivateFailed[] =
125 "activate-failed";
126 const char NetworkConnectionHandler::kErrorMissingProvider[] =
127 "missing-provider";
128 const char NetworkConnectionHandler::kErrorConnectCanceled[] = 123 const char NetworkConnectionHandler::kErrorConnectCanceled[] =
129 "connect-canceled"; 124 "connect-canceled";
130 const char NetworkConnectionHandler::kErrorUnknown[] = "unknown-error";
131 125
132 struct NetworkConnectionHandler::ConnectRequest { 126 struct NetworkConnectionHandler::ConnectRequest {
133 ConnectRequest(const std::string& service_path, 127 ConnectRequest(const std::string& service_path,
134 const base::Closure& success, 128 const base::Closure& success,
135 const network_handler::ErrorCallback& error) 129 const network_handler::ErrorCallback& error)
136 : service_path(service_path), 130 : service_path(service_path),
137 connect_state(CONNECT_REQUESTED), 131 connect_state(CONNECT_REQUESTED),
138 success_callback(success), 132 success_callback(success),
139 error_callback(error) { 133 error_callback(error) {
140 } 134 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 return; 241 return;
248 } 242 }
249 if (NetworkRequiresActivation(network)) { 243 if (NetworkRequiresActivation(network)) {
250 InvokeErrorCallback(service_path, error_callback, 244 InvokeErrorCallback(service_path, error_callback,
251 kErrorActivationRequired); 245 kErrorActivationRequired);
252 return; 246 return;
253 } 247 }
254 248
255 if (check_error_state) { 249 if (check_error_state) {
256 const std::string& error = network->error(); 250 const std::string& error = network->error();
257 if (error == flimflam::kErrorConnectFailed) {
pneubeck (no reviews) 2013/08/26 08:14:11 for non-VPN this looks fine, as it's handled later
stevenjb 2013/08/27 15:52:08 The purpose of this code was to try to guess the u
pneubeck (no reviews) 2013/08/28 10:02:35 My bad.. I should have placed this comment to the
258 InvokeErrorCallback(
259 service_path, error_callback, kErrorPassphraseRequired);
260 return;
261 }
262 if (error == flimflam::kErrorBadPassphrase) { 251 if (error == flimflam::kErrorBadPassphrase) {
263 InvokeErrorCallback( 252 InvokeErrorCallback(service_path, error_callback, error);
264 service_path, error_callback, kErrorPassphraseRequired);
265 return; 253 return;
266 } 254 }
267 if (IsAuthenticationError(error)) { 255 if (IsAuthenticationError(error)) {
268 InvokeErrorCallback( 256 InvokeErrorCallback(
269 service_path, error_callback, kErrorAuthenticationRequired); 257 service_path, error_callback, kErrorAuthenticationRequired);
270 return; 258 return;
271 } 259 }
272 } 260 }
273 } 261 }
274 262
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // "Provider.Type", etc keys (which are used only to set the values). 386 // "Provider.Type", etc keys (which are used only to set the values).
399 const base::DictionaryValue* provider_properties; 387 const base::DictionaryValue* provider_properties;
400 if (service_properties.GetDictionaryWithoutPathExpansion( 388 if (service_properties.GetDictionaryWithoutPathExpansion(
401 flimflam::kProviderProperty, &provider_properties)) { 389 flimflam::kProviderProperty, &provider_properties)) {
402 provider_properties->GetStringWithoutPathExpansion( 390 provider_properties->GetStringWithoutPathExpansion(
403 flimflam::kTypeProperty, &vpn_provider_type); 391 flimflam::kTypeProperty, &vpn_provider_type);
404 provider_properties->GetStringWithoutPathExpansion( 392 provider_properties->GetStringWithoutPathExpansion(
405 flimflam::kHostProperty, &vpn_provider_host); 393 flimflam::kHostProperty, &vpn_provider_host);
406 } 394 }
407 if (vpn_provider_type.empty() || vpn_provider_host.empty()) { 395 if (vpn_provider_type.empty() || vpn_provider_host.empty()) {
408 ErrorCallbackForPendingRequest(service_path, kErrorMissingProvider); 396 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired);
409 return; 397 return;
410 } 398 }
411 // VPN requires a host and username to be set. 399 // VPN requires a host and username to be set.
412 if (!VPNIsConfigured( 400 if (!VPNIsConfigured(
413 service_path, vpn_provider_type, *provider_properties)) { 401 service_path, vpn_provider_type, *provider_properties)) {
414 NET_LOG_ERROR("VPN Not Configured", service_path); 402 NET_LOG_ERROR("VPN Not Configured", service_path);
415 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); 403 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired);
416 return; 404 return;
417 } 405 }
418 } 406 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired); 454 ErrorCallbackForPendingRequest(service_path, kErrorCertificateRequired);
467 return; 455 return;
468 } 456 }
469 } 457 }
470 458
471 // The network may not be 'Connectable' because the TPM properties are not 459 // The network may not be 'Connectable' because the TPM properties are not
472 // set up, so configure tpm slot/pin before connecting. 460 // set up, so configure tpm slot/pin before connecting.
473 if (cert_loader_ && cert_loader_->IsHardwareBacked()) { 461 if (cert_loader_ && cert_loader_->IsHardwareBacked()) {
474 // Pass NULL if pkcs11_id is empty, so that it doesn't clear any 462 // Pass NULL if pkcs11_id is empty, so that it doesn't clear any
475 // previously configured client cert. 463 // previously configured client cert.
476 client_cert::SetShillProperties(client_cert_type, 464 client_cert::SetShillProperties(client_cert_type,
pneubeck (no reviews) 2013/08/26 08:14:11 For VPN with certs, we will always reach this poin
477 cert_loader_->tpm_token_slot(), 465 cert_loader_->tpm_token_slot(),
478 cert_loader_->tpm_user_pin(), 466 cert_loader_->tpm_user_pin(),
479 pkcs11_id.empty() ? NULL : &pkcs11_id, 467 pkcs11_id.empty() ? NULL : &pkcs11_id,
480 &config_properties); 468 &config_properties);
481 } 469 }
482 } 470 }
483 471
484 if (!config_properties.empty()) { 472 if (!config_properties.empty()) {
485 NET_LOG_EVENT("Configuring Network", service_path); 473 NET_LOG_EVENT("Configuring Network", service_path);
486 474
(...skipping 14 matching lines...) Expand all
501 flimflam::kSecurityProperty, security); 489 flimflam::kSecurityProperty, security);
502 } 490 }
503 491
504 network_configuration_handler_->SetProperties( 492 network_configuration_handler_->SetProperties(
505 service_path, 493 service_path,
506 config_properties, 494 config_properties,
507 base::Bind(&NetworkConnectionHandler::CallShillConnect, 495 base::Bind(&NetworkConnectionHandler::CallShillConnect,
508 AsWeakPtr(), service_path), 496 AsWeakPtr(), service_path),
509 base::Bind(&NetworkConnectionHandler::HandleConfigurationFailure, 497 base::Bind(&NetworkConnectionHandler::HandleConfigurationFailure,
510 AsWeakPtr(), service_path)); 498 AsWeakPtr(), service_path));
511 return; 499 return;
pneubeck (no reviews) 2013/08/26 08:14:11 ...and then call CallShillConnect/return here. In
stevenjb 2013/08/27 15:52:08 I'm not sure that we can rely on 'connect-failed'
pneubeck (no reviews) 2013/08/28 10:02:35 Still, it doesn't look right to change control flo
512 } 500 }
513 501
514 // Otherwise, we probably still need to configure the network since 502 // Otherwise, we probably still need to configure the network since
515 // 'Connectable' is false. If |check_error_state| is true, signal an 503 // 'Connectable' is false. If |check_error_state| is true, signal an
516 // error, otherwise attempt to connect to possibly gain additional error 504 // error, otherwise attempt to connect to possibly gain additional error
517 // state from Shill (or in case 'Connectable' is improperly unset). 505 // state from Shill (or in case 'Connectable' is improperly unset).
518 if (check_error_state) 506 if (check_error_state)
519 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired); 507 ErrorCallbackForPendingRequest(service_path, kErrorConfigurationRequired);
520 else 508 else
521 CallShillConnect(service_path); 509 CallShillConnect(service_path);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 const std::string& dbus_error_message) { 559 const std::string& dbus_error_message) {
572 ConnectRequest* request = GetPendingRequest(service_path); 560 ConnectRequest* request = GetPendingRequest(service_path);
573 if (!request) { 561 if (!request) {
574 NET_LOG_ERROR("HandleShillConnectFailure called with no pending request.", 562 NET_LOG_ERROR("HandleShillConnectFailure called with no pending request.",
575 service_path); 563 service_path);
576 return; 564 return;
577 } 565 }
578 network_handler::ErrorCallback error_callback = request->error_callback; 566 network_handler::ErrorCallback error_callback = request->error_callback;
579 pending_requests_.erase(service_path); 567 pending_requests_.erase(service_path);
580 network_handler::ShillErrorCallbackFunction( 568 network_handler::ShillErrorCallbackFunction(
581 kErrorConnectFailed, service_path, error_callback, 569 flimflam::kErrorConnectFailed, service_path, error_callback,
582 dbus_error_name, dbus_error_message); 570 dbus_error_name, dbus_error_message);
583 } 571 }
584 572
585 void NetworkConnectionHandler::CheckPendingRequest( 573 void NetworkConnectionHandler::CheckPendingRequest(
586 const std::string service_path) { 574 const std::string service_path) {
587 ConnectRequest* request = GetPendingRequest(service_path); 575 ConnectRequest* request = GetPendingRequest(service_path);
588 DCHECK(request); 576 DCHECK(request);
589 if (request->connect_state == ConnectRequest::CONNECT_REQUESTED) 577 if (request->connect_state == ConnectRequest::CONNECT_REQUESTED)
590 return; // Request has not started, ignore update 578 return; // Request has not started, ignore update
591 const NetworkState* network = 579 const NetworkState* network =
(...skipping 19 matching lines...) Expand all
611 } 599 }
612 600
613 // Network is neither connecting or connected; an error occurred. 601 // Network is neither connecting or connected; an error occurred.
614 std::string error_name, error_detail; 602 std::string error_name, error_detail;
615 if (network->connection_state() == flimflam::kStateIdle && 603 if (network->connection_state() == flimflam::kStateIdle &&
616 pending_requests_.size() > 1) { 604 pending_requests_.size() > 1) {
617 // Another connect request canceled this one. 605 // Another connect request canceled this one.
618 error_name = kErrorConnectCanceled; 606 error_name = kErrorConnectCanceled;
619 error_detail = ""; 607 error_detail = "";
620 } else { 608 } else {
621 error_name = kErrorConnectFailed; 609 error_name = flimflam::kErrorConnectFailed;
622 error_detail = network->error(); 610 error_detail = network->error();
623 if (error_detail.empty()) { 611 if (error_detail.empty()) {
624 if (network->connection_state() == flimflam::kStateFailure) 612 if (network->connection_state() == flimflam::kStateFailure)
625 error_detail = flimflam::kUnknownString; 613 error_detail = flimflam::kUnknownString;
626 else 614 else
627 error_detail = "Unexpected State: " + network->connection_state(); 615 error_detail = "Unexpected State: " + network->connection_state();
628 } 616 }
629 } 617 }
630 std::string error_msg = error_name + ": " + error_detail; 618 std::string error_msg = error_name + ": " + error_detail;
631 NET_LOG_ERROR(error_msg, service_path); 619 NET_LOG_ERROR(error_msg, service_path);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 703
716 void NetworkConnectionHandler::HandleShillActivateSuccess( 704 void NetworkConnectionHandler::HandleShillActivateSuccess(
717 const std::string& service_path, 705 const std::string& service_path,
718 const base::Closure& success_callback) { 706 const base::Closure& success_callback) {
719 NET_LOG_EVENT("Activate Request Sent", service_path); 707 NET_LOG_EVENT("Activate Request Sent", service_path);
720 if (!success_callback.is_null()) 708 if (!success_callback.is_null())
721 success_callback.Run(); 709 success_callback.Run();
722 } 710 }
723 711
724 } // namespace chromeos 712 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698