// Copyright (c) 2012 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 TOOLS_ANDROID_FORWARDER2_FORWARDER_H_ #define TOOLS_ANDROID_FORWARDER2_FORWARDER_H_ #include #include #include "base/threading/thread_checker.h" namespace forwarder2 { class Socket; // Internal class that forwards traffic between |socket1| and |socket2|. Note // that this class is not thread-safe. class Forwarder { public: Forwarder(std::unique_ptr socket1, std::unique_ptr socket2); ~Forwarder(); void RegisterFDs(fd_set* read_fds, fd_set* write_fds, int* max_fd); void ProcessEvents(const fd_set& read_fds, const fd_set& write_fds); bool IsClosed() const; void Shutdown(); private: class BufferedCopier; base::ThreadChecker thread_checker_; const std::unique_ptr socket1_; const std::unique_ptr socket2_; // Copies data from socket1 to socket2. const std::unique_ptr buffer1_; // Copies data from socket2 to socket1. const std::unique_ptr buffer2_; }; } // namespace forwarder2 #endif // TOOLS_ANDROID_FORWARDER2_FORWARDER_H_