| 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 #include "net/socket/ssl_server_socket_nss.h" | 5 #include "net/socket/ssl_server_socket_nss.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <winsock2.h> | 8 #include <winsock2.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 scoped_refptr<X509Certificate> cert, | 58 scoped_refptr<X509Certificate> cert, |
| 59 crypto::RSAPrivateKey* key, | 59 crypto::RSAPrivateKey* key, |
| 60 const SSLConfig& ssl_config) | 60 const SSLConfig& ssl_config) |
| 61 : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_( | 61 : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_( |
| 62 this, &SSLServerSocketNSS::BufferSendComplete)), | 62 this, &SSLServerSocketNSS::BufferSendComplete)), |
| 63 ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_( | 63 ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_( |
| 64 this, &SSLServerSocketNSS::BufferRecvComplete)), | 64 this, &SSLServerSocketNSS::BufferRecvComplete)), |
| 65 transport_send_busy_(false), | 65 transport_send_busy_(false), |
| 66 transport_recv_busy_(false), | 66 transport_recv_busy_(false), |
| 67 user_handshake_callback_(NULL), | 67 user_handshake_callback_(NULL), |
| 68 user_read_callback_(NULL), | 68 old_user_read_callback_(NULL), |
| 69 user_write_callback_(NULL), | 69 user_write_callback_(NULL), |
| 70 nss_fd_(NULL), | 70 nss_fd_(NULL), |
| 71 nss_bufs_(NULL), | 71 nss_bufs_(NULL), |
| 72 transport_socket_(transport_socket), | 72 transport_socket_(transport_socket), |
| 73 ssl_config_(ssl_config), | 73 ssl_config_(ssl_config), |
| 74 cert_(cert), | 74 cert_(cert), |
| 75 next_handshake_state_(STATE_NONE), | 75 next_handshake_state_(STATE_NONE), |
| 76 completed_handshake_(false) { | 76 completed_handshake_(false) { |
| 77 ssl_config_.false_start_enabled = false; | 77 ssl_config_.false_start_enabled = false; |
| 78 ssl_config_.ssl3_enabled = true; | 78 ssl_config_.ssl3_enabled = true; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 NOTIMPLEMENTED(); | 147 NOTIMPLEMENTED(); |
| 148 return ERR_NOT_IMPLEMENTED; | 148 return ERR_NOT_IMPLEMENTED; |
| 149 } | 149 } |
| 150 int SSLServerSocketNSS::Connect(const CompletionCallback& callback) { | 150 int SSLServerSocketNSS::Connect(const CompletionCallback& callback) { |
| 151 NOTIMPLEMENTED(); | 151 NOTIMPLEMENTED(); |
| 152 return ERR_NOT_IMPLEMENTED; | 152 return ERR_NOT_IMPLEMENTED; |
| 153 } | 153 } |
| 154 | 154 |
| 155 int SSLServerSocketNSS::Read(IOBuffer* buf, int buf_len, | 155 int SSLServerSocketNSS::Read(IOBuffer* buf, int buf_len, |
| 156 OldCompletionCallback* callback) { | 156 OldCompletionCallback* callback) { |
| 157 DCHECK(!user_read_callback_); | 157 DCHECK(!old_user_read_callback_); |
| 158 DCHECK(!user_handshake_callback_); | 158 DCHECK(!user_handshake_callback_); |
| 159 DCHECK(!user_read_buf_); | 159 DCHECK(!user_read_buf_); |
| 160 DCHECK(nss_bufs_); | 160 DCHECK(nss_bufs_); |
| 161 |
| 162 user_read_buf_ = buf; |
| 163 user_read_buf_len_ = buf_len; |
| 164 |
| 165 DCHECK(completed_handshake_); |
| 166 |
| 167 int rv = DoReadLoop(OK); |
| 168 |
| 169 if (rv == ERR_IO_PENDING) { |
| 170 old_user_read_callback_ = callback; |
| 171 } else { |
| 172 user_read_buf_ = NULL; |
| 173 user_read_buf_len_ = 0; |
| 174 } |
| 175 return rv; |
| 176 } |
| 177 int SSLServerSocketNSS::Read(IOBuffer* buf, int buf_len, |
| 178 const CompletionCallback& callback) { |
| 179 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); |
| 180 DCHECK(!user_handshake_callback_); |
| 181 DCHECK(!user_read_buf_); |
| 182 DCHECK(nss_bufs_); |
| 161 | 183 |
| 162 user_read_buf_ = buf; | 184 user_read_buf_ = buf; |
| 163 user_read_buf_len_ = buf_len; | 185 user_read_buf_len_ = buf_len; |
| 164 | 186 |
| 165 DCHECK(completed_handshake_); | 187 DCHECK(completed_handshake_); |
| 166 | 188 |
| 167 int rv = DoReadLoop(OK); | 189 int rv = DoReadLoop(OK); |
| 168 | 190 |
| 169 if (rv == ERR_IO_PENDING) { | 191 if (rv == ERR_IO_PENDING) { |
| 170 user_read_callback_ = callback; | 192 user_read_callback_ = callback; |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 void SSLServerSocketNSS::DoHandshakeCallback(int rv) { | 732 void SSLServerSocketNSS::DoHandshakeCallback(int rv) { |
| 711 DCHECK_NE(rv, ERR_IO_PENDING); | 733 DCHECK_NE(rv, ERR_IO_PENDING); |
| 712 | 734 |
| 713 OldCompletionCallback* c = user_handshake_callback_; | 735 OldCompletionCallback* c = user_handshake_callback_; |
| 714 user_handshake_callback_ = NULL; | 736 user_handshake_callback_ = NULL; |
| 715 c->Run(rv > OK ? OK : rv); | 737 c->Run(rv > OK ? OK : rv); |
| 716 } | 738 } |
| 717 | 739 |
| 718 void SSLServerSocketNSS::DoReadCallback(int rv) { | 740 void SSLServerSocketNSS::DoReadCallback(int rv) { |
| 719 DCHECK(rv != ERR_IO_PENDING); | 741 DCHECK(rv != ERR_IO_PENDING); |
| 720 DCHECK(user_read_callback_); | 742 DCHECK(old_user_read_callback_ || !user_read_callback_.is_null()); |
| 721 | 743 |
| 722 // Since Run may result in Read being called, clear |user_read_callback_| | 744 // Since Run may result in Read being called, clear |old_user_read_callback_| |
| 723 // up front. | 745 // up front. |
| 724 OldCompletionCallback* c = user_read_callback_; | 746 if (old_user_read_callback_) { |
| 725 user_read_callback_ = NULL; | 747 OldCompletionCallback* c = old_user_read_callback_; |
| 726 user_read_buf_ = NULL; | 748 old_user_read_callback_ = NULL; |
| 727 user_read_buf_len_ = 0; | 749 user_read_buf_ = NULL; |
| 728 c->Run(rv); | 750 user_read_buf_len_ = 0; |
| 751 c->Run(rv); |
| 752 } else { |
| 753 CompletionCallback c = user_read_callback_; |
| 754 user_read_callback_.Reset(); |
| 755 user_read_buf_ = NULL; |
| 756 user_read_buf_len_ = 0; |
| 757 c.Run(rv); |
| 758 } |
| 729 } | 759 } |
| 730 | 760 |
| 731 void SSLServerSocketNSS::DoWriteCallback(int rv) { | 761 void SSLServerSocketNSS::DoWriteCallback(int rv) { |
| 732 DCHECK(rv != ERR_IO_PENDING); | 762 DCHECK(rv != ERR_IO_PENDING); |
| 733 DCHECK(user_write_callback_); | 763 DCHECK(user_write_callback_); |
| 734 | 764 |
| 735 // Since Run may result in Write being called, clear |user_write_callback_| | 765 // Since Run may result in Write being called, clear |user_write_callback_| |
| 736 // up front. | 766 // up front. |
| 737 OldCompletionCallback* c = user_write_callback_; | 767 OldCompletionCallback* c = user_write_callback_; |
| 738 user_write_callback_ = NULL; | 768 user_write_callback_ = NULL; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 768 // Initialize the NSS SSL library in a threadsafe way. This also | 798 // Initialize the NSS SSL library in a threadsafe way. This also |
| 769 // initializes the NSS base library. | 799 // initializes the NSS base library. |
| 770 EnsureNSSSSLInit(); | 800 EnsureNSSSSLInit(); |
| 771 if (!NSS_IsInitialized()) | 801 if (!NSS_IsInitialized()) |
| 772 return ERR_UNEXPECTED; | 802 return ERR_UNEXPECTED; |
| 773 | 803 |
| 774 return OK; | 804 return OK; |
| 775 } | 805 } |
| 776 | 806 |
| 777 } // namespace net | 807 } // namespace net |
| OLD | NEW |