1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
6 #define MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "mojo/application/public/cpp/app_lifetime_helper.h"
10 #include "mojo/services/network/public/interfaces/tcp_server_socket.mojom.h"
11 #include "net/base/ip_endpoint.h"
12 #include "net/socket/tcp_socket.h"
13 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
17 class TCPServerSocketImpl
: public TCPServerSocket
{
19 typedef Callback
<void(NetworkErrorPtr
, NetAddressPtr
)> AcceptCallback
;
21 // Passed ownership of a socket already in listening mode.
22 TCPServerSocketImpl(scoped_ptr
<net::TCPSocket
> socket
,
23 scoped_ptr
<mojo::AppRefCount
> app_refcount
,
24 InterfaceRequest
<TCPServerSocket
> request
);
25 ~TCPServerSocketImpl() override
;
28 void Accept(ScopedDataPipeConsumerHandle send_stream
,
29 ScopedDataPipeProducerHandle receive_stream
,
30 InterfaceRequest
<TCPConnectedSocket
> client_socket
,
31 const AcceptCallback
& callback
) override
;
34 void OnAcceptCompleted(int result
);
36 scoped_ptr
<net::TCPSocket
> socket_
;
38 // Non-null when accept is pending.
39 AcceptCallback pending_callback_
;
41 // The parameters associated with the pending Accept call.
42 ScopedDataPipeConsumerHandle pending_send_stream_
;
43 ScopedDataPipeProducerHandle pending_receive_stream_
;
44 InterfaceRequest
<TCPConnectedSocket
> pending_client_socket_
;
46 // These are written to by net::TCPSocket when Accept is completed.
47 scoped_ptr
<net::TCPSocket
> accepted_socket_
;
48 net::IPEndPoint accepted_address_
;
50 scoped_ptr
<mojo::AppRefCount
> app_refcount_
;
51 StrongBinding
<TCPServerSocket
> binding_
;
56 #endif // MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_