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

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

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes. Created 9 years 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_client_socket_openssl.h ('k') | net/socket/ssl_client_socket_win.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ssl.h> 10 #include <openssl/ssl.h>
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 const HostPortPair& host_and_port, 384 const HostPortPair& host_and_port,
385 const SSLConfig& ssl_config, 385 const SSLConfig& ssl_config,
386 const SSLClientSocketContext& context) 386 const SSLClientSocketContext& context)
387 : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_( 387 : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_(
388 this, &SSLClientSocketOpenSSL::BufferSendComplete)), 388 this, &SSLClientSocketOpenSSL::BufferSendComplete)),
389 ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_( 389 ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_(
390 this, &SSLClientSocketOpenSSL::BufferRecvComplete)), 390 this, &SSLClientSocketOpenSSL::BufferRecvComplete)),
391 transport_send_busy_(false), 391 transport_send_busy_(false),
392 transport_recv_busy_(false), 392 transport_recv_busy_(false),
393 old_user_connect_callback_(NULL), 393 old_user_connect_callback_(NULL),
394 user_read_callback_(NULL), 394 old_user_read_callback_(NULL),
395 user_write_callback_(NULL), 395 user_write_callback_(NULL),
396 completed_handshake_(false), 396 completed_handshake_(false),
397 client_auth_cert_needed_(false), 397 client_auth_cert_needed_(false),
398 cert_verifier_(context.cert_verifier), 398 cert_verifier_(context.cert_verifier),
399 ssl_(NULL), 399 ssl_(NULL),
400 transport_bio_(NULL), 400 transport_bio_(NULL),
401 transport_(transport_socket), 401 transport_(transport_socket),
402 host_and_port_(host_and_port), 402 host_and_port_(host_and_port),
403 ssl_config_(ssl_config), 403 ssl_config_(ssl_config),
404 trying_cached_session_(false), 404 trying_cached_session_(false),
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 SSLClientSocket::NextProtoStatus SSLClientSocketOpenSSL::GetNextProto( 607 SSLClientSocket::NextProtoStatus SSLClientSocketOpenSSL::GetNextProto(
608 std::string* proto, std::string* server_protos) { 608 std::string* proto, std::string* server_protos) {
609 *proto = npn_proto_; 609 *proto = npn_proto_;
610 *server_protos = server_protos_; 610 *server_protos = server_protos_;
611 return npn_status_; 611 return npn_status_;
612 } 612 }
613 613
614 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { 614 void SSLClientSocketOpenSSL::DoReadCallback(int rv) {
615 // Since Run may result in Read being called, clear |user_read_callback_| 615 // Since Run may result in Read being called, clear |user_read_callback_|
616 // up front. 616 // up front.
617 OldCompletionCallback* c = user_read_callback_; 617 if (old_user_read_callback_) {
618 user_read_callback_ = NULL; 618 OldCompletionCallback* c = old_user_read_callback_;
619 user_read_buf_ = NULL; 619 old_user_read_callback_ = NULL;
620 user_read_buf_len_ = 0; 620 user_read_buf_ = NULL;
621 c->Run(rv); 621 user_read_buf_len_ = 0;
622 c->Run(rv);
623 } else {
624 CompletionCallback c = user_read_callback_;
625 user_read_callback_.Reset();
626 user_read_buf_ = NULL;
627 user_read_buf_len_ = 0;
628 c.Run(rv);
629 }
622 } 630 }
623 631
624 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { 632 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) {
625 // Since Run may result in Write being called, clear |user_write_callback_| 633 // Since Run may result in Write being called, clear |user_write_callback_|
626 // up front. 634 // up front.
627 OldCompletionCallback* c = user_write_callback_; 635 OldCompletionCallback* c = user_write_callback_;
628 user_write_callback_ = NULL; 636 user_write_callback_ = NULL;
629 user_write_buf_ = NULL; 637 user_write_buf_ = NULL;
630 user_write_buf_len_ = 0; 638 user_write_buf_len_ = 0;
631 c->Run(rv); 639 c->Run(rv);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 transport_->socket()->Disconnect(); 703 transport_->socket()->Disconnect();
696 704
697 // Null all callbacks, delete all buffers. 705 // Null all callbacks, delete all buffers.
698 transport_send_busy_ = false; 706 transport_send_busy_ = false;
699 send_buffer_ = NULL; 707 send_buffer_ = NULL;
700 transport_recv_busy_ = false; 708 transport_recv_busy_ = false;
701 recv_buffer_ = NULL; 709 recv_buffer_ = NULL;
702 710
703 old_user_connect_callback_ = NULL; 711 old_user_connect_callback_ = NULL;
704 user_connect_callback_.Reset(); 712 user_connect_callback_.Reset();
705 user_read_callback_ = NULL; 713 old_user_read_callback_ = NULL;
714 user_read_callback_.Reset();
706 user_write_callback_ = NULL; 715 user_write_callback_ = NULL;
707 user_read_buf_ = NULL; 716 user_read_buf_ = NULL;
708 user_read_buf_len_ = 0; 717 user_read_buf_len_ = 0;
709 user_write_buf_ = NULL; 718 user_write_buf_ = NULL;
710 user_write_buf_len_ = 0; 719 user_write_buf_len_ = 0;
711 720
712 server_cert_verify_result_.Reset(); 721 server_cert_verify_result_.Reset();
713 completed_handshake_ = false; 722 completed_handshake_ = false;
714 723
715 client_certs_.clear(); 724 client_certs_.clear();
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 1190
1182 int SSLClientSocketOpenSSL::Read(IOBuffer* buf, 1191 int SSLClientSocketOpenSSL::Read(IOBuffer* buf,
1183 int buf_len, 1192 int buf_len,
1184 OldCompletionCallback* callback) { 1193 OldCompletionCallback* callback) {
1185 user_read_buf_ = buf; 1194 user_read_buf_ = buf;
1186 user_read_buf_len_ = buf_len; 1195 user_read_buf_len_ = buf_len;
1187 1196
1188 int rv = DoReadLoop(OK); 1197 int rv = DoReadLoop(OK);
1189 1198
1190 if (rv == ERR_IO_PENDING) { 1199 if (rv == ERR_IO_PENDING) {
1200 old_user_read_callback_ = callback;
1201 } else {
1202 user_read_buf_ = NULL;
1203 user_read_buf_len_ = 0;
1204 }
1205
1206 return rv;
1207 }
1208 int SSLClientSocketOpenSSL::Read(IOBuffer* buf,
1209 int buf_len,
1210 const CompletionCallback& callback) {
1211 user_read_buf_ = buf;
1212 user_read_buf_len_ = buf_len;
1213
1214 int rv = DoReadLoop(OK);
1215
1216 if (rv == ERR_IO_PENDING) {
1191 user_read_callback_ = callback; 1217 user_read_callback_ = callback;
1192 } else { 1218 } else {
1193 user_read_buf_ = NULL; 1219 user_read_buf_ = NULL;
1194 user_read_buf_len_ = 0; 1220 user_read_buf_len_ = 0;
1195 } 1221 }
1196 1222
1197 return rv; 1223 return rv;
1198 } 1224 }
1199 1225
1200 int SSLClientSocketOpenSSL::DoReadLoop(int result) { 1226 int SSLClientSocketOpenSSL::DoReadLoop(int result) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv, 1303 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv,
1278 user_write_buf_->data()); 1304 user_write_buf_->data());
1279 return rv; 1305 return rv;
1280 } 1306 }
1281 1307
1282 int err = SSL_get_error(ssl_, rv); 1308 int err = SSL_get_error(ssl_, rv);
1283 return MapOpenSSLError(err, err_tracer); 1309 return MapOpenSSLError(err, err_tracer);
1284 } 1310 }
1285 1311
1286 } // namespace net 1312 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_openssl.h ('k') | net/socket/ssl_client_socket_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698