| 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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 old_user_read_callback_(NULL), | 394 old_user_read_callback_(NULL), |
| 395 user_write_callback_(NULL), | 395 old_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), |
| 405 npn_status_(kNextProtoUnsupported), | 405 npn_status_(kNextProtoUnsupported), |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 user_read_callback_.Reset(); | 625 user_read_callback_.Reset(); |
| 626 user_read_buf_ = NULL; | 626 user_read_buf_ = NULL; |
| 627 user_read_buf_len_ = 0; | 627 user_read_buf_len_ = 0; |
| 628 c.Run(rv); | 628 c.Run(rv); |
| 629 } | 629 } |
| 630 } | 630 } |
| 631 | 631 |
| 632 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { | 632 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { |
| 633 // 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_| |
| 634 // up front. | 634 // up front. |
| 635 OldCompletionCallback* c = user_write_callback_; | 635 if (old_user_write_callback_) { |
| 636 user_write_callback_ = NULL; | 636 OldCompletionCallback* c = old_user_write_callback_; |
| 637 user_write_buf_ = NULL; | 637 old_user_write_callback_ = NULL; |
| 638 user_write_buf_len_ = 0; | 638 user_write_buf_ = NULL; |
| 639 c->Run(rv); | 639 user_write_buf_len_ = 0; |
| 640 c->Run(rv); |
| 641 } else { |
| 642 CompletionCallback c = user_write_callback_; |
| 643 user_write_callback_.Reset(); |
| 644 user_write_buf_ = NULL; |
| 645 user_write_buf_len_ = 0; |
| 646 c.Run(rv); |
| 647 } |
| 640 } | 648 } |
| 641 | 649 |
| 642 // StreamSocket methods | 650 // StreamSocket methods |
| 643 | 651 |
| 644 int SSLClientSocketOpenSSL::Connect(OldCompletionCallback* callback) { | 652 int SSLClientSocketOpenSSL::Connect(OldCompletionCallback* callback) { |
| 645 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); | 653 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); |
| 646 | 654 |
| 647 // Set up new ssl object. | 655 // Set up new ssl object. |
| 648 if (!Init()) { | 656 if (!Init()) { |
| 649 int result = ERR_UNEXPECTED; | 657 int result = ERR_UNEXPECTED; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 // Null all callbacks, delete all buffers. | 713 // Null all callbacks, delete all buffers. |
| 706 transport_send_busy_ = false; | 714 transport_send_busy_ = false; |
| 707 send_buffer_ = NULL; | 715 send_buffer_ = NULL; |
| 708 transport_recv_busy_ = false; | 716 transport_recv_busy_ = false; |
| 709 recv_buffer_ = NULL; | 717 recv_buffer_ = NULL; |
| 710 | 718 |
| 711 old_user_connect_callback_ = NULL; | 719 old_user_connect_callback_ = NULL; |
| 712 user_connect_callback_.Reset(); | 720 user_connect_callback_.Reset(); |
| 713 old_user_read_callback_ = NULL; | 721 old_user_read_callback_ = NULL; |
| 714 user_read_callback_.Reset(); | 722 user_read_callback_.Reset(); |
| 715 user_write_callback_ = NULL; | 723 old_user_write_callback_ = NULL; |
| 724 user_write_callback_.Reset(); |
| 716 user_read_buf_ = NULL; | 725 user_read_buf_ = NULL; |
| 717 user_read_buf_len_ = 0; | 726 user_read_buf_len_ = 0; |
| 718 user_write_buf_ = NULL; | 727 user_write_buf_ = NULL; |
| 719 user_write_buf_len_ = 0; | 728 user_write_buf_len_ = 0; |
| 720 | 729 |
| 721 server_cert_verify_result_.Reset(); | 730 server_cert_verify_result_.Reset(); |
| 722 completed_handshake_ = false; | 731 completed_handshake_ = false; |
| 723 | 732 |
| 724 client_certs_.clear(); | 733 client_certs_.clear(); |
| 725 client_auth_cert_needed_ = false; | 734 client_auth_cert_needed_ = false; |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 | 1248 |
| 1240 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, | 1249 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, |
| 1241 int buf_len, | 1250 int buf_len, |
| 1242 OldCompletionCallback* callback) { | 1251 OldCompletionCallback* callback) { |
| 1243 user_write_buf_ = buf; | 1252 user_write_buf_ = buf; |
| 1244 user_write_buf_len_ = buf_len; | 1253 user_write_buf_len_ = buf_len; |
| 1245 | 1254 |
| 1246 int rv = DoWriteLoop(OK); | 1255 int rv = DoWriteLoop(OK); |
| 1247 | 1256 |
| 1248 if (rv == ERR_IO_PENDING) { | 1257 if (rv == ERR_IO_PENDING) { |
| 1258 old_user_write_callback_ = callback; |
| 1259 } else { |
| 1260 user_write_buf_ = NULL; |
| 1261 user_write_buf_len_ = 0; |
| 1262 } |
| 1263 |
| 1264 return rv; |
| 1265 } |
| 1266 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, |
| 1267 int buf_len, |
| 1268 const CompletionCallback& callback) { |
| 1269 user_write_buf_ = buf; |
| 1270 user_write_buf_len_ = buf_len; |
| 1271 |
| 1272 int rv = DoWriteLoop(OK); |
| 1273 |
| 1274 if (rv == ERR_IO_PENDING) { |
| 1249 user_write_callback_ = callback; | 1275 user_write_callback_ = callback; |
| 1250 } else { | 1276 } else { |
| 1251 user_write_buf_ = NULL; | 1277 user_write_buf_ = NULL; |
| 1252 user_write_buf_len_ = 0; | 1278 user_write_buf_len_ = 0; |
| 1253 } | 1279 } |
| 1254 | 1280 |
| 1255 return rv; | 1281 return rv; |
| 1256 } | 1282 } |
| 1257 | 1283 |
| 1258 int SSLClientSocketOpenSSL::DoWriteLoop(int result) { | 1284 int SSLClientSocketOpenSSL::DoWriteLoop(int result) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv, | 1329 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_SENT, rv, |
| 1304 user_write_buf_->data()); | 1330 user_write_buf_->data()); |
| 1305 return rv; | 1331 return rv; |
| 1306 } | 1332 } |
| 1307 | 1333 |
| 1308 int err = SSL_get_error(ssl_, rv); | 1334 int err = SSL_get_error(ssl_, rv); |
| 1309 return MapOpenSSLError(err, err_tracer); | 1335 return MapOpenSSLError(err, err_tracer); |
| 1310 } | 1336 } |
| 1311 | 1337 |
| 1312 } // namespace net | 1338 } // namespace net |
| OLD | NEW |