// 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_BOUND_SOCKET_H_ #define MOJO_SERVICES_NETWORK_TCP_BOUND_SOCKET_H_ #include "base/memory/scoped_ptr.h" #include "mojo/services/network/public/interfaces/tcp_bound_socket.mojom.h" #include "net/socket/tcp_socket.h" #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" namespace mojo { class TCPBoundSocketImpl : public InterfaceImpl { public: TCPBoundSocketImpl(); ~TCPBoundSocketImpl() override; // Does the actual binding. Returns a net error code. On net::OK, the bound // socket will be ready to use and send back to the client. On failure, this // object should be destroyed and no longer used. int Bind(NetAddressPtr local_address); // Returns the local address associated with this socket. This should only // be called after Bind has succeeded. NetAddressPtr GetLocalAddress() const; // TCPBoundSocket. void StartListening(InterfaceRequest server, const Callback& callback) override; void Connect(NetAddressPtr remote_address, ScopedDataPipeConsumerHandle send_stream, ScopedDataPipeProducerHandle receive_stream, InterfaceRequest client_socket, const Callback& callback) override; private: void OnConnected(int result); scoped_ptr socket_; // Valid when waiting for a connect callback. ScopedDataPipeConsumerHandle pending_connect_send_stream_; ScopedDataPipeProducerHandle pending_connect_receive_stream_; InterfaceRequest pending_connect_socket_; Callback pending_connect_callback_; }; } // namespace mojo #endif // MOJO_SERVICES_NETWORK_TCP_BOUND_SOCKET_H_