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 std::vector<std::string> serials; 34 Tokenize(response, "\n", &serials); 35 for (size_t i = 0; i < serials.size(); ++i) { 36 std::vector<std::string> tokens; 37 Tokenize(serials[i], "\t ", &tokens); 38 result.push_back(tokens[0]); 39 } 40 callback.Run(result); 41} 42 43} // namespace 44 45void AdbDeviceProvider::QueryDevices(const SerialsCallback& callback) { 46 AdbClientSocket::AdbQuery( 47 kAdbPort, kHostDevicesCommand, base::Bind(&ReceivedAdbDevices, callback)); 48} 49 50void AdbDeviceProvider::QueryDeviceInfo(const std::string& serial, 51 const DeviceInfoCallback& callback) { 52 AdbDeviceInfoQuery::Start(base::Bind(&RunCommand, serial), callback); 53} 54 55void AdbDeviceProvider::OpenSocket(const std::string& serial, 56 const std::string& socket_name, 57 const SocketCallback& callback) { 58 std::string request = 59 base::StringPrintf(kLocalAbstractCommand, socket_name.c_str()); 60 AdbClientSocket::TransportQuery(kAdbPort, serial, request, callback); 61} 62 63AdbDeviceProvider::~AdbDeviceProvider() { 64} 65