// 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 <sys/select.h> #include "base/memory/scoped_ptr.h" #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(scoped_ptr<Socket> socket1, scoped_ptr<Socket> 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 scoped_ptr<Socket> socket1_; const scoped_ptr<Socket> socket2_; // Copies data from socket1 to socket2. const scoped_ptr<BufferedCopier> buffer1_; // Copies data from socket2 to socket1. const scoped_ptr<BufferedCopier> buffer2_; }; } // namespace forwarder2 #endif // TOOLS_ANDROID_FORWARDER2_FORWARDER_H_