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

Side by Side Diff: net/socket/ssl_server_socket_openssl.cc

Issue 494913002: Include better OpenSSL error information in NetLog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: inline pod ctor Created 6 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
« no previous file with comments | « net/socket/ssl_server_socket_nss.cc ('k') | net/ssl/openssl_ssl_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "net/socket/ssl_server_socket_openssl.h" 5 #include "net/socket/ssl_server_socket_openssl.h"
6 6
7 #include <openssl/err.h> 7 #include <openssl/err.h>
8 #include <openssl/ssl.h> 8 #include <openssl/ssl.h>
9 9
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "crypto/openssl_util.h" 12 #include "crypto/openssl_util.h"
13 #include "crypto/rsa_private_key.h" 13 #include "crypto/rsa_private_key.h"
14 #include "crypto/scoped_openssl_types.h" 14 #include "crypto/scoped_openssl_types.h"
15 #include "net/base/net_errors.h" 15 #include "net/base/net_errors.h"
16 #include "net/socket/ssl_error_params.h"
17 #include "net/ssl/openssl_ssl_util.h" 16 #include "net/ssl/openssl_ssl_util.h"
18 17
19 #define GotoState(s) next_handshake_state_ = s 18 #define GotoState(s) next_handshake_state_ = s
20 19
21 namespace net { 20 namespace net {
22 21
23 void EnableSSLServerSockets() { 22 void EnableSSLServerSockets() {
24 // No-op because CreateSSLServerSocket() calls crypto::EnsureOpenSSLInit(). 23 // No-op because CreateSSLServerSocket() calls crypto::EnsureOpenSSLInit().
25 } 24 }
26 25
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 } 449 }
451 450
452 int SSLServerSocketOpenSSL::DoPayloadRead() { 451 int SSLServerSocketOpenSSL::DoPayloadRead() {
453 DCHECK(user_read_buf_.get()); 452 DCHECK(user_read_buf_.get());
454 DCHECK_GT(user_read_buf_len_, 0); 453 DCHECK_GT(user_read_buf_len_, 0);
455 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); 454 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
456 int rv = SSL_read(ssl_, user_read_buf_->data(), user_read_buf_len_); 455 int rv = SSL_read(ssl_, user_read_buf_->data(), user_read_buf_len_);
457 if (rv >= 0) 456 if (rv >= 0)
458 return rv; 457 return rv;
459 int ssl_error = SSL_get_error(ssl_, rv); 458 int ssl_error = SSL_get_error(ssl_, rv);
460 int net_error = MapOpenSSLError(ssl_error, err_tracer); 459 OpenSSLErrorInfo error_info;
460 int net_error = MapOpenSSLErrorWithDetails(ssl_error, err_tracer,
461 &error_info);
461 if (net_error != ERR_IO_PENDING) { 462 if (net_error != ERR_IO_PENDING) {
462 net_log_.AddEvent(NetLog::TYPE_SSL_READ_ERROR, 463 net_log_.AddEvent(
463 CreateNetLogSSLErrorCallback(net_error, ssl_error)); 464 NetLog::TYPE_SSL_READ_ERROR,
465 CreateNetLogOpenSSLErrorCallback(net_error, ssl_error, error_info));
464 } 466 }
465 return net_error; 467 return net_error;
466 } 468 }
467 469
468 int SSLServerSocketOpenSSL::DoPayloadWrite() { 470 int SSLServerSocketOpenSSL::DoPayloadWrite() {
469 DCHECK(user_write_buf_.get()); 471 DCHECK(user_write_buf_.get());
470 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); 472 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
471 int rv = SSL_write(ssl_, user_write_buf_->data(), user_write_buf_len_); 473 int rv = SSL_write(ssl_, user_write_buf_->data(), user_write_buf_len_);
472 if (rv >= 0) 474 if (rv >= 0)
473 return rv; 475 return rv;
474 int ssl_error = SSL_get_error(ssl_, rv); 476 int ssl_error = SSL_get_error(ssl_, rv);
475 int net_error = MapOpenSSLError(ssl_error, err_tracer); 477 OpenSSLErrorInfo error_info;
478 int net_error = MapOpenSSLErrorWithDetails(ssl_error, err_tracer,
479 &error_info);
476 if (net_error != ERR_IO_PENDING) { 480 if (net_error != ERR_IO_PENDING) {
477 net_log_.AddEvent(NetLog::TYPE_SSL_WRITE_ERROR, 481 net_log_.AddEvent(
478 CreateNetLogSSLErrorCallback(net_error, ssl_error)); 482 NetLog::TYPE_SSL_WRITE_ERROR,
483 CreateNetLogOpenSSLErrorCallback(net_error, ssl_error, error_info));
479 } 484 }
480 return net_error; 485 return net_error;
481 } 486 }
482 487
483 int SSLServerSocketOpenSSL::DoHandshakeLoop(int last_io_result) { 488 int SSLServerSocketOpenSSL::DoHandshakeLoop(int last_io_result) {
484 int rv = last_io_result; 489 int rv = last_io_result;
485 do { 490 do {
486 // Default to STATE_NONE for next state. 491 // Default to STATE_NONE for next state.
487 // (This is a quirk carried over from the windows 492 // (This is a quirk carried over from the windows
488 // implementation. It makes reading the logs a bit harder.) 493 // implementation. It makes reading the logs a bit harder.)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 552
548 int SSLServerSocketOpenSSL::DoHandshake() { 553 int SSLServerSocketOpenSSL::DoHandshake() {
549 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); 554 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
550 int net_error = OK; 555 int net_error = OK;
551 int rv = SSL_do_handshake(ssl_); 556 int rv = SSL_do_handshake(ssl_);
552 557
553 if (rv == 1) { 558 if (rv == 1) {
554 completed_handshake_ = true; 559 completed_handshake_ = true;
555 } else { 560 } else {
556 int ssl_error = SSL_get_error(ssl_, rv); 561 int ssl_error = SSL_get_error(ssl_, rv);
557 net_error = MapOpenSSLError(ssl_error, err_tracer); 562 OpenSSLErrorInfo error_info;
563 net_error = MapOpenSSLErrorWithDetails(ssl_error, err_tracer, &error_info);
558 564
559 // If not done, stay in this state 565 // If not done, stay in this state
560 if (net_error == ERR_IO_PENDING) { 566 if (net_error == ERR_IO_PENDING) {
561 GotoState(STATE_HANDSHAKE); 567 GotoState(STATE_HANDSHAKE);
562 } else { 568 } else {
563 LOG(ERROR) << "handshake failed; returned " << rv 569 LOG(ERROR) << "handshake failed; returned " << rv
564 << ", SSL error code " << ssl_error 570 << ", SSL error code " << ssl_error
565 << ", net_error " << net_error; 571 << ", net_error " << net_error;
566 net_log_.AddEvent(NetLog::TYPE_SSL_HANDSHAKE_ERROR, 572 net_log_.AddEvent(
567 CreateNetLogSSLErrorCallback(net_error, ssl_error)); 573 NetLog::TYPE_SSL_HANDSHAKE_ERROR,
574 CreateNetLogOpenSSLErrorCallback(net_error, ssl_error, error_info));
568 } 575 }
569 } 576 }
570 return net_error; 577 return net_error;
571 } 578 }
572 579
573 void SSLServerSocketOpenSSL::DoHandshakeCallback(int rv) { 580 void SSLServerSocketOpenSSL::DoHandshakeCallback(int rv) {
574 DCHECK_NE(rv, ERR_IO_PENDING); 581 DCHECK_NE(rv, ERR_IO_PENDING);
575 ResetAndReturn(&user_handshake_callback_).Run(rv > OK ? OK : rv); 582 ResetAndReturn(&user_handshake_callback_).Run(rv > OK ? OK : rv);
576 } 583 }
577 584
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 684
678 mode.ConfigureFlag(SSL_MODE_RELEASE_BUFFERS, true); 685 mode.ConfigureFlag(SSL_MODE_RELEASE_BUFFERS, true);
679 686
680 SSL_set_mode(ssl_, mode.set_mask); 687 SSL_set_mode(ssl_, mode.set_mask);
681 SSL_clear_mode(ssl_, mode.clear_mask); 688 SSL_clear_mode(ssl_, mode.clear_mask);
682 689
683 return OK; 690 return OK;
684 } 691 }
685 692
686 } // namespace net 693 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_server_socket_nss.cc ('k') | net/ssl/openssl_ssl_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698