From 01b5022d65a1d006398d824a96174971981480e6 Mon Sep 17 00:00:00 2001 From: Daniel Llewellyn Date: Sun, 6 Jan 2019 12:18:38 +0000 Subject: [PATCH] Adding the ability to enable tcpip from the jadb Using the information from https://github.com/aosp-mirror/platform_system_core/blob/master/adb/daemon/services.cpp for the spec on how to construct the response. Usage is simply ```JadbDevice jadbDevice = ...; jadbDevice.enableTcpip()``` --- src/se/vidstige/jadb/JadbDevice.java | 29 +++++++++++++++++++++++++++- src/se/vidstige/jadb/Util.java | 28 +++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/se/vidstige/jadb/Util.java diff --git a/src/se/vidstige/jadb/JadbDevice.java b/src/se/vidstige/jadb/JadbDevice.java index 602fbbd..3c09e8b 100644 --- a/src/se/vidstige/jadb/JadbDevice.java +++ b/src/se/vidstige/jadb/JadbDevice.java @@ -1,11 +1,13 @@ package se.vidstige.jadb; import se.vidstige.jadb.managers.Bash; - import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import static se.vidstige.jadb.Util.inputStreamToString; + public class JadbDevice { @SuppressWarnings("squid:S00115") public enum State { @@ -20,6 +22,7 @@ public class JadbDevice { private static final int DEFAULT_MODE = 0664; private final String serial; private final ITransportFactory transportFactory; + private static final int DEFAULT_TCPIP_PORT = 5555; JadbDevice(String serial, ITransportFactory tFactory) { this.serial = serial; @@ -139,6 +142,30 @@ public class JadbDevice { return shellLine; } + /** + * Enable tcpip on the default port (5555) + * + * @return success or failure + */ + public boolean enableTcpip() throws IOException, JadbException { + return enableTcpip(DEFAULT_TCPIP_PORT); + } + + /** + * Enable tcpip on a specific port + * + * @param port for the device to bind on + * + * @return success or failure + */ + public boolean enableTcpip(int port) throws IOException, JadbException { + Transport transport = getTransport(); + send(transport, String.format("tcpip:%d", port)); + String expectedResult = String.format("restarting in TCP Mode: %d", port); + + return inputStreamToString(transport.getInputStream()).equals(expectedResult); + } + public List list(String remotePath) throws IOException, JadbException { try (Transport transport = getTransport()) { SyncTransport sync = transport.startSync(); diff --git a/src/se/vidstige/jadb/Util.java b/src/se/vidstige/jadb/Util.java new file mode 100644 index 0000000..0dcf202 --- /dev/null +++ b/src/se/vidstige/jadb/Util.java @@ -0,0 +1,28 @@ +package se.vidstige.jadb; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +public class Util { + /** + * Convert an input stream to string + * + * @param inputStream input stream + * + * @return string representation of the input stream + * + * @throws IOException if an error ocurrs reading the input stream + */ + public static String inputStreamToString(InputStream inputStream) throws IOException { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) != -1) { + result.write(buffer, 0, length); + } + + return result.toString(StandardCharsets.UTF_8.name()); + } +}