1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/devtools/device/adb/adb_device_provider.h" 6 7#include "base/strings/string_util.h" 8#include "base/strings/stringprintf.h" 9#include "chrome/browser/devtools/device/adb/adb_client_socket.h" 10#include "chrome/browser/devtools/device/adb/adb_device_info_query.h" 11 12namespace { 13 14const char kHostDevicesCommand[] = "host:devices"; 15const char kHostTransportCommand[] = "host:transport:%s|%s"; 16const char kLocalAbstractCommand[] = "localabstract:%s"; 17 18const int kAdbPort = 5037; 19 20static void RunCommand(const std::string& serial, 21 const std::string& command, 22 const AdbDeviceProvider::CommandCallback& callback) { 23 std::string query = base::StringPrintf( 24 kHostTransportCommand, serial.c_str(), command.c_str()); 25 AdbClientSocket::AdbQuery(kAdbPort, query, callback); 26} 27 28static void ReceivedAdbDevices( 29 const AdbDeviceProvider::SerialsCallback& callback, 30 int result_code, 31 const std::string& response) { 32 std::vector<std::string> result; 33 if (result_code < 0) { 34 callback.Run(result); 35 return; 36 } 37 std::vector<std::string> serials; 38 Tokenize(response, "\n", &serials); 39 for (size_t i = 0; i < serials.size(); ++i) { 40 std::vector<std::string> tokens; 41 Tokenize(serials[i], "\t ", &tokens); 42 result.push_back(tokens[0]); 43 } 44 callback.Run(result); 45} 46 47} // namespace 48 49void AdbDeviceProvider::QueryDevices(const SerialsCallback& callback) { 50 AdbClientSocket::AdbQuery( 51 kAdbPort, kHostDevicesCommand, base::Bind(&ReceivedAdbDevices, callback)); 52} 53 54void AdbDeviceProvider::QueryDeviceInfo(const std::string& serial, 55 const DeviceInfoCallback& callback) { 56 AdbDeviceInfoQuery::Start(base::Bind(&RunCommand, serial), callback); 57} 58 59void AdbDeviceProvider::OpenSocket(const std::string& serial, 60 const std::string& socket_name, 61 const SocketCallback& callback) { 62 std::string request = 63 base::StringPrintf(kLocalAbstractCommand, socket_name.c_str()); 64 AdbClientSocket::TransportQuery(kAdbPort, serial, request, callback); 65} 66 67AdbDeviceProvider::~AdbDeviceProvider() { 68} 69