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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 old_user_read_callback_(NULL), | 68 old_user_read_callback_(NULL), |
69 old_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; |
79 ssl_config_.tls1_enabled = true; | 79 ssl_config_.tls1_enabled = true; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 user_read_callback_ = callback; | 192 user_read_callback_ = callback; |
193 } else { | 193 } else { |
194 user_read_buf_ = NULL; | 194 user_read_buf_ = NULL; |
195 user_read_buf_len_ = 0; | 195 user_read_buf_len_ = 0; |
196 } | 196 } |
197 return rv; | 197 return rv; |
198 } | 198 } |
199 | 199 |
200 int SSLServerSocketNSS::Write(IOBuffer* buf, int buf_len, | 200 int SSLServerSocketNSS::Write(IOBuffer* buf, int buf_len, |
201 OldCompletionCallback* callback) { | 201 OldCompletionCallback* callback) { |
202 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); | 202 DCHECK(!user_write_callback_); |
203 DCHECK(!user_write_buf_); | 203 DCHECK(!user_write_buf_); |
204 DCHECK(nss_bufs_); | 204 DCHECK(nss_bufs_); |
205 | 205 |
206 user_write_buf_ = buf; | 206 user_write_buf_ = buf; |
207 user_write_buf_len_ = buf_len; | 207 user_write_buf_len_ = buf_len; |
208 | 208 |
209 int rv = DoWriteLoop(OK); | 209 int rv = DoWriteLoop(OK); |
210 | 210 |
211 if (rv == ERR_IO_PENDING) { | 211 if (rv == ERR_IO_PENDING) { |
212 old_user_write_callback_ = callback; | |
213 } else { | |
214 user_write_buf_ = NULL; | |
215 user_write_buf_len_ = 0; | |
216 } | |
217 return rv; | |
218 } | |
219 int SSLServerSocketNSS::Write(IOBuffer* buf, int buf_len, | |
220 const CompletionCallback& callback) { | |
221 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); | |
222 DCHECK(!user_write_buf_); | |
223 DCHECK(nss_bufs_); | |
224 | |
225 user_write_buf_ = buf; | |
226 user_write_buf_len_ = buf_len; | |
227 | |
228 int rv = DoWriteLoop(OK); | |
229 | |
230 if (rv == ERR_IO_PENDING) { | |
231 user_write_callback_ = callback; | 212 user_write_callback_ = callback; |
232 } else { | 213 } else { |
233 user_write_buf_ = NULL; | 214 user_write_buf_ = NULL; |
234 user_write_buf_len_ = 0; | 215 user_write_buf_len_ = 0; |
235 } | 216 } |
236 return rv; | 217 return rv; |
237 } | 218 } |
238 | 219 |
239 bool SSLServerSocketNSS::SetReceiveBufferSize(int32 size) { | 220 bool SSLServerSocketNSS::SetReceiveBufferSize(int32 size) { |
240 return transport_socket_->SetReceiveBufferSize(size); | 221 return transport_socket_->SetReceiveBufferSize(size); |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 CompletionCallback c = user_read_callback_; | 753 CompletionCallback c = user_read_callback_; |
773 user_read_callback_.Reset(); | 754 user_read_callback_.Reset(); |
774 user_read_buf_ = NULL; | 755 user_read_buf_ = NULL; |
775 user_read_buf_len_ = 0; | 756 user_read_buf_len_ = 0; |
776 c.Run(rv); | 757 c.Run(rv); |
777 } | 758 } |
778 } | 759 } |
779 | 760 |
780 void SSLServerSocketNSS::DoWriteCallback(int rv) { | 761 void SSLServerSocketNSS::DoWriteCallback(int rv) { |
781 DCHECK(rv != ERR_IO_PENDING); | 762 DCHECK(rv != ERR_IO_PENDING); |
782 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null()); | 763 DCHECK(user_write_callback_); |
783 | 764 |
784 // 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_| |
785 // up front. | 766 // up front. |
786 if (old_user_write_callback_) { | 767 OldCompletionCallback* c = user_write_callback_; |
787 OldCompletionCallback* c = old_user_write_callback_; | 768 user_write_callback_ = NULL; |
788 old_user_write_callback_ = NULL; | 769 user_write_buf_ = NULL; |
789 user_write_buf_ = NULL; | 770 user_write_buf_len_ = 0; |
790 user_write_buf_len_ = 0; | 771 c->Run(rv); |
791 c->Run(rv); | |
792 } else { | |
793 CompletionCallback c = user_write_callback_; | |
794 user_write_callback_.Reset(); | |
795 user_write_buf_ = NULL; | |
796 user_write_buf_len_ = 0; | |
797 c.Run(rv); | |
798 } | |
799 } | 772 } |
800 | 773 |
801 // static | 774 // static |
802 // NSS calls this if an incoming certificate needs to be verified. | 775 // NSS calls this if an incoming certificate needs to be verified. |
803 // Do nothing but return SECSuccess. | 776 // Do nothing but return SECSuccess. |
804 // This is called only in full handshake mode. | 777 // This is called only in full handshake mode. |
805 // Peer certificate is retrieved in HandshakeCallback() later, which is called | 778 // Peer certificate is retrieved in HandshakeCallback() later, which is called |
806 // in full handshake mode or in resumption handshake mode. | 779 // in full handshake mode or in resumption handshake mode. |
807 SECStatus SSLServerSocketNSS::OwnAuthCertHandler(void* arg, | 780 SECStatus SSLServerSocketNSS::OwnAuthCertHandler(void* arg, |
808 PRFileDesc* socket, | 781 PRFileDesc* socket, |
(...skipping 16 matching lines...) Expand all Loading... |
825 // Initialize the NSS SSL library in a threadsafe way. This also | 798 // Initialize the NSS SSL library in a threadsafe way. This also |
826 // initializes the NSS base library. | 799 // initializes the NSS base library. |
827 EnsureNSSSSLInit(); | 800 EnsureNSSSSLInit(); |
828 if (!NSS_IsInitialized()) | 801 if (!NSS_IsInitialized()) |
829 return ERR_UNEXPECTED; | 802 return ERR_UNEXPECTED; |
830 | 803 |
831 return OK; | 804 return OK; |
832 } | 805 } |
833 | 806 |
834 } // namespace net | 807 } // namespace net |
OLD | NEW |