// 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.

[DartPackage="mojo_services"]
module mojo;

import "mojo/public/interfaces/network/network_error.mojom";
import "network/public/interfaces/net_address.mojom";
import "network/public/interfaces/tcp_connected_socket.mojom";
import "network/public/interfaces/tcp_server_socket.mojom";

// Represents a TCP socket that is bound to a local address and port, but
// is not yet in a listening or connected state.
//
// A bound socket can be used to create a server socket listening on the
// local address, or it can be used to create a client socket by connecting to
// a remote host. Once StartListening or Connect is called on the bound socket,
// ownership of the underlying socket will be transferred to the connected or
// server socket, and the bound socket may be closed.
interface TCPBoundSocket {
  // Puts the socket into server mode, awaiting incoming connections.
  //
  // Once this function is called, neither StartListening nor Connect can be
  // used on this socket again.
  StartListening(TCPServerSocket& server) => (NetworkError result);

  // Puts this socket into client mode by connecting to a remote host. If you
  // do not care about the local address or port, you can call
  // NetworkService.CreateTCPConnectedSocket to connect directly and skip the
  // "bound" state.
  //
  // Once this function is called, neither StartListening nor Connect can be
  // used on this socket again.
  Connect(NetAddress remote_address,
          handle<data_pipe_consumer> send_stream,
          handle<data_pipe_producer> receive_stream,
          TCPConnectedSocket& client_socket)
      => (NetworkError result);
};
