summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/remote-debugging/adb/adb-running-checker.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/remote-debugging/adb/adb-running-checker.js')
-rw-r--r--devtools/client/shared/remote-debugging/adb/adb-running-checker.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/devtools/client/shared/remote-debugging/adb/adb-running-checker.js b/devtools/client/shared/remote-debugging/adb/adb-running-checker.js
new file mode 100644
index 0000000000..7f952ca39b
--- /dev/null
+++ b/devtools/client/shared/remote-debugging/adb/adb-running-checker.js
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*
+ * Uses host:version service to detect if ADB is running
+ * Modified from adb-file-transfer from original ADB
+ */
+
+"use strict";
+
+const client = require("resource://devtools/client/shared/remote-debugging/adb/adb-client.js");
+const { dumpn } = require("resource://devtools/shared/DevToolsUtils.js");
+
+exports.check = async function check() {
+ let socket;
+ let state;
+ let timerID;
+ const TIMEOUT_TIME = 1000;
+
+ dumpn("Asking for host:version");
+
+ return new Promise(resolve => {
+ // On MacOSX connecting to a port which is not started listening gets
+ // stuck (bug 1481963), to avoid the stuck, we do forcibly fail the
+ // connection after |TIMEOUT_TIME| elapsed.
+ timerID = setTimeout(() => {
+ socket.close();
+ resolve(false);
+ }, TIMEOUT_TIME);
+
+ function finish(returnValue) {
+ clearTimeout(timerID);
+ resolve(returnValue);
+ }
+
+ const runFSM = function runFSM(packetData) {
+ dumpn("runFSM " + state);
+ switch (state) {
+ case "start":
+ const req = client.createRequest("host:version");
+ socket.send(req);
+ state = "wait-version";
+ break;
+ case "wait-version":
+ // TODO: Actually check the version number to make sure the daemon
+ // supports the commands we want to use
+ const { length, data } = client.unpackPacket(packetData);
+ dumpn("length: ", length, "data: ", data);
+ socket.close();
+ const version = parseInt(data, 16);
+ if (version >= 31) {
+ finish(true);
+ } else {
+ dumpn("killing existing adb as we need version >= 31");
+ finish(false);
+ }
+ break;
+ default:
+ dumpn("Unexpected State: " + state);
+ finish(false);
+ }
+ };
+
+ const setupSocket = function () {
+ socket.s.onerror = function (event) {
+ dumpn("running checker onerror");
+ finish(false);
+ };
+
+ socket.s.onopen = function (event) {
+ dumpn("running checker onopen");
+ state = "start";
+ runFSM();
+ };
+
+ socket.s.onclose = function (event) {
+ dumpn("running checker onclose");
+ };
+
+ socket.s.ondata = function (event) {
+ dumpn("running checker ondata");
+ runFSM(event.data);
+ };
+ };
+
+ socket = client.connect();
+ setupSocket();
+ });
+};