Chromium Code Reviews| Index: net/socket/unix_domain_server_socket_posix.cc |
| diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc |
| index 4ab0b834e624e81c94da14cc9dae2048b2d49ed0..950ed883c5a8f745f3e2bbd00e32d1540d367be1 100644 |
| --- a/net/socket/unix_domain_server_socket_posix.cc |
| +++ b/net/socket/unix_domain_server_socket_posix.cc |
| @@ -16,6 +16,19 @@ |
| namespace net { |
| +namespace { |
| +// Intended for use as SetterCallbacks in Accept() helper methods. |
| +void SetStreamSocket(scoped_ptr<StreamSocket>* socket, |
| + scoped_ptr<SocketLibevent> accepted_socket) { |
| + socket->reset(new UnixDomainClientSocket(accepted_socket.Pass())); |
| +} |
| + |
| +void SetSocketDescriptor(SocketDescriptor* socket, |
| + scoped_ptr<SocketLibevent> accepted_socket) { |
| + *socket = accepted_socket->ReleaseConnectedSocket(); |
| +} |
| +} // anonymous nanmespace |
|
mmenke
2014/09/03 14:56:46
nit: -anonymous, nanmespace -> namespace
mmenke
2014/09/03 14:56:46
nit: I believe blank lines before end and after s
Chris Masone
2014/09/03 15:57:12
Done.
Chris Masone
2014/09/03 15:57:12
Done.
|
| + |
| UnixDomainServerSocket::UnixDomainServerSocket( |
| const AuthCallback& auth_callback, |
| bool use_abstract_namespace) |
| @@ -95,6 +108,23 @@ int UnixDomainServerSocket::GetLocalAddress(IPEndPoint* address) const { |
| int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket, |
| const CompletionCallback& callback) { |
| DCHECK(socket); |
| + |
| + SetterCallback setter_callback = base::Bind(&SetStreamSocket, socket); |
| + return DoAccept(setter_callback, callback); |
| +} |
| + |
| +int UnixDomainServerSocket::AcceptSocketDescriptor( |
| + SocketDescriptor* socket, |
| + const CompletionCallback& callback) { |
| + DCHECK(socket); |
| + |
| + SetterCallback setter_callback = base::Bind(&SetSocketDescriptor, socket); |
| + return DoAccept(setter_callback, callback); |
| +} |
| + |
| +int UnixDomainServerSocket::DoAccept(const SetterCallback& setter_callback, |
| + const CompletionCallback& callback) { |
| + DCHECK(!setter_callback.is_null()); |
| DCHECK(!callback.is_null()); |
| DCHECK(listen_socket_); |
| DCHECK(!accept_socket_); |
| @@ -103,38 +133,41 @@ int UnixDomainServerSocket::Accept(scoped_ptr<StreamSocket>* socket, |
| int rv = listen_socket_->Accept( |
| &accept_socket_, |
| base::Bind(&UnixDomainServerSocket::AcceptCompleted, |
| - base::Unretained(this), socket, callback)); |
| + base::Unretained(this), |
| + setter_callback, |
| + callback)); |
| if (rv != OK) |
| return rv; |
| - if (AuthenticateAndGetStreamSocket(socket)) |
| + if (AuthenticateAndGetStreamSocket(setter_callback)) |
| return OK; |
| // Accept another socket because authentication error should be transparent |
| // to the caller. |
| } |
| } |
| -void UnixDomainServerSocket::AcceptCompleted(scoped_ptr<StreamSocket>* socket, |
| - const CompletionCallback& callback, |
| - int rv) { |
| +void UnixDomainServerSocket::AcceptCompleted( |
| + const SetterCallback& setter_callback, |
| + const CompletionCallback& callback, |
| + int rv) { |
| if (rv != OK) { |
| callback.Run(rv); |
| return; |
| } |
| - if (AuthenticateAndGetStreamSocket(socket)) { |
| + if (AuthenticateAndGetStreamSocket(setter_callback)) { |
| callback.Run(OK); |
| return; |
| } |
| // Accept another socket because authentication error should be transparent |
| // to the caller. |
| - rv = Accept(socket, callback); |
| + rv = DoAccept(setter_callback, callback); |
| if (rv != ERR_IO_PENDING) |
| callback.Run(rv); |
| } |
| bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket( |
| - scoped_ptr<StreamSocket>* socket) { |
| + const SetterCallback& setter_callback) { |
| DCHECK(accept_socket_); |
| Credentials credentials; |
| @@ -144,7 +177,7 @@ bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket( |
| return false; |
| } |
| - socket->reset(new UnixDomainClientSocket(accept_socket_.Pass())); |
| + setter_callback.Run(accept_socket_.Pass()); |
| return true; |
| } |