Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |