Chromium Code Reviews| Index: net/socket/ssl_server_socket_nss.cc |
| diff --git a/net/socket/ssl_server_socket_nss.cc b/net/socket/ssl_server_socket_nss.cc |
| index 6abb531603dee36083f88aca4223a0183fe83052..752c37b5160bf6a8f10c0b86718397fbc6fab25c 100644 |
| --- a/net/socket/ssl_server_socket_nss.cc |
| +++ b/net/socket/ssl_server_socket_nss.cc |
| @@ -29,6 +29,7 @@ |
| #include <limits> |
| +#include "base/callback_helpers.h" |
| #include "base/lazy_instance.h" |
| #include "base/memory/ref_counted.h" |
| #include "crypto/rsa_private_key.h" |
| @@ -497,6 +498,8 @@ void SSLServerSocketNSS::OnSendComplete(int result) { |
| return; |
| } |
| + // TODO(byungchul): This state machine is not correct. Refactor this with |
| + // SSLClientSocketNSS::OnSendComplete() which handles it better. |
|
wtc
2014/05/16 03:57:17
Nit: it's not clear what "Refactor this with SSLCl
byungchul
2014/05/16 17:49:59
Done.
|
| if (!completed_handshake_) |
| return; |
| @@ -529,11 +532,12 @@ void SSLServerSocketNSS::OnRecvComplete(int result) { |
| void SSLServerSocketNSS::OnHandshakeIOComplete(int result) { |
| int rv = DoHandshakeLoop(result); |
| - if (rv != ERR_IO_PENDING) { |
| - net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_SERVER_HANDSHAKE, rv); |
| - if (!user_handshake_callback_.is_null()) |
| - DoHandshakeCallback(rv); |
| - } |
| + if (rv == ERR_IO_PENDING) |
| + return; |
| + |
| + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_SERVER_HANDSHAKE, rv); |
| + if (!user_handshake_callback_.is_null()) |
| + DoHandshakeCallback(rv); |
| } |
| // Return 0 for EOF, |
| @@ -725,7 +729,7 @@ int SSLServerSocketNSS::DoReadLoop(int result) { |
| int SSLServerSocketNSS::DoWriteLoop(int result) { |
| DCHECK(completed_handshake_); |
| - DCHECK(next_handshake_state_ == STATE_NONE); |
| + DCHECK_EQ(next_handshake_state_, STATE_NONE); |
| if (result < 0) |
| return result; |
| @@ -772,36 +776,29 @@ int SSLServerSocketNSS::DoHandshake() { |
| void SSLServerSocketNSS::DoHandshakeCallback(int rv) { |
| DCHECK_NE(rv, ERR_IO_PENDING); |
| - |
| - CompletionCallback c = user_handshake_callback_; |
| - user_handshake_callback_.Reset(); |
| - c.Run(rv > OK ? OK : rv); |
| + ResetAndReturn(&user_handshake_callback_).Run(rv > OK ? OK : rv); |
| } |
| void SSLServerSocketNSS::DoReadCallback(int rv) { |
| DCHECK(rv != ERR_IO_PENDING); |
| DCHECK(!user_read_callback_.is_null()); |
| - // Since Run may result in Read being called, clear |user_read_callback_| |
| - // up front. |
| - CompletionCallback c = user_read_callback_; |
| - user_read_callback_.Reset(); |
| user_read_buf_ = NULL; |
| user_read_buf_len_ = 0; |
| - c.Run(rv); |
| + // Since Run may result in Read being called, clear |user_read_callback_| |
| + // up front. |
|
wtc
2014/05/16 03:57:17
Nit: We may want to delete this comment and the co
byungchul
2014/05/16 17:49:59
Done.
|
| + ResetAndReturn(&user_read_callback_).Run(rv); |
| } |
| void SSLServerSocketNSS::DoWriteCallback(int rv) { |
| DCHECK(rv != ERR_IO_PENDING); |
| DCHECK(!user_write_callback_.is_null()); |
| - // Since Run may result in Write being called, clear |user_write_callback_| |
| - // up front. |
| - CompletionCallback c = user_write_callback_; |
| - user_write_callback_.Reset(); |
| user_write_buf_ = NULL; |
| user_write_buf_len_ = 0; |
| - c.Run(rv); |
| + // Since Run may result in Write being called, clear |user_write_callback_| |
| + // up front. |
| + ResetAndReturn(&user_write_callback_).Run(rv); |
| } |
| // static |