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 #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 user_write_callback_(NULL), | 69 old_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(!user_write_callback_); | 202 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); |
| 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; | |
| 207 user_write_buf_len_ = buf_len; | |
| 208 | |
| 209 int rv = DoWriteLoop(OK); | |
| 210 | |
| 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 | |
| 206 user_write_buf_ = buf; | 225 user_write_buf_ = buf; |
| 207 user_write_buf_len_ = buf_len; | 226 user_write_buf_len_ = buf_len; |
| 208 | 227 |
| 209 int rv = DoWriteLoop(OK); | 228 int rv = DoWriteLoop(OK); |
| 210 | 229 |
| 211 if (rv == ERR_IO_PENDING) { | 230 if (rv == ERR_IO_PENDING) { |
| 212 user_write_callback_ = callback; | 231 user_write_callback_ = callback; |
| 213 } else { | 232 } else { |
| 214 user_write_buf_ = NULL; | 233 user_write_buf_ = NULL; |
| 215 user_write_buf_len_ = 0; | 234 user_write_buf_len_ = 0; |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 753 CompletionCallback c = user_read_callback_; | 772 CompletionCallback c = user_read_callback_; |
| 754 user_read_callback_.Reset(); | 773 user_read_callback_.Reset(); |
| 755 user_read_buf_ = NULL; | 774 user_read_buf_ = NULL; |
| 756 user_read_buf_len_ = 0; | 775 user_read_buf_len_ = 0; |
| 757 c.Run(rv); | 776 c.Run(rv); |
| 758 } | 777 } |
| 759 } | 778 } |
| 760 | 779 |
| 761 void SSLServerSocketNSS::DoWriteCallback(int rv) { | 780 void SSLServerSocketNSS::DoWriteCallback(int rv) { |
| 762 DCHECK(rv != ERR_IO_PENDING); | 781 DCHECK(rv != ERR_IO_PENDING); |
| 763 DCHECK(user_write_callback_); | 782 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null()); |
| 764 | 783 |
| 765 // Since Run may result in Write being called, clear |user_write_callback_| | 784 // Since Run may result in Write being called, clear |user_write_callback_| |
| 766 // up front. | 785 // up front. |
| 767 OldCompletionCallback* c = user_write_callback_; | 786 if (old_user_write_callback_) { |
| 768 user_write_callback_ = NULL; | 787 OldCompletionCallback* c = old_user_write_callback_; |
| 769 user_write_buf_ = NULL; | 788 old_user_write_callback_ = NULL; |
| 770 user_write_buf_len_ = 0; | 789 user_write_buf_ = NULL; |
| 771 c->Run(rv); | 790 user_write_buf_len_ = 0; |
| 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); | |
|
csilv
2011/12/07 20:45:22
nit: fix alignment
James Hawkins
2011/12/08 23:50:46
Done.
| |
| 798 } | |
| 772 } | 799 } |
| 773 | 800 |
| 774 // static | 801 // static |
| 775 // NSS calls this if an incoming certificate needs to be verified. | 802 // NSS calls this if an incoming certificate needs to be verified. |
| 776 // Do nothing but return SECSuccess. | 803 // Do nothing but return SECSuccess. |
| 777 // This is called only in full handshake mode. | 804 // This is called only in full handshake mode. |
| 778 // Peer certificate is retrieved in HandshakeCallback() later, which is called | 805 // Peer certificate is retrieved in HandshakeCallback() later, which is called |
| 779 // in full handshake mode or in resumption handshake mode. | 806 // in full handshake mode or in resumption handshake mode. |
| 780 SECStatus SSLServerSocketNSS::OwnAuthCertHandler(void* arg, | 807 SECStatus SSLServerSocketNSS::OwnAuthCertHandler(void* arg, |
| 781 PRFileDesc* socket, | 808 PRFileDesc* socket, |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 798 // Initialize the NSS SSL library in a threadsafe way. This also | 825 // Initialize the NSS SSL library in a threadsafe way. This also |
| 799 // initializes the NSS base library. | 826 // initializes the NSS base library. |
| 800 EnsureNSSSSLInit(); | 827 EnsureNSSSSLInit(); |
| 801 if (!NSS_IsInitialized()) | 828 if (!NSS_IsInitialized()) |
| 802 return ERR_UNEXPECTED; | 829 return ERR_UNEXPECTED; |
| 803 | 830 |
| 804 return OK; | 831 return OK; |
| 805 } | 832 } |
| 806 | 833 |
| 807 } // namespace net | 834 } // namespace net |
| OLD | NEW |