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

Side by Side Diff: tools/android/forwarder2/host_controller.cc

Issue 2366763003: [Android] Add device serial to all host_controller log messages. (Closed)
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/android/forwarder2/host_controller.h" 5 #include "tools/android/forwarder2/host_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "tools/android/forwarder2/command.h" 15 #include "tools/android/forwarder2/command.h"
16 #include "tools/android/forwarder2/forwarder.h" 16 #include "tools/android/forwarder2/forwarder.h"
17 #include "tools/android/forwarder2/socket.h" 17 #include "tools/android/forwarder2/socket.h"
18 18
19 namespace forwarder2 { 19 namespace forwarder2 {
20 20
21 // static 21 // static
22 std::unique_ptr<HostController> HostController::Create( 22 std::unique_ptr<HostController> HostController::Create(
23 const std::string& device_serial,
23 int device_port, 24 int device_port,
24 int host_port, 25 int host_port,
25 int adb_port, 26 int adb_port,
26 int exit_notifier_fd, 27 int exit_notifier_fd,
27 const ErrorCallback& error_callback) { 28 const ErrorCallback& error_callback) {
28 std::unique_ptr<HostController> host_controller; 29 std::unique_ptr<HostController> host_controller;
29 std::unique_ptr<PipeNotifier> delete_controller_notifier(new PipeNotifier()); 30 std::unique_ptr<PipeNotifier> delete_controller_notifier(new PipeNotifier());
30 std::unique_ptr<Socket> adb_control_socket(new Socket()); 31 std::unique_ptr<Socket> adb_control_socket(new Socket());
31 adb_control_socket->AddEventFd(exit_notifier_fd); 32 adb_control_socket->AddEventFd(exit_notifier_fd);
32 adb_control_socket->AddEventFd(delete_controller_notifier->receiver_fd()); 33 adb_control_socket->AddEventFd(delete_controller_notifier->receiver_fd());
33 if (!adb_control_socket->ConnectTcp(std::string(), adb_port)) { 34 if (!adb_control_socket->ConnectTcp(std::string(), adb_port)) {
34 LOG(ERROR) << "Could not connect HostController socket on port: " 35 LOG(ERROR) << device_serial
36 << ": Could not connect HostController socket on port: "
35 << adb_port; 37 << adb_port;
36 return host_controller; 38 return host_controller;
37 } 39 }
38 // Send the command to the device start listening to the "device_forward_port" 40 // Send the command to the device start listening to the "device_forward_port"
39 bool send_command_success = SendCommand( 41 bool send_command_success = SendCommand(
40 command::LISTEN, device_port, adb_control_socket.get()); 42 command::LISTEN, device_port, adb_control_socket.get());
41 CHECK(send_command_success); 43 CHECK(send_command_success);
42 int device_port_allocated; 44 int device_port_allocated;
43 command::Type command; 45 command::Type command;
44 if (!ReadCommand( 46 if (!ReadCommand(
45 adb_control_socket.get(), &device_port_allocated, &command) || 47 adb_control_socket.get(), &device_port_allocated, &command) ||
46 command != command::BIND_SUCCESS) { 48 command != command::BIND_SUCCESS) {
47 LOG(ERROR) << "Device binding error using port " << device_port; 49 LOG(ERROR) << device_serial
50 << ": Device binding error using port "
51 << device_port;
48 return host_controller; 52 return host_controller;
49 } 53 }
50 host_controller.reset(new HostController( 54 host_controller.reset(new HostController(
51 device_port_allocated, host_port, adb_port, error_callback, 55 device_serial, device_port_allocated, host_port, adb_port, error_callback,
52 std::move(adb_control_socket), std::move(delete_controller_notifier))); 56 std::move(adb_control_socket), std::move(delete_controller_notifier)));
53 return host_controller; 57 return host_controller;
54 } 58 }
55 59
56 HostController::~HostController() { 60 HostController::~HostController() {
57 DCHECK(deletion_task_runner_->RunsTasksOnCurrentThread()); 61 DCHECK(deletion_task_runner_->RunsTasksOnCurrentThread());
58 delete_controller_notifier_->Notify(); 62 delete_controller_notifier_->Notify();
59 } 63 }
60 64
61 void HostController::Start() { 65 void HostController::Start() {
62 thread_.Start(); 66 thread_.Start();
63 ReadNextCommandSoon(); 67 ReadNextCommandSoon();
64 } 68 }
65 69
66 HostController::HostController( 70 HostController::HostController(
71 const std::string& device_serial,
67 int device_port, 72 int device_port,
68 int host_port, 73 int host_port,
69 int adb_port, 74 int adb_port,
70 const ErrorCallback& error_callback, 75 const ErrorCallback& error_callback,
71 std::unique_ptr<Socket> adb_control_socket, 76 std::unique_ptr<Socket> adb_control_socket,
72 std::unique_ptr<PipeNotifier> delete_controller_notifier) 77 std::unique_ptr<PipeNotifier> delete_controller_notifier)
73 : self_deleter_helper_(this, error_callback), 78 : self_deleter_helper_(this, error_callback),
79 device_serial_(device_serial),
74 device_port_(device_port), 80 device_port_(device_port),
75 host_port_(host_port), 81 host_port_(host_port),
76 adb_port_(adb_port), 82 adb_port_(adb_port),
77 adb_control_socket_(std::move(adb_control_socket)), 83 adb_control_socket_(std::move(adb_control_socket)),
78 delete_controller_notifier_(std::move(delete_controller_notifier)), 84 delete_controller_notifier_(std::move(delete_controller_notifier)),
79 deletion_task_runner_(base::ThreadTaskRunnerHandle::Get()), 85 deletion_task_runner_(base::ThreadTaskRunnerHandle::Get()),
80 thread_("HostControllerThread") {} 86 thread_("HostControllerThread") {}
81 87
82 void HostController::ReadNextCommandSoon() { 88 void HostController::ReadNextCommandSoon() {
83 thread_.task_runner()->PostTask( 89 thread_.task_runner()->PostTask(
84 FROM_HERE, 90 FROM_HERE,
85 base::Bind(&HostController::ReadCommandOnInternalThread, 91 base::Bind(&HostController::ReadCommandOnInternalThread,
86 base::Unretained(this))); 92 base::Unretained(this)));
87 } 93 }
88 94
89 void HostController::ReadCommandOnInternalThread() { 95 void HostController::ReadCommandOnInternalThread() {
90 if (!ReceivedCommand(command::ACCEPT_SUCCESS, adb_control_socket_.get())) { 96 if (!ReceivedCommand(command::ACCEPT_SUCCESS, adb_control_socket_.get())) {
91 LOG(ERROR) << "Did not receive ACCEPT_SUCCESS for port: " 97 LOG(ERROR) << device_serial_
98 << ": Did not receive ACCEPT_SUCCESS for port: "
92 << host_port_; 99 << host_port_;
93 OnInternalThreadError(); 100 OnInternalThreadError();
94 return; 101 return;
95 } 102 }
96 // Try to connect to host server. 103 // Try to connect to host server.
97 std::unique_ptr<Socket> host_server_data_socket(new Socket()); 104 std::unique_ptr<Socket> host_server_data_socket(new Socket());
98 if (!host_server_data_socket->ConnectTcp(std::string(), host_port_)) { 105 if (!host_server_data_socket->ConnectTcp(std::string(), host_port_)) {
99 LOG(ERROR) << "Could not Connect HostServerData socket on port: " 106 LOG(ERROR) << device_serial_
107 << ": Could not Connect HostServerData socket on port: "
100 << host_port_; 108 << host_port_;
101 SendCommand( 109 SendCommand(
102 command::HOST_SERVER_ERROR, device_port_, adb_control_socket_.get()); 110 command::HOST_SERVER_ERROR, device_port_, adb_control_socket_.get());
103 if (ReceivedCommand(command::ACK, adb_control_socket_.get())) { 111 if (ReceivedCommand(command::ACK, adb_control_socket_.get())) {
104 // It can continue if the host forwarder could not connect to the host 112 // It can continue if the host forwarder could not connect to the host
105 // server but the device acknowledged that, so that the device could 113 // server but the device acknowledged that, so that the device could
106 // re-try later. 114 // re-try later.
107 ReadNextCommandSoon(); 115 ReadNextCommandSoon();
108 return; 116 return;
109 } 117 }
110 OnInternalThreadError(); 118 OnInternalThreadError();
111 return; 119 return;
112 } 120 }
113 LOG(INFO) << "Will send HOST_SERVER_SUCCESS: " << host_port_; 121 LOG(INFO) << device_serial_
122 << ": Will send HOST_SERVER_SUCCESS: "
123 << host_port_;
114 SendCommand( 124 SendCommand(
115 command::HOST_SERVER_SUCCESS, device_port_, adb_control_socket_.get()); 125 command::HOST_SERVER_SUCCESS, device_port_, adb_control_socket_.get());
116 StartForwarder(std::move(host_server_data_socket)); 126 StartForwarder(std::move(host_server_data_socket));
117 ReadNextCommandSoon(); 127 ReadNextCommandSoon();
118 } 128 }
119 129
120 void HostController::StartForwarder( 130 void HostController::StartForwarder(
121 std::unique_ptr<Socket> host_server_data_socket) { 131 std::unique_ptr<Socket> host_server_data_socket) {
122 std::unique_ptr<Socket> adb_data_socket(new Socket()); 132 std::unique_ptr<Socket> adb_data_socket(new Socket());
123 if (!adb_data_socket->ConnectTcp("", adb_port_)) { 133 if (!adb_data_socket->ConnectTcp("", adb_port_)) {
124 LOG(ERROR) << "Could not connect AdbDataSocket on port: " << adb_port_; 134 LOG(ERROR) << device_serial_
135 << ": Could not connect AdbDataSocket on port: "
136 << adb_port_;
125 OnInternalThreadError(); 137 OnInternalThreadError();
126 return; 138 return;
127 } 139 }
128 // Open the Adb data connection, and send a command with the 140 // Open the Adb data connection, and send a command with the
129 // |device_forward_port| as a way for the device to identify the connection. 141 // |device_forward_port| as a way for the device to identify the connection.
130 SendCommand(command::DATA_CONNECTION, device_port_, adb_data_socket.get()); 142 SendCommand(command::DATA_CONNECTION, device_port_, adb_data_socket.get());
131 143
132 // Check that the device received the new Adb Data Connection. Note that this 144 // Check that the device received the new Adb Data Connection. Note that this
133 // check is done through the |adb_control_socket_| that is handled in the 145 // check is done through the |adb_control_socket_| that is handled in the
134 // DeviceListener thread just after the call to WaitForAdbDataSocket(). 146 // DeviceListener thread just after the call to WaitForAdbDataSocket().
135 if (!ReceivedCommand(command::ADB_DATA_SOCKET_SUCCESS, 147 if (!ReceivedCommand(command::ADB_DATA_SOCKET_SUCCESS,
136 adb_control_socket_.get())) { 148 adb_control_socket_.get())) {
137 LOG(ERROR) << "Device could not handle the new Adb Data Connection."; 149 LOG(ERROR) << device_serial_
150 << ": Device could not handle the new Adb Data Connection.";
138 OnInternalThreadError(); 151 OnInternalThreadError();
139 return; 152 return;
140 } 153 }
141 forwarders_manager_.CreateAndStartNewForwarder( 154 forwarders_manager_.CreateAndStartNewForwarder(
142 std::move(host_server_data_socket), std::move(adb_data_socket)); 155 std::move(host_server_data_socket), std::move(adb_data_socket));
143 } 156 }
144 157
145 void HostController::OnInternalThreadError() { 158 void HostController::OnInternalThreadError() {
146 UnmapPortOnDevice(); 159 UnmapPortOnDevice();
147 self_deleter_helper_.MaybeSelfDeleteSoon(); 160 self_deleter_helper_.MaybeSelfDeleteSoon();
148 } 161 }
149 162
150 void HostController::UnmapPortOnDevice() { 163 void HostController::UnmapPortOnDevice() {
151 Socket socket; 164 Socket socket;
152 if (!socket.ConnectTcp("", adb_port_)) { 165 if (!socket.ConnectTcp("", adb_port_)) {
153 LOG(ERROR) << "Could not connect to device on port " << adb_port_; 166 LOG(ERROR) << device_serial_
167 << ": Could not connect to device on port "
168 << adb_port_;
154 return; 169 return;
155 } 170 }
156 if (!SendCommand(command::UNLISTEN, device_port_, &socket)) { 171 if (!SendCommand(command::UNLISTEN, device_port_, &socket)) {
157 LOG(ERROR) << "Could not send unmap command for port " << device_port_; 172 LOG(ERROR) << device_serial_
173 << ": Could not send unmap command for port "
174 << device_port_;
158 return; 175 return;
159 } 176 }
160 if (!ReceivedCommand(command::UNLISTEN_SUCCESS, &socket)) { 177 if (!ReceivedCommand(command::UNLISTEN_SUCCESS, &socket)) {
161 LOG(ERROR) << "Unamp command failed for port " << device_port_; 178 LOG(ERROR) << device_serial_
179 << ": Unmap command failed for port "
180 << device_port_;
162 return; 181 return;
163 } 182 }
164 } 183 }
165 184
166 } // namespace forwarder2 185 } // namespace forwarder2
OLDNEW
« no previous file with comments | « tools/android/forwarder2/host_controller.h ('k') | tools/android/forwarder2/host_forwarder_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698