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