Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: tools/android/forwarder2/device_listener.h

Issue 10918057: Add forwarder2 (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/android/forwarder2/device_forwarder_main.cc ('k') | tools/android/forwarder2/device_listener.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/android/forwarder2/device_listener.h
diff --git a/tools/android/forwarder2/device_listener.h b/tools/android/forwarder2/device_listener.h
new file mode 100644
index 0000000000000000000000000000000000000000..a7380d1f2856e59111beb1339125ba66e89fb9b0
--- /dev/null
+++ b/tools/android/forwarder2/device_listener.h
@@ -0,0 +1,78 @@
+// 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_DEVICE_LISTENER_H_
+#define TOOLS_ANDROID_FORWARDER2_DEVICE_LISTENER_H_
+
+#include <pthread.h>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "tools/android/forwarder2/pipe_notifier.h"
+#include "tools/android/forwarder2/socket.h"
+#include "tools/android/forwarder2/thread.h"
+
+namespace forwarder {
+
+class Forwarder;
+
+class DeviceListener : public Thread {
+ public:
+ DeviceListener(scoped_ptr<Socket> adb_control_socket, int port);
+ virtual ~DeviceListener();
+
+ bool WaitForAdbDataSocket();
+
+ bool SetAdbDataSocket(scoped_ptr<Socket> adb_data_socket);
+
+ // |is_alive_| is set only on creation and written once when Run() terminates.
+ // So even in case of a race condition, the worst that could happen is for the
+ // main thread to see the lsitener alive when it isn't. And also, this is not
+ // a problem since the main thread checks the livenss of the listeners in a
+ // loop.
+ bool is_alive() const { return is_alive_; }
+ void ForceExit();
+
+ protected:
+ // Thread:
+ virtual void Run() OVERRIDE;
+
+ private:
+ // Must be called after successfully acquired mutex.
+ void SetMustExitLocked();
+
+ // The listener socket for sending control commands.
+ scoped_ptr<Socket> adb_control_socket_;
+
+ // The local device listener socket for accepting connections from the local
+ // port (listener_port_).
+ Socket listener_socket_;
+
+ // This is the adb connection to transport the actual data, used for creating
+ // the forwarder. Ownership transferred to the Forwarder.
+ scoped_ptr<Socket> adb_data_socket_;
+
+ const int listener_port_;
+ pthread_mutex_t adb_data_socket_mutex_;
+ pthread_cond_t adb_data_socket_cond_;
+ bool is_alive_;
+ bool must_exit_;
+
+ // Used for the listener thread to be notified from ForceExit() which is
+ // called from the main thread. We have one notifier per Listener thread since
+ // each Listener thread may be requested to exit for different reasons
+ // independently from each other and independent from the main program,
+ // ex. when the host requests to forward/listen the same port again. Both the
+ // |adb_control_socket_| and |listener_socket_| must share the same receiver
+ // file descriptor from |exit_notifier_| and it is set in the constructor.
+ PipeNotifier exit_notifier_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeviceListener);
+};
+
+} // namespace forwarder
+
+#endif // TOOLS_ANDROID_FORWARDER2_DEVICE_LISTENER_H_
« no previous file with comments | « tools/android/forwarder2/device_forwarder_main.cc ('k') | tools/android/forwarder2/device_listener.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698