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

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: 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
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 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 606
607 SSLClientSocket::NextProtoStatus SSLClientSocketOpenSSL::GetNextProto( 607 SSLClientSocket::NextProtoStatus SSLClientSocketOpenSSL::GetNextProto(
608 std::string* proto) { 608 std::string* proto) {
609 *proto = npn_proto_; 609 *proto = npn_proto_;
610 return npn_status_; 610 return npn_status_;
611 } 611 }
612 612
613 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { 613 void SSLClientSocketOpenSSL::DoReadCallback(int rv) {
614 // Since Run may result in Read being called, clear |user_read_callback_| 614 // Since Run may result in Read being called, clear |user_read_callback_|
615 // up front. 615 // up front.
616 OldCompletionCallback* c = user_read_callback_; 616 if (old_user_read_callback_) {
617 user_read_callback_ = NULL; 617 OldCompletionCallback* c = old_user_read_callback_;
618 user_read_buf_ = NULL; 618 old_user_read_callback_ = NULL;
619 user_read_buf_len_ = 0; 619 user_read_buf_ = NULL;
620 c->Run(rv); 620 user_read_buf_len_ = 0;
621 c->Run(rv);
622 } else {
623 CompletionCallback c = user_read_callback_;
624 user_read_callback_.Reset();
625 user_read_buf_ = NULL;
626 user_read_buf_len_ = 0;
627 c.Run(rv);
628 }
621 } 629 }
622 630
623 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { 631 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) {
624 // Since Run may result in Write being called, clear |user_write_callback_| 632 // Since Run may result in Write being called, clear |user_write_callback_|
625 // up front. 633 // up front.
626 OldCompletionCallback* c = user_write_callback_; 634 OldCompletionCallback* c = user_write_callback_;
627 user_write_callback_ = NULL; 635 user_write_callback_ = NULL;
628 user_write_buf_ = NULL; 636 user_write_buf_ = NULL;
629 user_write_buf_len_ = 0; 637 user_write_buf_len_ = 0;
630 c->Run(rv); 638 c->Run(rv);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 transport_->socket()->Disconnect(); 702 transport_->socket()->Disconnect();
695 703
696 // Null all callbacks, delete all buffers. 704 // Null all callbacks, delete all buffers.
697 transport_send_busy_ = false; 705 transport_send_busy_ = false;
698 send_buffer_ = NULL; 706 send_buffer_ = NULL;
699 transport_recv_busy_ = false; 707 transport_recv_busy_ = false;
700 recv_buffer_ = NULL; 708 recv_buffer_ = NULL;
701 709
702 old_user_connect_callback_ = NULL; 710 old_user_connect_callback_ = NULL;
703 user_connect_callback_.Reset(); 711 user_connect_callback_.Reset();
704 user_read_callback_ = NULL; 712 old_user_read_callback_ = NULL;
713 user_read_callback_.Reset();
705 user_write_callback_ = NULL; 714 user_write_callback_ = NULL;
706 user_read_buf_ = NULL; 715 user_read_buf_ = NULL;
707 user_read_buf_len_ = 0; 716 user_read_buf_len_ = 0;
708 user_write_buf_ = NULL; 717 user_write_buf_ = NULL;
709 user_write_buf_len_ = 0; 718 user_write_buf_len_ = 0;
710 719
711 server_cert_verify_result_.Reset(); 720 server_cert_verify_result_.Reset();
712 completed_handshake_ = false; 721 completed_handshake_ = false;
713 722
714 client_certs_.clear(); 723 client_certs_.clear();
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 1188
1180 int SSLClientSocketOpenSSL::Read(IOBuffer* buf, 1189 int SSLClientSocketOpenSSL::Read(IOBuffer* buf,
1181 int buf_len, 1190 int buf_len,
1182 OldCompletionCallback* callback) { 1191 OldCompletionCallback* callback) {
1183 user_read_buf_ = buf; 1192 user_read_buf_ = buf;
1184 user_read_buf_len_ = buf_len; 1193 user_read_buf_len_ = buf_len;
1185 1194
1186 int rv = DoReadLoop(OK); 1195 int rv = DoReadLoop(OK);
1187 1196
1188 if (rv == ERR_IO_PENDING) { 1197 if (rv == ERR_IO_PENDING) {
1189 user_read_callback_ = callback; 1198 old_user_read_callback_ = callback;
1190 } else { 1199 } else {
1191 user_read_buf_ = NULL; 1200 user_read_buf_ = NULL;
1192 user_read_buf_len_ = 0; 1201 user_read_buf_len_ = 0;
1202 }
1203
1204 return rv;
1205 }
1206 int SSLClientSocketOpenSSL::Read(IOBuffer* buf,
1207 int buf_len,
1208 const CompletionCallback& callback) {
1209 user_read_buf_ = buf;
1210 user_read_buf_len_ = buf_len;
1211
1212 int rv = DoReadLoop(OK);
1213
1214 if (rv == ERR_IO_PENDING) {
1215 old_user_read_callback_ = callback;
csilv 2011/12/07 00:03:48 user_read_callback_ = callback;
James Hawkins 2011/12/07 00:19:37 Done.
1216 } else {
1217 user_read_buf_ = NULL;
1218 user_read_buf_len_ = 0;
1193 } 1219 }
1194 1220
1195 return rv; 1221 return rv;
1196 } 1222 }
1197 1223
1198 int SSLClientSocketOpenSSL::DoReadLoop(int result) { 1224 int SSLClientSocketOpenSSL::DoReadLoop(int result) {
1199 if (result < 0) 1225 if (result < 0)
1200 return result; 1226 return result;
1201 1227
1202 bool network_moved; 1228 bool network_moved;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv, 1301 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv,
1276 user_write_buf_->data()); 1302 user_write_buf_->data());
1277 return rv; 1303 return rv;
1278 } 1304 }
1279 1305
1280 int err = SSL_get_error(ssl_, rv); 1306 int err = SSL_get_error(ssl_, rv);
1281 return MapOpenSSLError(err, err_tracer); 1307 return MapOpenSSLError(err, err_tracer);
1282 } 1308 }
1283 1309
1284 } // namespace net 1310 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698