@yume-chan/adb 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +33 -0
- package/CHANGELOG.md +15 -1
- package/README.md +220 -103
- package/esm/adb.d.ts +24 -44
- package/esm/adb.d.ts.map +1 -1
- package/esm/adb.js +14 -203
- package/esm/adb.js.map +1 -1
- package/esm/banner.d.ts +17 -0
- package/esm/banner.d.ts.map +1 -0
- package/esm/banner.js +67 -0
- package/esm/banner.js.map +1 -0
- package/esm/commands/power.d.ts +1 -1
- package/esm/commands/power.js +2 -2
- package/esm/commands/reverse.d.ts +17 -18
- package/esm/commands/reverse.d.ts.map +1 -1
- package/esm/commands/reverse.js +53 -48
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/protocols/none.d.ts +3 -8
- package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/none.js +16 -16
- package/esm/commands/subprocess/protocols/none.js.map +1 -1
- package/esm/commands/subprocess/protocols/shell.d.ts +3 -9
- package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/shell.js +48 -42
- package/esm/commands/subprocess/protocols/shell.js.map +1 -1
- package/esm/commands/subprocess/protocols/types.d.ts +1 -2
- package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
- package/esm/commands/sync/list.js +2 -2
- package/esm/commands/sync/push.d.ts +14 -3
- package/esm/commands/sync/push.d.ts.map +1 -1
- package/esm/commands/sync/push.js +8 -8
- package/esm/commands/sync/push.js.map +1 -1
- package/esm/commands/sync/request.js +1 -1
- package/esm/commands/sync/response.d.ts +3 -3
- package/esm/commands/sync/response.d.ts.map +1 -1
- package/esm/commands/sync/response.js +3 -3
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/socket.d.ts +8 -13
- package/esm/commands/sync/socket.d.ts.map +1 -1
- package/esm/commands/sync/socket.js +32 -29
- package/esm/commands/sync/socket.js.map +1 -1
- package/esm/commands/sync/stat.js +2 -2
- package/esm/commands/sync/stat.js.map +1 -1
- package/esm/commands/sync/sync.d.ts +11 -18
- package/esm/commands/sync/sync.d.ts.map +1 -1
- package/esm/commands/sync/sync.js +19 -23
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/commands/tcpip.d.ts +2 -2
- package/esm/commands/tcpip.d.ts.map +1 -1
- package/esm/commands/tcpip.js +4 -2
- package/esm/commands/tcpip.js.map +1 -1
- package/esm/{auth.d.ts → daemon/auth.d.ts} +1 -2
- package/esm/daemon/auth.d.ts.map +1 -0
- package/esm/{auth.js → daemon/auth.js} +14 -14
- package/esm/daemon/auth.js.map +1 -0
- package/esm/daemon/connection.d.ts +11 -0
- package/esm/daemon/connection.d.ts.map +1 -0
- package/esm/daemon/connection.js +2 -0
- package/esm/daemon/connection.js.map +1 -0
- package/esm/{crypto.d.ts → daemon/crypto.d.ts} +5 -5
- package/esm/daemon/crypto.d.ts.map +1 -0
- package/esm/{crypto.js → daemon/crypto.js} +23 -27
- package/esm/daemon/crypto.js.map +1 -0
- package/esm/{backend.d.ts → daemon/device.d.ts} +2 -2
- package/esm/daemon/device.d.ts.map +1 -0
- package/esm/daemon/device.js +2 -0
- package/esm/daemon/device.js.map +1 -0
- package/esm/{socket → daemon}/dispatcher.d.ts +8 -26
- package/esm/daemon/dispatcher.d.ts.map +1 -0
- package/esm/{socket → daemon}/dispatcher.js +65 -63
- package/esm/daemon/dispatcher.js.map +1 -0
- package/esm/daemon/index.d.ts +8 -0
- package/esm/daemon/index.d.ts.map +1 -0
- package/esm/daemon/index.js +8 -0
- package/esm/daemon/index.js.map +1 -0
- package/esm/{packet.d.ts → daemon/packet.d.ts} +4 -4
- package/esm/daemon/packet.d.ts.map +1 -0
- package/esm/{packet.js → daemon/packet.js} +1 -1
- package/esm/daemon/packet.js.map +1 -0
- package/esm/{socket → daemon}/socket.d.ts +15 -17
- package/esm/daemon/socket.d.ts.map +1 -0
- package/esm/{socket → daemon}/socket.js +38 -35
- package/esm/daemon/socket.js.map +1 -0
- package/esm/daemon/transport.d.ts +45 -0
- package/esm/daemon/transport.d.ts.map +1 -0
- package/esm/daemon/transport.js +184 -0
- package/esm/daemon/transport.js.map +1 -0
- package/esm/index.d.ts +3 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -5
- package/esm/index.js.map +1 -1
- package/esm/server/client.d.ts +78 -0
- package/esm/server/client.d.ts.map +1 -0
- package/esm/server/client.js +329 -0
- package/esm/server/client.js.map +1 -0
- package/esm/server/index.d.ts +3 -0
- package/esm/server/index.d.ts.map +1 -0
- package/esm/server/index.js +3 -0
- package/esm/server/index.js.map +1 -0
- package/esm/server/transport.d.ts +19 -0
- package/esm/server/transport.d.ts.map +1 -0
- package/esm/server/transport.js +44 -0
- package/esm/server/transport.js.map +1 -0
- package/esm/utils/auto-reset-event.d.ts +1 -2
- package/esm/utils/auto-reset-event.d.ts.map +1 -1
- package/esm/utils/auto-reset-event.js +12 -12
- package/esm/utils/auto-reset-event.js.map +1 -1
- package/esm/utils/base64.js +5 -5
- package/esm/utils/base64.js.map +1 -1
- package/esm/utils/conditional-variable.d.ts +1 -2
- package/esm/utils/conditional-variable.d.ts.map +1 -1
- package/esm/utils/conditional-variable.js +10 -10
- package/esm/utils/conditional-variable.js.map +1 -1
- package/esm/utils/hex.d.ts +3 -0
- package/esm/utils/hex.d.ts.map +1 -0
- package/esm/utils/hex.js +55 -0
- package/esm/utils/hex.js.map +1 -0
- package/esm/utils/index.d.ts +2 -0
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +2 -0
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/no-op.d.ts +7 -0
- package/esm/utils/no-op.d.ts.map +1 -0
- package/esm/utils/no-op.js +12 -0
- package/esm/utils/no-op.js.map +1 -0
- package/package.json +11 -10
- package/src/adb.ts +41 -252
- package/src/banner.ts +82 -0
- package/src/commands/power.ts +2 -2
- package/src/commands/reverse.ts +68 -73
- package/src/commands/subprocess/protocols/none.ts +17 -18
- package/src/commands/subprocess/protocols/shell.ts +54 -56
- package/src/commands/subprocess/protocols/types.ts +1 -2
- package/src/commands/sync/list.ts +2 -2
- package/src/commands/sync/push.ts +22 -10
- package/src/commands/sync/request.ts +1 -1
- package/src/commands/sync/response.ts +6 -6
- package/src/commands/sync/socket.ts +37 -35
- package/src/commands/sync/sync.ts +25 -28
- package/src/commands/tcpip.ts +6 -4
- package/src/{auth.ts → daemon/auth.ts} +17 -17
- package/src/{crypto.ts → daemon/crypto.ts} +25 -33
- package/src/{backend.ts → daemon/device.ts} +1 -1
- package/src/{socket → daemon}/dispatcher.ts +71 -78
- package/src/daemon/index.ts +7 -0
- package/src/{packet.ts → daemon/packet.ts} +5 -5
- package/src/{socket → daemon}/socket.ts +50 -44
- package/src/daemon/transport.ts +269 -0
- package/src/index.ts +3 -5
- package/src/server/client.ts +476 -0
- package/src/server/index.ts +2 -0
- package/src/server/transport.ts +77 -0
- package/src/utils/auto-reset-event.ts +12 -12
- package/src/utils/conditional-variable.ts +10 -10
- package/src/utils/hex.ts +58 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/no-op.ts +12 -0
- package/tsconfig.build.json +12 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/auth.d.ts.map +0 -1
- package/esm/auth.js.map +0 -1
- package/esm/backend.d.ts.map +0 -1
- package/esm/backend.js +0 -2
- package/esm/backend.js.map +0 -1
- package/esm/commands/install.d.ts +0 -10
- package/esm/commands/install.d.ts.map +0 -1
- package/esm/commands/install.js +0 -29
- package/esm/commands/install.js.map +0 -1
- package/esm/crypto.d.ts.map +0 -1
- package/esm/crypto.js.map +0 -1
- package/esm/packet.d.ts.map +0 -1
- package/esm/packet.js.map +0 -1
- package/esm/socket/dispatcher.d.ts.map +0 -1
- package/esm/socket/dispatcher.js.map +0 -1
- package/esm/socket/index.d.ts +0 -3
- package/esm/socket/index.d.ts.map +0 -1
- package/esm/socket/index.js +0 -3
- package/esm/socket/index.js.map +0 -1
- package/esm/socket/socket.d.ts.map +0 -1
- package/esm/socket/socket.js.map +0 -1
- package/src/socket/index.ts +0 -2
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { getBigUint64, setBigUint64, } from "@yume-chan/dataview-bigint-polyfill/esm/fallback.js";
|
|
2
|
-
const BigInt0 = BigInt(0);
|
|
3
|
-
const BigInt1 = BigInt(1);
|
|
4
|
-
const BigInt2 = BigInt(2);
|
|
5
|
-
const BigInt64 = BigInt(64);
|
|
6
2
|
/**
|
|
7
3
|
* Gets the `BigInt` value at the specified byte offset and length from the start of the view. There is
|
|
8
4
|
* no alignment constraint; multi-byte values may be fetched from any offset.
|
|
@@ -11,11 +7,11 @@ const BigInt64 = BigInt(64);
|
|
|
11
7
|
* @param byteOffset The place in the buffer at which the value should be retrieved.
|
|
12
8
|
*/
|
|
13
9
|
export function getBigUint(dataView, byteOffset, length) {
|
|
14
|
-
let result =
|
|
10
|
+
let result = 0n;
|
|
15
11
|
// Currently `length` must be a multiplication of 8
|
|
16
12
|
// Support for arbitrary length can be easily added
|
|
17
13
|
for (let i = byteOffset; i < byteOffset + length; i += 8) {
|
|
18
|
-
result <<=
|
|
14
|
+
result <<= 64n;
|
|
19
15
|
const value = getBigUint64(dataView, i, false);
|
|
20
16
|
result += value;
|
|
21
17
|
}
|
|
@@ -31,19 +27,19 @@ export function getBigUint(dataView, byteOffset, length) {
|
|
|
31
27
|
export function setBigUint(dataView, byteOffset, value, littleEndian) {
|
|
32
28
|
const start = byteOffset;
|
|
33
29
|
if (littleEndian) {
|
|
34
|
-
while (value >
|
|
30
|
+
while (value > 0n) {
|
|
35
31
|
setBigUint64(dataView, byteOffset, value, true);
|
|
36
32
|
byteOffset += 8;
|
|
37
|
-
value >>=
|
|
33
|
+
value >>= 64n;
|
|
38
34
|
}
|
|
39
35
|
}
|
|
40
36
|
else {
|
|
41
37
|
// Because we don't know how long (in bits) the `value` is,
|
|
42
38
|
// Convert it to an array of `uint64` first.
|
|
43
39
|
const uint64Array = [];
|
|
44
|
-
while (value >
|
|
40
|
+
while (value > 0n) {
|
|
45
41
|
uint64Array.push(BigInt.asUintN(64, value));
|
|
46
|
-
value >>=
|
|
42
|
+
value >>= 64n;
|
|
47
43
|
}
|
|
48
44
|
for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
|
|
49
45
|
setBigUint64(dataView, byteOffset, uint64Array[i], false);
|
|
@@ -74,7 +70,7 @@ const RsaPrivateKeyNOffset = 38;
|
|
|
74
70
|
const RsaPrivateKeyNLength = 2048 / 8;
|
|
75
71
|
const RsaPrivateKeyDOffset = 303;
|
|
76
72
|
const RsaPrivateKeyDLength = 2048 / 8;
|
|
77
|
-
export function
|
|
73
|
+
export function rsaParsePrivateKey(key) {
|
|
78
74
|
const view = new DataView(key.buffer, key.byteOffset, key.byteLength);
|
|
79
75
|
const n = getBigUint(view, RsaPrivateKeyNOffset, RsaPrivateKeyNLength);
|
|
80
76
|
const d = getBigUint(view, RsaPrivateKeyDOffset, RsaPrivateKeyDLength);
|
|
@@ -106,10 +102,10 @@ export function modInverse(a, m) {
|
|
|
106
102
|
}
|
|
107
103
|
return ((y % m) + m) % m;
|
|
108
104
|
}
|
|
109
|
-
export function
|
|
105
|
+
export function adbGetPublicKeySize() {
|
|
110
106
|
return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
|
|
111
107
|
}
|
|
112
|
-
export function
|
|
108
|
+
export function adbGeneratePublicKey(privateKey, output) {
|
|
113
109
|
// Android has its own public key generation algorithm
|
|
114
110
|
// See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
|
|
115
111
|
// The public key is an array of
|
|
@@ -126,9 +122,9 @@ export function calculatePublicKey(privateKey, output) {
|
|
|
126
122
|
// (All in little endian)
|
|
127
123
|
// See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#38
|
|
128
124
|
// extract `n` from private key
|
|
129
|
-
const [n] =
|
|
125
|
+
const [n] = rsaParsePrivateKey(privateKey);
|
|
130
126
|
let outputType;
|
|
131
|
-
const outputLength =
|
|
127
|
+
const outputLength = adbGetPublicKeySize();
|
|
132
128
|
if (!output) {
|
|
133
129
|
output = new Uint8Array(outputLength);
|
|
134
130
|
outputType = "Uint8Array";
|
|
@@ -145,16 +141,16 @@ export function calculatePublicKey(privateKey, output) {
|
|
|
145
141
|
outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
|
|
146
142
|
outputOffset += 4;
|
|
147
143
|
// Calculate `n0inv`
|
|
148
|
-
// Don't know why need to
|
|
144
|
+
// Don't know why need to multiply by -1
|
|
149
145
|
// Didn't exist in Android codebase
|
|
150
|
-
const n0inv = modInverse(Number(BigInt.asUintN(32, n)
|
|
146
|
+
const n0inv = modInverse(-Number(BigInt.asUintN(32, n)), 2 ** 32);
|
|
151
147
|
outputView.setUint32(outputOffset, n0inv, true);
|
|
152
148
|
outputOffset += 4;
|
|
153
149
|
// Write n
|
|
154
150
|
setBigUint(outputView, outputOffset, n, true);
|
|
155
151
|
outputOffset += 256;
|
|
156
152
|
// Calculate rr = (2^(rsa_size)) ^ 2 mod n
|
|
157
|
-
const rr =
|
|
153
|
+
const rr = 2n ** 4096n % n;
|
|
158
154
|
outputOffset += setBigUint(outputView, outputOffset, rr, true);
|
|
159
155
|
// exponent
|
|
160
156
|
outputView.setUint32(outputOffset, 65537, true);
|
|
@@ -174,17 +170,17 @@ export function calculatePublicKey(privateKey, output) {
|
|
|
174
170
|
* See https://en.wikipedia.org/wiki/Modular_exponentiation#Implementation_in_Lua
|
|
175
171
|
*/
|
|
176
172
|
export function powMod(base, exponent, modulus) {
|
|
177
|
-
if (modulus ===
|
|
178
|
-
return
|
|
173
|
+
if (modulus === 1n) {
|
|
174
|
+
return 0n;
|
|
179
175
|
}
|
|
180
|
-
let r =
|
|
176
|
+
let r = 1n;
|
|
181
177
|
base = base % modulus;
|
|
182
|
-
while (exponent >
|
|
183
|
-
if (BigInt.asUintN(1, exponent) ===
|
|
178
|
+
while (exponent > 0n) {
|
|
179
|
+
if (BigInt.asUintN(1, exponent) === 1n) {
|
|
184
180
|
r = (r * base) % modulus;
|
|
185
181
|
}
|
|
186
|
-
|
|
187
|
-
|
|
182
|
+
base = (base * base) % modulus;
|
|
183
|
+
exponent >>= 1n;
|
|
188
184
|
}
|
|
189
185
|
return r;
|
|
190
186
|
}
|
|
@@ -218,8 +214,8 @@ export const SHA1_DIGEST_INFO = new Uint8Array([
|
|
|
218
214
|
// encrypt the given data with its private key)
|
|
219
215
|
// However SubtileCrypto.encrypt() doesn't accept 'RSASSA-PKCS1-v1_5' algorithm
|
|
220
216
|
// So we need to implement the encryption by ourself
|
|
221
|
-
export function
|
|
222
|
-
const [n, d] =
|
|
217
|
+
export function rsaSign(privateKey, data) {
|
|
218
|
+
const [n, d] = rsaParsePrivateKey(privateKey);
|
|
223
219
|
// PKCS#1 padding
|
|
224
220
|
const padded = new Uint8Array(256);
|
|
225
221
|
let index = 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,YAAY,GACf,MAAM,qDAAqD,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACtB,QAAkB,EAClB,UAAkB,EAClB,MAAc;IAEd,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,mDAAmD;IACnD,mDAAmD;IAEnD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACtD,MAAM,KAAK,GAAG,CAAC;QACf,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC;KACnB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACtB,QAAkB,EAClB,UAAkB,EAClB,KAAa,EACb,YAAsB;IAEtB,MAAM,KAAK,GAAG,UAAU,CAAC;IAEzB,IAAI,YAAY,EAAE;QACd,OAAO,KAAK,GAAG,EAAE,EAAE;YACf,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAChD,UAAU,IAAI,CAAC,CAAC;YAChB,KAAK,KAAK,GAAG,CAAC;SACjB;KACJ;SAAM;QACH,2DAA2D;QAC3D,4CAA4C;QAC5C,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,OAAO,KAAK,GAAG,EAAE,EAAE;YACf,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5C,KAAK,KAAK,GAAG,CAAC;SACjB;QAED,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACjD,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;YAC3D,UAAU,IAAI,CAAC,CAAC;SACnB;KACJ;IAED,OAAO,UAAU,GAAG,KAAK,CAAC;AAC9B,CAAC;AAED,mCAAmC;AACnC,6BAA6B;AAC7B,+BAA+B;AAC/B,iDAAiD;AAEjD,+BAA+B;AAC/B,oCAAoC;AAEpC,cAAc;AACd,EAAE;AACF,uDAAuD;AACvD,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,4BAA4B;AAC5B,2CAA2C;AAC3C,6BAA6B;AAC7B,EAAE;AACF,oDAAoD;AACpD,+DAA+D;AAE/D,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC;AACtC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,kBAAkB,CAAC,GAAe;IAC9C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACvE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACvE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,kDAAkD;AAClD,uCAAuC;AACvC,kEAAkE;AAClE,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC3C,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACb,OAAO,GAAG,CAAC,CAAC,gBAAgB;KAC/B;IACD,eAAe;IACf,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,EAAE;QACN,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACpB;IACD,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,OAAO,GAAG,CAAC,CAAC,0BAA0B;KACzC;IACD,mBAAmB;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACvC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD;IACD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAOD,MAAM,UAAU,oBAAoB,CAChC,UAAsB,EACtB,MAAmB;IAEnB,sDAAsD;IACtD,kJAAkJ;IAElJ,gCAAgC;IAChC,EAAE;IACF,IAAI;IACJ,2FAA2F;IAC3F,mFAAmF;IACnF,uFAAuF;IACvF,+BAA+B;IAC/B,sDAAsD;IACtD,2DAA2D;IAC3D,IAAI;IACJ,EAAE;IACF,yBAAyB;IACzB,iJAAiJ;IAEjJ,+BAA+B;IAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,UAAmC,CAAC;IACxC,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;QACtC,UAAU,GAAG,YAAY,CAAC;KAC7B;SAAM;QACH,IAAI,MAAM,CAAC,UAAU,GAAG,YAAY,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SACjD;QAED,UAAU,GAAG,QAAQ,CAAC;KACzB;IAED,MAAM,UAAU,GAAG,IAAI,QAAQ,CAC3B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CACpB,CAAC;IACF,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,uBAAuB;IACvB,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,YAAY,IAAI,CAAC,CAAC;IAElB,oBAAoB;IACpB,wCAAwC;IACxC,mCAAmC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,YAAY,IAAI,CAAC,CAAC;IAElB,UAAU;IACV,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9C,YAAY,IAAI,GAAG,CAAC;IAEpB,0CAA0C;IAC1C,MAAM,EAAE,GAAG,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;IAC3B,YAAY,IAAI,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAE/D,WAAW;IACX,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,YAAY,IAAI,CAAC,CAAC;IAElB,IAAI,UAAU,KAAK,YAAY,EAAE;QAC7B,OAAO,MAAM,CAAC;KACjB;SAAM;QACH,OAAO,YAAY,CAAC;KACvB;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAClB,IAAY,EACZ,QAAgB,EAChB,OAAe;IAEf,IAAI,OAAO,KAAK,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACb;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;IAEtB,OAAO,QAAQ,GAAG,EAAE,EAAE;QAClB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE;YACpC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;SAC5B;QAED,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;QAC/B,QAAQ,KAAK,EAAE,CAAC;KACnB;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,gCAAgC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC;IAC3C,aAAa;IACb,IAAI,GAAG,kBAAkB;IACzB,aAAa;IACb,IAAI;IACJ,wBAAwB;IACxB,QAAQ;IACR,IAAI;IACJ,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,EAAE;IACF,CAAC;IACD,CAAC;IACD,EAAE;IACF,SAAS;IACT,IAAI;IACJ,iBAAiB;IACjB,kBAAkB;CACrB,CAAC,CAAC;AAEH,iEAAiE;AACjE,qCAAqC;AACrC,oDAAoD;AACpD,+CAA+C;AAC/C,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,UAAU,OAAO,CAAC,UAAsB,EAAE,IAAgB;IAC5D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE9C,iBAAiB;IACjB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,CAAC;IAEX,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,CAAC;IAEX,MAAM,UAAU,GACZ,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,GAAG,UAAU,EAAE;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC;KACd;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,CAAC;IAEX,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACpC,KAAK,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAEjC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAExB,aAAa;IACb,8BAA8B;IAC9B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAErE,gCAAgC;IAChC,wCAAwC;IACxC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Consumable, ReadableWritablePair } from "@yume-chan/stream-extra";
|
|
2
2
|
import type { ValueOrPromise } from "@yume-chan/struct";
|
|
3
3
|
import type { AdbPacketData, AdbPacketInit } from "./packet.js";
|
|
4
|
-
export interface
|
|
4
|
+
export interface AdbDaemonDevice {
|
|
5
5
|
readonly serial: string;
|
|
6
6
|
readonly name: string | undefined;
|
|
7
7
|
connect(): ValueOrPromise<ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>>>;
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/daemon/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,OAAO,IAAI,cAAc,CACrB,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CACjE,CAAC;CACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/daemon/device.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type { RemoveEventListener } from "@yume-chan/event";
|
|
2
1
|
import type { Consumable, ReadableWritablePair } from "@yume-chan/stream-extra";
|
|
3
|
-
import type {
|
|
4
|
-
import type { AdbPacketData, AdbPacketInit } from "
|
|
5
|
-
import { AdbCommand } from "
|
|
6
|
-
import type { AdbSocket } from "./socket.js";
|
|
2
|
+
import type { AdbIncomingSocketHandler, AdbSocket, Closeable } from "../adb.js";
|
|
3
|
+
import type { AdbPacketData, AdbPacketInit } from "./packet.js";
|
|
4
|
+
import { AdbCommand } from "./packet.js";
|
|
7
5
|
export interface AdbPacketDispatcherOptions {
|
|
8
6
|
calculateChecksum: boolean;
|
|
9
7
|
/**
|
|
@@ -15,10 +13,6 @@ export interface AdbPacketDispatcherOptions {
|
|
|
15
13
|
appendNullToServiceString: boolean;
|
|
16
14
|
maxPayloadSize: number;
|
|
17
15
|
}
|
|
18
|
-
export type AdbIncomingSocketHandler = (socket: AdbSocket) => ValueOrPromise<boolean>;
|
|
19
|
-
export interface Closeable {
|
|
20
|
-
close(): ValueOrPromise<void>;
|
|
21
|
-
}
|
|
22
16
|
/**
|
|
23
17
|
* The dispatcher is the "dumb" part of the connection handling logic.
|
|
24
18
|
*
|
|
@@ -30,29 +24,17 @@ export interface Closeable {
|
|
|
30
24
|
* negotiating the options, and has shortcuts to high-level services.
|
|
31
25
|
*/
|
|
32
26
|
export declare class AdbPacketDispatcher implements Closeable {
|
|
33
|
-
private
|
|
34
|
-
/**
|
|
35
|
-
* Socket local ID to the socket controller.
|
|
36
|
-
*/
|
|
37
|
-
private readonly sockets;
|
|
38
|
-
private _writer;
|
|
27
|
+
#private;
|
|
39
28
|
readonly options: AdbPacketDispatcherOptions;
|
|
40
|
-
private _closed;
|
|
41
|
-
private _disconnected;
|
|
42
29
|
get disconnected(): Promise<void>;
|
|
43
|
-
private _incomingSocketHandlers;
|
|
44
|
-
private _abortController;
|
|
45
30
|
constructor(connection: ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>>, options: AdbPacketDispatcherOptions);
|
|
46
31
|
private handleOk;
|
|
47
32
|
private handleClose;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
* @returns A function to remove the handler.
|
|
52
|
-
*/
|
|
53
|
-
onIncomingSocket(handler: AdbIncomingSocketHandler): RemoveEventListener;
|
|
33
|
+
addReverseTunnel(service: string, handler: AdbIncomingSocketHandler): void;
|
|
34
|
+
removeReverseTunnel(address: string): void;
|
|
35
|
+
clearReverseTunnels(): void;
|
|
54
36
|
private handleOpen;
|
|
55
|
-
createSocket(
|
|
37
|
+
createSocket(service: string): Promise<AdbSocket>;
|
|
56
38
|
sendPacket(command: AdbCommand, arg0: number, arg1: number, payload?: string | Uint8Array): Promise<void>;
|
|
57
39
|
close(): Promise<void>;
|
|
58
40
|
private dispose;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,UAAU,EACV,oBAAoB,EAEvB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGhF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,0BAA0B;IACvC,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,yBAAyB,EAAE,OAAO,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,SAAS;;IAWjD,SAAgB,OAAO,EAAE,0BAA0B,CAAC;IAIpD,IAAW,YAAY,kBAEtB;gBAMG,UAAU,EAAE,oBAAoB,CAC5B,aAAa,EACb,UAAU,CAAC,aAAa,CAAC,CAC5B,EACD,OAAO,EAAE,0BAA0B;IAuEvC,OAAO,CAAC,QAAQ;YAkBF,WAAW;IA6ClB,gBAAgB,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,wBAAwB;IAK9B,mBAAmB,CAAC,OAAO,EAAE,MAAM;IAInC,mBAAmB;YAIZ,UAAU;IAmCX,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAsBjD,UAAU,CACnB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,GAAG,UAA8B,GACjD,OAAO,CAAC,IAAI,CAAC;IAqBH,KAAK;IAgBlB,OAAO,CAAC,OAAO;CAOlB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AsyncOperationManager, PromiseResolver } from "@yume-chan/async";
|
|
2
2
|
import { AbortController, ConsumableWritableStream, WritableStream, } from "@yume-chan/stream-extra";
|
|
3
3
|
import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { decodeUtf8, encodeUtf8, unreachable } from "../utils/index.js";
|
|
5
|
+
import { AdbCommand, calculateChecksum } from "./packet.js";
|
|
6
|
+
import { AdbDaemonSocketController } from "./socket.js";
|
|
7
7
|
/**
|
|
8
8
|
* The dispatcher is the "dumb" part of the connection handling logic.
|
|
9
9
|
*
|
|
@@ -17,20 +17,20 @@ import { AdbSocketController } from "./socket.js";
|
|
|
17
17
|
export class AdbPacketDispatcher {
|
|
18
18
|
// ADB socket id starts from 1
|
|
19
19
|
// (0 means open failed)
|
|
20
|
-
initializers = new AsyncOperationManager(1);
|
|
20
|
+
#initializers = new AsyncOperationManager(1);
|
|
21
21
|
/**
|
|
22
22
|
* Socket local ID to the socket controller.
|
|
23
23
|
*/
|
|
24
|
-
sockets = new Map();
|
|
25
|
-
|
|
24
|
+
#sockets = new Map();
|
|
25
|
+
#writer;
|
|
26
26
|
options;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
#closed = false;
|
|
28
|
+
#disconnected = new PromiseResolver();
|
|
29
29
|
get disconnected() {
|
|
30
|
-
return this.
|
|
30
|
+
return this.#disconnected.promise;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
#incomingSocketHandlers = new Map();
|
|
33
|
+
#readAbortController = new AbortController();
|
|
34
34
|
constructor(connection, options) {
|
|
35
35
|
this.options = options;
|
|
36
36
|
connection.readable
|
|
@@ -44,8 +44,8 @@ export class AdbPacketDispatcher {
|
|
|
44
44
|
await this.handleClose(packet);
|
|
45
45
|
break;
|
|
46
46
|
case AdbCommand.Write:
|
|
47
|
-
if (this
|
|
48
|
-
await this
|
|
47
|
+
if (this.#sockets.has(packet.arg1)) {
|
|
48
|
+
await this.#sockets
|
|
49
49
|
.get(packet.arg1)
|
|
50
50
|
.enqueue(packet.payload);
|
|
51
51
|
await this.sendPacket(AdbCommand.OK, packet.arg1, packet.arg0);
|
|
@@ -70,24 +70,24 @@ export class AdbPacketDispatcher {
|
|
|
70
70
|
// it's still possible to create another ADB connection.
|
|
71
71
|
// So don't close `readable` here.
|
|
72
72
|
preventCancel: true,
|
|
73
|
-
signal: this.
|
|
73
|
+
signal: this.#readAbortController.signal,
|
|
74
74
|
})
|
|
75
75
|
.then(() => {
|
|
76
76
|
this.dispose();
|
|
77
77
|
}, (e) => {
|
|
78
|
-
if (!this
|
|
79
|
-
this.
|
|
78
|
+
if (!this.#closed) {
|
|
79
|
+
this.#disconnected.reject(e);
|
|
80
80
|
}
|
|
81
81
|
this.dispose();
|
|
82
82
|
});
|
|
83
|
-
this
|
|
83
|
+
this.#writer = connection.writable.getWriter();
|
|
84
84
|
}
|
|
85
85
|
handleOk(packet) {
|
|
86
|
-
if (this
|
|
86
|
+
if (this.#initializers.resolve(packet.arg1, packet.arg0)) {
|
|
87
87
|
// Device successfully created the socket
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
|
-
const socket = this
|
|
90
|
+
const socket = this.#sockets.get(packet.arg1);
|
|
91
91
|
if (socket) {
|
|
92
92
|
// Device has received last `WRTE` to the socket
|
|
93
93
|
socket.ack();
|
|
@@ -100,7 +100,7 @@ export class AdbPacketDispatcher {
|
|
|
100
100
|
async handleClose(packet) {
|
|
101
101
|
// If the socket is still pending
|
|
102
102
|
if (packet.arg0 === 0 &&
|
|
103
|
-
this
|
|
103
|
+
this.#initializers.reject(packet.arg1, new Error("Socket open failed"))) {
|
|
104
104
|
// Device failed to create the socket
|
|
105
105
|
// (unknown service string, failed to execute command, etc.)
|
|
106
106
|
// it doesn't break the connection,
|
|
@@ -115,72 +115,76 @@ export class AdbPacketDispatcher {
|
|
|
115
115
|
* CLOSE() operations.
|
|
116
116
|
*/
|
|
117
117
|
// Ignore `arg0` and search for the socket
|
|
118
|
-
const socket = this
|
|
118
|
+
const socket = this.#sockets.get(packet.arg1);
|
|
119
119
|
if (socket) {
|
|
120
120
|
// The device want to close the socket
|
|
121
121
|
if (!socket.closed) {
|
|
122
122
|
await this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
|
|
123
123
|
}
|
|
124
124
|
await socket.dispose();
|
|
125
|
-
this
|
|
125
|
+
this.#sockets.delete(packet.arg1);
|
|
126
126
|
return;
|
|
127
127
|
}
|
|
128
128
|
// TODO: adb: is double closing an socket a catastrophic error?
|
|
129
129
|
// If the client sends two `CLSE` packets for one socket,
|
|
130
130
|
// the device may also respond with two `CLSE` packets.
|
|
131
131
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
this._incomingSocketHandlers.delete(handler);
|
|
141
|
-
};
|
|
142
|
-
remove.dispose = remove;
|
|
143
|
-
return remove;
|
|
132
|
+
addReverseTunnel(service, handler) {
|
|
133
|
+
this.#incomingSocketHandlers.set(service, handler);
|
|
134
|
+
}
|
|
135
|
+
removeReverseTunnel(address) {
|
|
136
|
+
this.#incomingSocketHandlers.delete(address);
|
|
137
|
+
}
|
|
138
|
+
clearReverseTunnels() {
|
|
139
|
+
this.#incomingSocketHandlers.clear();
|
|
144
140
|
}
|
|
145
141
|
async handleOpen(packet) {
|
|
146
142
|
// `AsyncOperationManager` doesn't support skipping IDs
|
|
147
143
|
// Use `add` + `resolve` to simulate this behavior
|
|
148
|
-
const [localId] = this
|
|
149
|
-
this
|
|
144
|
+
const [localId] = this.#initializers.add();
|
|
145
|
+
this.#initializers.resolve(localId, undefined);
|
|
150
146
|
const remoteId = packet.arg0;
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
let service = decodeUtf8(packet.payload);
|
|
148
|
+
if (service.endsWith("\0")) {
|
|
149
|
+
service = service.substring(0, service.length - 1);
|
|
150
|
+
}
|
|
151
|
+
const handler = this.#incomingSocketHandlers.get(service);
|
|
152
|
+
if (!handler) {
|
|
153
|
+
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const controller = new AdbDaemonSocketController({
|
|
153
157
|
dispatcher: this,
|
|
154
158
|
localId,
|
|
155
159
|
remoteId,
|
|
156
160
|
localCreated: false,
|
|
157
|
-
|
|
161
|
+
service,
|
|
158
162
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
try {
|
|
164
|
+
await handler(controller.socket);
|
|
165
|
+
this.#sockets.set(localId, controller);
|
|
166
|
+
await this.sendPacket(AdbCommand.OK, localId, remoteId);
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
165
170
|
}
|
|
166
|
-
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
167
171
|
}
|
|
168
|
-
async createSocket(
|
|
172
|
+
async createSocket(service) {
|
|
169
173
|
if (this.options.appendNullToServiceString) {
|
|
170
|
-
|
|
174
|
+
service += "\0";
|
|
171
175
|
}
|
|
172
|
-
const [localId, initializer] = this
|
|
173
|
-
await this.sendPacket(AdbCommand.Open, localId, 0,
|
|
176
|
+
const [localId, initializer] = this.#initializers.add();
|
|
177
|
+
await this.sendPacket(AdbCommand.Open, localId, 0, service);
|
|
174
178
|
// Fulfilled by `handleOk`
|
|
175
179
|
const remoteId = await initializer;
|
|
176
|
-
const controller = new
|
|
180
|
+
const controller = new AdbDaemonSocketController({
|
|
177
181
|
dispatcher: this,
|
|
178
182
|
localId,
|
|
179
183
|
remoteId,
|
|
180
184
|
localCreated: true,
|
|
181
|
-
|
|
185
|
+
service,
|
|
182
186
|
});
|
|
183
|
-
this
|
|
187
|
+
this.#sockets.set(localId, controller);
|
|
184
188
|
return controller.socket;
|
|
185
189
|
}
|
|
186
190
|
async sendPacket(command, arg0, arg1, payload = EMPTY_UINT8_ARRAY) {
|
|
@@ -190,7 +194,7 @@ export class AdbPacketDispatcher {
|
|
|
190
194
|
if (payload.byteLength > this.options.maxPayloadSize) {
|
|
191
195
|
throw new Error("payload too large");
|
|
192
196
|
}
|
|
193
|
-
await ConsumableWritableStream.write(this
|
|
197
|
+
await ConsumableWritableStream.write(this.#writer, {
|
|
194
198
|
command,
|
|
195
199
|
arg0,
|
|
196
200
|
arg1,
|
|
@@ -203,22 +207,20 @@ export class AdbPacketDispatcher {
|
|
|
203
207
|
}
|
|
204
208
|
async close() {
|
|
205
209
|
// Send `CLSE` packets for all sockets
|
|
206
|
-
await Promise.all(Array.from(this
|
|
210
|
+
await Promise.all(Array.from(this.#sockets.values(), (socket) => socket.close()));
|
|
207
211
|
// Stop receiving
|
|
208
212
|
// It's possible that we haven't received all `CLSE` confirm packets,
|
|
209
213
|
// but it doesn't matter, the next connection can cope with them.
|
|
210
|
-
this
|
|
211
|
-
this.
|
|
212
|
-
this.
|
|
214
|
+
this.#closed = true;
|
|
215
|
+
this.#readAbortController.abort();
|
|
216
|
+
this.#writer.releaseLock();
|
|
213
217
|
// `pipe().then()` will call `dispose`
|
|
214
218
|
}
|
|
215
219
|
dispose() {
|
|
216
|
-
for (const socket of this
|
|
217
|
-
socket.dispose().catch(
|
|
218
|
-
void e;
|
|
219
|
-
});
|
|
220
|
+
for (const socket of this.#sockets.values()) {
|
|
221
|
+
socket.dispose().catch(unreachable);
|
|
220
222
|
}
|
|
221
|
-
this.
|
|
223
|
+
this.#disconnected.resolve();
|
|
222
224
|
}
|
|
223
225
|
}
|
|
224
226
|
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -30,11 +30,11 @@ export type AdbPacket = (typeof AdbPacket)["TDeserializeResult"];
|
|
|
30
30
|
/**
|
|
31
31
|
* `AdbPacketData` contains all the useful fields of `AdbPacket`.
|
|
32
32
|
*
|
|
33
|
-
* `
|
|
34
|
-
*
|
|
33
|
+
* `AdvDaemonConnection#connect` will return a `ReadableStream<AdbPacketData>`,
|
|
34
|
+
* allow each connection to encode `AdbPacket` in different methods.
|
|
35
35
|
*
|
|
36
|
-
* `
|
|
37
|
-
* however, `
|
|
36
|
+
* `AdbDaemonConnection#connect` will return a `WritableStream<AdbPacketInit>`,
|
|
37
|
+
* however, `AdbDaemonTransport` will transform `AdbPacketData` to `AdbPacketInit` for you,
|
|
38
38
|
* so `AdbSocket#writable#write` only needs `AdbPacketData`.
|
|
39
39
|
*/
|
|
40
40
|
export type AdbPacketData = Omit<(typeof AdbPacket)["TInit"], "checksum" | "magic">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa;IACjB,KAAK,aAAa;IAClB,OAAO,aAAa;IACpB,EAAE,aAAa;IACf,IAAI,aAAa;IACjB,KAAK,aAAa;CACrB;AAED,eAAO,MAAM,eAAe;;;;;;;0CAMT,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAI7E,eAAO,MAAM,SAAS;;;;;;;;oDAEsC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC5B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,EAC3B,UAAU,GAAG,OAAO,CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,qBAAa,wBAAyB,SAAQ,yBAAyB,CACnE,aAAa,EACb,UAAU,CACb;;CAoBA"}
|
|
@@ -17,7 +17,7 @@ export const AdbPacketHeader = new Struct({ littleEndian: true })
|
|
|
17
17
|
.uint32("checksum")
|
|
18
18
|
.int32("magic");
|
|
19
19
|
export const AdbPacket = new Struct({ littleEndian: true })
|
|
20
|
-
.
|
|
20
|
+
.concat(AdbPacketHeader)
|
|
21
21
|
.uint8Array("payload", { lengthField: "payloadLength" });
|
|
22
22
|
export function calculateChecksum(payload) {
|
|
23
23
|
return payload.reduce((result, item) => result + item, 0);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,gDAAe,CAAA;IACf,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;AACtB,CAAC,EAPW,UAAU,GAAV,UAAU,KAAV,UAAU,QAOrB;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC5D,MAAM,CAAC,SAAS,CAAC;KACjB,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,UAAU,CAAC;KAClB,KAAK,CAAC,OAAO,CAAC,CAAC;AAMpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACtD,MAAM,CAAC,eAAe,CAAC;KACvB,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;AAqB7D,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,yBAG7C;IACG;QACI,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC;YACF,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,KAA4C,CAAC;gBAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAE7C,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC9C,MAAM,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;oBACzB,4CAA4C;oBAC5C,0DAA0D;oBAC1D,oDAAoD;oBACpD,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC1C;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
import type { Disposable } from "@yume-chan/event";
|
|
2
2
|
import type { Consumable, ReadableStream, ReadableWritablePair, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
-
import type {
|
|
4
|
-
|
|
3
|
+
import type { Closeable } from "../adb.js";
|
|
4
|
+
import type { AdbPacketDispatcher } from "./dispatcher.js";
|
|
5
|
+
export interface AdbDaemonSocketInfo {
|
|
5
6
|
localId: number;
|
|
6
7
|
remoteId: number;
|
|
7
8
|
localCreated: boolean;
|
|
8
|
-
|
|
9
|
+
service: string;
|
|
9
10
|
}
|
|
10
|
-
export interface
|
|
11
|
+
export interface AdbDaemonSocketConstructionOptions extends AdbDaemonSocketInfo {
|
|
11
12
|
dispatcher: AdbPacketDispatcher;
|
|
12
13
|
highWaterMark?: number | undefined;
|
|
13
14
|
}
|
|
14
|
-
export declare class
|
|
15
|
+
export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo, ReadableWritablePair<Uint8Array, Consumable<Uint8Array>>, Closeable, Disposable {
|
|
16
|
+
#private;
|
|
15
17
|
private readonly dispatcher;
|
|
16
18
|
readonly localId: number;
|
|
17
19
|
readonly remoteId: number;
|
|
18
20
|
readonly localCreated: boolean;
|
|
19
|
-
readonly
|
|
20
|
-
private _duplex;
|
|
21
|
-
private _readable;
|
|
22
|
-
private _readableController;
|
|
21
|
+
readonly service: string;
|
|
23
22
|
get readable(): ReadableStream<Uint8Array>;
|
|
24
|
-
private _writePromise;
|
|
25
23
|
readonly writable: WritableStream<Consumable<Uint8Array>>;
|
|
26
|
-
private _closed;
|
|
27
24
|
/**
|
|
28
25
|
* Whether the socket is half-closed (i.e. the local side initiated the close).
|
|
29
26
|
*
|
|
@@ -31,8 +28,8 @@ export declare class AdbSocketController implements AdbSocketInfo, ReadableWrita
|
|
|
31
28
|
*/
|
|
32
29
|
get closed(): boolean;
|
|
33
30
|
private _socket;
|
|
34
|
-
get socket():
|
|
35
|
-
constructor(options:
|
|
31
|
+
get socket(): AdbDaemonSocket;
|
|
32
|
+
constructor(options: AdbDaemonSocketConstructionOptions);
|
|
36
33
|
enqueue(data: Uint8Array): Promise<void>;
|
|
37
34
|
ack(): void;
|
|
38
35
|
close(): Promise<void>;
|
|
@@ -46,15 +43,16 @@ export declare class AdbSocketController implements AdbSocketInfo, ReadableWrita
|
|
|
46
43
|
* `socket.writable.abort()`, `socket.writable.getWriter().abort()`,
|
|
47
44
|
* `socket.writable.close()` or `socket.writable.getWriter().close()`.
|
|
48
45
|
*/
|
|
49
|
-
export declare class
|
|
50
|
-
private
|
|
46
|
+
export declare class AdbDaemonSocket implements AdbDaemonSocketInfo, ReadableWritablePair<Uint8Array, Consumable<Uint8Array>> {
|
|
47
|
+
#private;
|
|
51
48
|
get localId(): number;
|
|
52
49
|
get remoteId(): number;
|
|
53
50
|
get localCreated(): boolean;
|
|
54
|
-
get
|
|
51
|
+
get service(): string;
|
|
55
52
|
get readable(): ReadableStream<Uint8Array>;
|
|
56
53
|
get writable(): WritableStream<Consumable<Uint8Array>>;
|
|
57
|
-
|
|
54
|
+
get closed(): boolean;
|
|
55
|
+
constructor(controller: AdbDaemonSocketController);
|
|
58
56
|
close(): Promise<void>;
|
|
59
57
|
}
|
|
60
58
|
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,UAAU,EAEV,cAAc,EACd,oBAAoB,EACpB,cAAc,EACjB,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCACb,SAAQ,mBAAmB;IAC3B,UAAU,EAAE,mBAAmB,CAAC;IAEhC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,qBAAa,yBACT,YACI,mBAAmB,EACnB,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,EACxD,SAAS,EACT,UAAU;;IAEd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAElD,SAAgB,OAAO,EAAG,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAG,MAAM,CAAC;IAClC,SAAgB,YAAY,EAAG,OAAO,CAAC;IACvC,SAAgB,OAAO,EAAG,MAAM,CAAC;IAMjC,IAAW,QAAQ,+BAElB;IAGD,SAAgB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAGjE;;;;OAIG;IACH,IAAW,MAAM,YAEhB;IAED,OAAO,CAAC,OAAO,CAAkB;IACjC,IAAW,MAAM,oBAEhB;gBAEkB,OAAO,EAAE,kCAAkC;IAiEjD,OAAO,CAAC,IAAI,EAAE,UAAU;IAU9B,GAAG;IAIG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO;CAGjB;AAED;;;;;;;GAOG;AACH,qBAAa,eACT,YACI,mBAAmB,EACnB,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;;IAI5D,IAAW,OAAO,IAAI,MAAM,CAE3B;IACD,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,IAAW,YAAY,IAAI,OAAO,CAEjC;IACD,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEhD;IACD,IAAW,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAE5D;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;gBAEkB,UAAU,EAAE,yBAAyB;IAIjD,KAAK;CAGf"}
|