// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
#define MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_

#include "base/memory/scoped_ptr.h"
#include "mojo/services/network/interfaces/tcp_server_socket.mojom.h"
#include "net/base/ip_endpoint.h"
#include "net/socket/tcp_socket.h"
#include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"

namespace mojo {

class TCPServerSocketImpl : public TCPServerSocket {
 public:
  typedef Callback<void(NetworkErrorPtr, NetAddressPtr)> AcceptCallback;

  // Passed ownership of a socket already in listening mode.
  TCPServerSocketImpl(InterfaceRequest<TCPServerSocket> request,
                      scoped_ptr<net::TCPSocket> socket);
  ~TCPServerSocketImpl() override;

  // TCPServerSocket.
  void Accept(ScopedDataPipeConsumerHandle send_stream,
              ScopedDataPipeProducerHandle receive_stream,
              InterfaceRequest<TCPConnectedSocket> client_socket,
              const AcceptCallback& callback) override;

 private:
  void OnAcceptCompleted(int result);

  StrongBinding<TCPServerSocket> binding_;
  scoped_ptr<net::TCPSocket> socket_;

  // Non-null when accept is pending.
  AcceptCallback pending_callback_;

  // The parameters associated with the pending Accept call.
  ScopedDataPipeConsumerHandle pending_send_stream_;
  ScopedDataPipeProducerHandle pending_receive_stream_;
  InterfaceRequest<TCPConnectedSocket> pending_client_socket_;

  // These are written to by net::TCPSocket when Accept is completed.
  scoped_ptr<net::TCPSocket> accepted_socket_;
  net::IPEndPoint accepted_address_;
};

}  // namespace mojo

#endif  // MOJO_SERVICES_NETWORK_TCP_SERVER_SOCKET_H_
