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

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

Issue 169643006: Use sockets with unread data if they've never been used before. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tweak SpdySession::IsReused (erf, got mixed in with a rebase) Created 6 years, 9 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) 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 // OpenSSL binding for SSLClientSocket. The class layout and general principle 5 // OpenSSL binding for SSLClientSocket. The class layout and general principle
6 // of operation is derived from SSLClientSocketNSS. 6 // of operation is derived from SSLClientSocketNSS.
7 7
8 #include "net/socket/ssl_client_socket_openssl.h" 8 #include "net/socket/ssl_client_socket_openssl.h"
9 9
10 #include <openssl/err.h> 10 #include <openssl/err.h>
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 const HostPortPair& host_and_port, 348 const HostPortPair& host_and_port,
349 const SSLConfig& ssl_config, 349 const SSLConfig& ssl_config,
350 const SSLClientSocketContext& context) 350 const SSLClientSocketContext& context)
351 : transport_send_busy_(false), 351 : transport_send_busy_(false),
352 transport_recv_busy_(false), 352 transport_recv_busy_(false),
353 transport_recv_eof_(false), 353 transport_recv_eof_(false),
354 weak_factory_(this), 354 weak_factory_(this),
355 pending_read_error_(kNoPendingReadResult), 355 pending_read_error_(kNoPendingReadResult),
356 transport_write_error_(OK), 356 transport_write_error_(OK),
357 completed_handshake_(false), 357 completed_handshake_(false),
358 was_used_to_convey_data_(false),
358 client_auth_cert_needed_(false), 359 client_auth_cert_needed_(false),
359 cert_verifier_(context.cert_verifier), 360 cert_verifier_(context.cert_verifier),
360 server_bound_cert_service_(context.server_bound_cert_service), 361 server_bound_cert_service_(context.server_bound_cert_service),
361 ssl_(NULL), 362 ssl_(NULL),
362 transport_bio_(NULL), 363 transport_bio_(NULL),
363 transport_(transport_socket.Pass()), 364 transport_(transport_socket.Pass()),
364 host_and_port_(host_and_port), 365 host_and_port_(host_and_port),
365 ssl_config_(ssl_config), 366 ssl_config_(ssl_config),
366 ssl_session_cache_shard_(context.ssl_session_cache_shard), 367 ssl_session_cache_shard_(context.ssl_session_cache_shard),
367 trying_cached_session_(false), 368 trying_cached_session_(false),
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 538
538 void SSLClientSocketOpenSSL::SetOmniboxSpeculation() { 539 void SSLClientSocketOpenSSL::SetOmniboxSpeculation() {
539 if (transport_.get() && transport_->socket()) { 540 if (transport_.get() && transport_->socket()) {
540 transport_->socket()->SetOmniboxSpeculation(); 541 transport_->socket()->SetOmniboxSpeculation();
541 } else { 542 } else {
542 NOTREACHED(); 543 NOTREACHED();
543 } 544 }
544 } 545 }
545 546
546 bool SSLClientSocketOpenSSL::WasEverUsed() const { 547 bool SSLClientSocketOpenSSL::WasEverUsed() const {
547 if (transport_.get() && transport_->socket()) 548 return was_used_to_convey_data_;
548 return transport_->socket()->WasEverUsed();
549
550 NOTREACHED();
551 return false;
552 } 549 }
553 550
554 bool SSLClientSocketOpenSSL::UsingTCPFastOpen() const { 551 bool SSLClientSocketOpenSSL::UsingTCPFastOpen() const {
555 if (transport_.get() && transport_->socket()) 552 if (transport_.get() && transport_->socket())
556 return transport_->socket()->UsingTCPFastOpen(); 553 return transport_->socket()->UsingTCPFastOpen();
557 554
558 NOTREACHED(); 555 NOTREACHED();
559 return false; 556 return false;
560 } 557 }
561 558
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 int buf_len, 609 int buf_len,
613 const CompletionCallback& callback) { 610 const CompletionCallback& callback) {
614 user_read_buf_ = buf; 611 user_read_buf_ = buf;
615 user_read_buf_len_ = buf_len; 612 user_read_buf_len_ = buf_len;
616 613
617 int rv = DoReadLoop(OK); 614 int rv = DoReadLoop(OK);
618 615
619 if (rv == ERR_IO_PENDING) { 616 if (rv == ERR_IO_PENDING) {
620 user_read_callback_ = callback; 617 user_read_callback_ = callback;
621 } else { 618 } else {
619 if (rv > 0)
620 was_used_to_convey_data_ = true;
622 user_read_buf_ = NULL; 621 user_read_buf_ = NULL;
623 user_read_buf_len_ = 0; 622 user_read_buf_len_ = 0;
624 } 623 }
625 624
626 return rv; 625 return rv;
627 } 626 }
628 627
629 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, 628 int SSLClientSocketOpenSSL::Write(IOBuffer* buf,
630 int buf_len, 629 int buf_len,
631 const CompletionCallback& callback) { 630 const CompletionCallback& callback) {
632 user_write_buf_ = buf; 631 user_write_buf_ = buf;
633 user_write_buf_len_ = buf_len; 632 user_write_buf_len_ = buf_len;
634 633
635 int rv = DoWriteLoop(OK); 634 int rv = DoWriteLoop(OK);
636 635
637 if (rv == ERR_IO_PENDING) { 636 if (rv == ERR_IO_PENDING) {
638 user_write_callback_ = callback; 637 user_write_callback_ = callback;
639 } else { 638 } else {
639 if (rv > 0)
640 was_used_to_convey_data_ = true;
640 user_write_buf_ = NULL; 641 user_write_buf_ = NULL;
641 user_write_buf_len_ = 0; 642 user_write_buf_len_ = 0;
642 } 643 }
643 644
644 return rv; 645 return rv;
645 } 646 }
646 647
647 bool SSLClientSocketOpenSSL::SetReceiveBufferSize(int32 size) { 648 bool SSLClientSocketOpenSSL::SetReceiveBufferSize(int32 size) {
648 return transport_->socket()->SetReceiveBufferSize(size); 649 return transport_->socket()->SetReceiveBufferSize(size);
649 } 650 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 if (IsChannelIDEnabled(ssl_config_, server_bound_cert_service_)) { 770 if (IsChannelIDEnabled(ssl_config_, server_bound_cert_service_)) {
770 SSL_enable_tls_channel_id(ssl_); 771 SSL_enable_tls_channel_id(ssl_);
771 } 772 }
772 773
773 return true; 774 return true;
774 } 775 }
775 776
776 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { 777 void SSLClientSocketOpenSSL::DoReadCallback(int rv) {
777 // Since Run may result in Read being called, clear |user_read_callback_| 778 // Since Run may result in Read being called, clear |user_read_callback_|
778 // up front. 779 // up front.
780 if (rv > 0)
781 was_used_to_convey_data_ = true;
779 user_read_buf_ = NULL; 782 user_read_buf_ = NULL;
780 user_read_buf_len_ = 0; 783 user_read_buf_len_ = 0;
781 base::ResetAndReturn(&user_read_callback_).Run(rv); 784 base::ResetAndReturn(&user_read_callback_).Run(rv);
782 } 785 }
783 786
784 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { 787 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) {
785 // Since Run may result in Write being called, clear |user_write_callback_| 788 // Since Run may result in Write being called, clear |user_write_callback_|
786 // up front. 789 // up front.
790 if (rv > 0)
791 was_used_to_convey_data_ = true;
787 user_write_buf_ = NULL; 792 user_write_buf_ = NULL;
788 user_write_buf_len_ = 0; 793 user_write_buf_len_ = 0;
789 base::ResetAndReturn(&user_write_callback_).Run(rv); 794 base::ResetAndReturn(&user_write_callback_).Run(rv);
790 } 795 }
791 796
792 bool SSLClientSocketOpenSSL::DoTransportIO() { 797 bool SSLClientSocketOpenSSL::DoTransportIO() {
793 bool network_moved = false; 798 bool network_moved = false;
794 int rv; 799 int rv;
795 // Read and write as much data as possible. The loop is necessary because 800 // Read and write as much data as possible. The loop is necessary because
796 // Write() may return synchronously. 801 // Write() may return synchronously.
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1441 } 1446 }
1442 1447
1443 npn_proto_.assign(reinterpret_cast<const char*>(*out), *outlen); 1448 npn_proto_.assign(reinterpret_cast<const char*>(*out), *outlen);
1444 server_protos_.assign(reinterpret_cast<const char*>(in), inlen); 1449 server_protos_.assign(reinterpret_cast<const char*>(in), inlen);
1445 DVLOG(2) << "next protocol: '" << npn_proto_ << "' status: " << npn_status_; 1450 DVLOG(2) << "next protocol: '" << npn_proto_ << "' status: " << npn_status_;
1446 #endif 1451 #endif
1447 return SSL_TLSEXT_ERR_OK; 1452 return SSL_TLSEXT_ERR_OK;
1448 } 1453 }
1449 1454
1450 } // namespace net 1455 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698