Index: tools/android/forwarder2/host_forwarder_main.cc |
diff --git a/tools/android/forwarder2/host_forwarder_main.cc b/tools/android/forwarder2/host_forwarder_main.cc |
index 47f2252f04df6cd34532bedfffff2e1ecde70d67..a94a97b8c2faa6ba730b6f3b66441fd959b1e8d9 100644 |
--- a/tools/android/forwarder2/host_forwarder_main.cc |
+++ b/tools/android/forwarder2/host_forwarder_main.cc |
@@ -98,7 +98,8 @@ class HostControllersManager { |
FROM_HERE, controllers_.release()); |
} |
- void HandleRequest(const std::string& device_serial, |
+ void HandleRequest(const std::string& adb_path, |
+ const std::string& device_serial, |
int device_port, |
int host_port, |
scoped_ptr<Socket> client_socket) { |
@@ -106,10 +107,9 @@ class HostControllersManager { |
InitOnce(); |
thread_->message_loop_proxy()->PostTask( |
FROM_HERE, |
- base::Bind( |
- &HostControllersManager::HandleRequestOnInternalThread, |
- base::Unretained(this), device_serial, device_port, host_port, |
- base::Passed(&client_socket))); |
+ base::Bind(&HostControllersManager::HandleRequestOnInternalThread, |
+ base::Unretained(this), adb_path, device_serial, device_port, |
+ host_port, base::Passed(&client_socket))); |
} |
bool has_failed() const { return has_failed_; } |
@@ -152,11 +152,12 @@ class HostControllersManager { |
manager->controllers_.get()); |
} |
- void HandleRequestOnInternalThread(const std::string& device_serial, |
+ void HandleRequestOnInternalThread(const std::string& adb_path, |
+ const std::string& device_serial, |
int device_port, |
int host_port, |
scoped_ptr<Socket> client_socket) { |
- const int adb_port = GetAdbPortForDevice(device_serial); |
+ const int adb_port = GetAdbPortForDevice(adb_path, device_serial); |
if (adb_port < 0) { |
SendMessage( |
"ERROR: could not get adb port for device. You might need to add " |
@@ -174,7 +175,7 @@ class HostControllersManager { |
!controller_did_exist ? "ERROR: could not unmap port" : "OK", |
client_socket.get()); |
- RemoveAdbPortForDeviceIfNeeded(device_serial); |
+ RemoveAdbPortForDeviceIfNeeded(adb_path, device_serial); |
return; |
} |
if (host_port < 0) { |
@@ -217,7 +218,8 @@ class HostControllersManager { |
linked_ptr<HostController>(host_controller.release()))); |
} |
- void RemoveAdbPortForDeviceIfNeeded(const std::string& device_serial) { |
+ void RemoveAdbPortForDeviceIfNeeded(const std::string& adb_path, |
+ const std::string& device_serial) { |
base::hash_map<std::string, int>::const_iterator it = |
device_serial_to_adb_port_map_.find(device_serial); |
if (it == device_serial_to_adb_port_map_.end()) |
@@ -238,7 +240,8 @@ class HostControllersManager { |
const std::string serial_part = device_serial.empty() ? |
std::string() : std::string("-s ") + device_serial; |
const std::string command = base::StringPrintf( |
- "adb %s forward --remove tcp:%d", |
+ "%s %s forward --remove tcp:%d", |
+ adb_path.c_str(), |
serial_part.c_str(), |
port); |
const int ret = system(command.c_str()); |
@@ -260,7 +263,8 @@ class HostControllersManager { |
} |
} |
- int GetAdbPortForDevice(const std::string& device_serial) { |
+ int GetAdbPortForDevice(const std::string adb_path, |
+ const std::string& device_serial) { |
base::hash_map<std::string, int>::const_iterator it = |
device_serial_to_adb_port_map_.find(device_serial); |
if (it != device_serial_to_adb_port_map_.end()) |
@@ -272,7 +276,8 @@ class HostControllersManager { |
const std::string serial_part = device_serial.empty() ? |
std::string() : std::string("-s ") + device_serial; |
const std::string command = base::StringPrintf( |
- "adb %s forward tcp:%d localabstract:chrome_device_forwarder", |
+ "%s %s forward tcp:%d localabstract:chrome_device_forwarder", |
+ adb_path.c_str(), |
serial_part.c_str(), |
port); |
LOG(INFO) << command; |
@@ -301,7 +306,8 @@ class HostControllersManager { |
class ServerDelegate : public Daemon::ServerDelegate { |
public: |
- ServerDelegate() : has_failed_(false) {} |
+ ServerDelegate(const std::string& adb_path) |
+ : adb_path_(adb_path), has_failed_(false) {} |
bool has_failed() const { |
return has_failed_ || controllers_manager_.has_failed(); |
@@ -338,11 +344,12 @@ class ServerDelegate : public Daemon::ServerDelegate { |
int host_port; |
if (!pickle_it.ReadInt(&host_port)) |
host_port = -1; |
- controllers_manager_.HandleRequest( |
- device_serial, device_port, host_port, client_socket.Pass()); |
+ controllers_manager_.HandleRequest(adb_path_, device_serial, device_port, |
+ host_port, client_socket.Pass()); |
} |
private: |
+ std::string adb_path_; |
bool has_failed_; |
HostControllersManager controllers_manager_; |
@@ -390,6 +397,7 @@ void ExitWithUsage() { |
" --serial-id=[0-9A-Z]{16}]\n" |
" --map DEVICE_PORT HOST_PORT\n" |
" --unmap DEVICE_PORT\n" |
+ " --adb PATH_TO_ADB\n" |
" --kill-server\n"; |
exit(1); |
} |
@@ -408,6 +416,7 @@ int PortToInt(const std::string& s) { |
int RunHostForwarder(int argc, char** argv) { |
base::CommandLine::Init(argc, argv); |
const base::CommandLine& cmd_line = *base::CommandLine::ForCurrentProcess(); |
+ std::string adb_path = "adb"; |
bool kill_server = false; |
Pickle pickle; |
@@ -432,11 +441,15 @@ int RunHostForwarder(int argc, char** argv) { |
ExitWithUsage(); |
} |
+ if (cmd_line.HasSwitch("adb")) { |
+ adb_path = cmd_line.GetSwitchValueASCII("adb"); |
+ } |
+ |
if (kill_server && args.size() > 0) |
ExitWithUsage(); |
ClientDelegate client_delegate(pickle); |
- ServerDelegate daemon_delegate; |
+ ServerDelegate daemon_delegate(adb_path); |
Daemon daemon( |
kLogFilePath, kDaemonIdentifier, &client_delegate, &daemon_delegate, |
&GetExitNotifierFD); |