appium-ios-remotexpc 5.18.0 → 5.18.2
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.md +12 -0
- package/build/src/lib/remote-xpc/remote-xpc-framed-transport.d.ts +22 -0
- package/build/src/lib/remote-xpc/remote-xpc-framed-transport.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/remote-xpc-framed-transport.js +77 -16
- package/build/src/lib/remote-xpc/remote-xpc-framed-transport.js.map +1 -1
- package/build/src/lib/remote-xpc/rsd-service-catalog-client.d.ts +6 -0
- package/build/src/lib/remote-xpc/rsd-service-catalog-client.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/rsd-service-catalog-client.js +10 -1
- package/build/src/lib/remote-xpc/rsd-service-catalog-client.js.map +1 -1
- package/build/src/lib/remote-xpc/service-catalog.d.ts +4 -2
- package/build/src/lib/remote-xpc/service-catalog.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/service-catalog.js +30 -16
- package/build/src/lib/remote-xpc/service-catalog.js.map +1 -1
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts +22 -0
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/xpc-protocol.js +30 -0
- package/build/src/lib/remote-xpc/xpc-protocol.js.map +1 -1
- package/build/src/services/ios/core-device/core-device-service.d.ts +5 -5
- package/build/src/services/ios/core-device/core-device-service.d.ts.map +1 -1
- package/build/src/services/ios/core-device/core-device-service.js +34 -9
- package/build/src/services/ios/core-device/core-device-service.js.map +1 -1
- package/package.json +7 -7
- package/src/lib/remote-xpc/remote-xpc-framed-transport.ts +84 -16
- package/src/lib/remote-xpc/rsd-service-catalog-client.ts +11 -1
- package/src/lib/remote-xpc/service-catalog.ts +32 -16
- package/src/lib/remote-xpc/xpc-protocol.ts +37 -0
- package/src/services/ios/core-device/core-device-service.ts +38 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [5.18.2](https://github.com/appium/appium-ios-remotexpc/compare/v5.18.1...v5.18.2) (2026-09-01)
|
|
2
|
+
|
|
3
|
+
### Miscellaneous Chores
|
|
4
|
+
|
|
5
|
+
* **deps:** bump support & other dependencies ([#313](https://github.com/appium/appium-ios-remotexpc/issues/313)) ([51188ca](https://github.com/appium/appium-ios-remotexpc/commit/51188cafc21a6a8f615f1b7442311d9b26d114b1))
|
|
6
|
+
|
|
7
|
+
## [5.18.1](https://github.com/appium/appium-ios-remotexpc/compare/v5.18.0...v5.18.1) (2026-09-01)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **remote-xpc:** propagate XPC decode errors instead of stalling ([#312](https://github.com/appium/appium-ios-remotexpc/issues/312)) ([cc009ef](https://github.com/appium/appium-ios-remotexpc/commit/cc009efead694f57fc6aca5a321f2bac49a909f4))
|
|
12
|
+
|
|
1
13
|
## [5.18.0](https://github.com/appium/appium-ios-remotexpc/compare/v5.17.2...v5.18.0) (2026-09-01)
|
|
2
14
|
|
|
3
15
|
### Features
|
|
@@ -14,6 +14,7 @@ export declare class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
14
14
|
private pendingXpcData;
|
|
15
15
|
private connected;
|
|
16
16
|
private closing;
|
|
17
|
+
private desynced;
|
|
17
18
|
constructor(address: [string, number]);
|
|
18
19
|
get isConnected(): boolean;
|
|
19
20
|
/**
|
|
@@ -30,9 +31,30 @@ export declare class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
30
31
|
sendDataFrame(payload: Buffer, streamId?: number): void;
|
|
31
32
|
close(): Promise<void>;
|
|
32
33
|
private waitForSocketConnect;
|
|
34
|
+
/**
|
|
35
|
+
* Handlers ignore a socket that has since been replaced by a reconnect; a closing
|
|
36
|
+
* socket outlives `close()`, and its late events would otherwise hit the new one.
|
|
37
|
+
*/
|
|
33
38
|
private registerSocketHandlers;
|
|
34
39
|
private handleData;
|
|
40
|
+
/**
|
|
41
|
+
* Reassembles XPC messages for one HTTP/2 stream; streams buffer separately so
|
|
42
|
+
* interleaving cannot fabricate a desync. Framed-but-undecodable messages are
|
|
43
|
+
* skipped, and a retained tail is copied so it cannot pin the parser's buffer.
|
|
44
|
+
*/
|
|
35
45
|
private ingestXpcData;
|
|
46
|
+
/**
|
|
47
|
+
* Latches the whole connection closed: framing alignment is lost and the peer's
|
|
48
|
+
* remaining bytes cannot be trusted on any stream. Teardown starts before the
|
|
49
|
+
* emit so a listener that reconnects synchronously keeps its new socket.
|
|
50
|
+
*/
|
|
51
|
+
private handleDesync;
|
|
52
|
+
/**
|
|
53
|
+
* A message that will not decode is reported on `'decodeError'`, never `'error'`:
|
|
54
|
+
* it is not fatal, the messages behind it still arrive, and an unheard `'error'`
|
|
55
|
+
* would be thrown by Node.
|
|
56
|
+
*/
|
|
57
|
+
private decodeAndEmit;
|
|
36
58
|
private shutdownSocket;
|
|
37
59
|
private resetParsers;
|
|
38
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-xpc-framed-transport.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-framed-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-xpc-framed-transport.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-framed-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAezC,MAAM,WAAW,sCAAsC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAKrC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;;;;OAQG;IACH,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAEK,OAAO,CAAC,OAAO,EAAE,sCAAsC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAO5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,oBAAoB;IAyB5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,UAAU;IA+BlB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA0BrB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,YAAY;CAKrB"}
|
|
@@ -4,7 +4,7 @@ import { getLogger } from '../logger.js';
|
|
|
4
4
|
import { DataFrame } from './handshake-frames.js';
|
|
5
5
|
import Handshake from './handshake.js';
|
|
6
6
|
import { Http2FrameParser, buildWindowUpdateFrames } from './http2-frame-parser.js';
|
|
7
|
-
import { decodeMessage } from './xpc-protocol.js';
|
|
7
|
+
import { decodeMessage, probeXpcFraming } from './xpc-protocol.js';
|
|
8
8
|
const log = getLogger('RemoteXpcFramedTransport');
|
|
9
9
|
const DEFAULT_SOCKET_CLOSE_TIMEOUT_MS = 1000;
|
|
10
10
|
const DEFAULT_SOCKET_END_TIMEOUT_MS = 500;
|
|
@@ -16,9 +16,10 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
16
16
|
address;
|
|
17
17
|
socket = null;
|
|
18
18
|
frameParser = new Http2FrameParser();
|
|
19
|
-
pendingXpcData =
|
|
19
|
+
pendingXpcData = new Map();
|
|
20
20
|
connected = false;
|
|
21
21
|
closing = false;
|
|
22
|
+
desynced = false;
|
|
22
23
|
constructor(address) {
|
|
23
24
|
super();
|
|
24
25
|
this.address = address;
|
|
@@ -104,12 +105,23 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
104
105
|
});
|
|
105
106
|
});
|
|
106
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Handlers ignore a socket that has since been replaced by a reconnect; a closing
|
|
110
|
+
* socket outlives `close()`, and its late events would otherwise hit the new one.
|
|
111
|
+
*/
|
|
107
112
|
registerSocketHandlers(socket) {
|
|
113
|
+
const superseded = () => this.socket !== null && this.socket !== socket;
|
|
108
114
|
socket.on('data', (data) => {
|
|
115
|
+
if (superseded()) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
109
118
|
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data, 'hex');
|
|
110
119
|
this.handleData(chunk);
|
|
111
120
|
});
|
|
112
121
|
socket.on('error', (error) => {
|
|
122
|
+
if (superseded()) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
113
125
|
const wasConnected = this.connected;
|
|
114
126
|
this.connected = false;
|
|
115
127
|
if (this.closing || !wasConnected) {
|
|
@@ -120,6 +132,9 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
120
132
|
this.emit('error', error);
|
|
121
133
|
});
|
|
122
134
|
socket.on('close', () => {
|
|
135
|
+
if (superseded()) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
123
138
|
this.connected = false;
|
|
124
139
|
this.emit('close');
|
|
125
140
|
});
|
|
@@ -140,28 +155,73 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
140
155
|
if (frame.type !== 'data') {
|
|
141
156
|
continue;
|
|
142
157
|
}
|
|
158
|
+
const socket = this.socket;
|
|
159
|
+
if (this.desynced || !socket) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
143
162
|
const { streamId, data, bodyLen } = frame.frame;
|
|
144
163
|
for (const windowUpdate of buildWindowUpdateFrames(streamId, bodyLen)) {
|
|
145
|
-
|
|
164
|
+
socket.write(windowUpdate);
|
|
146
165
|
}
|
|
147
|
-
this.ingestXpcData(data);
|
|
166
|
+
this.ingestXpcData(streamId, data);
|
|
148
167
|
}
|
|
149
168
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Reassembles XPC messages for one HTTP/2 stream; streams buffer separately so
|
|
171
|
+
* interleaving cannot fabricate a desync. Framed-but-undecodable messages are
|
|
172
|
+
* skipped, and a retained tail is copied so it cannot pin the parser's buffer.
|
|
173
|
+
*/
|
|
174
|
+
ingestXpcData(streamId, chunk) {
|
|
175
|
+
if (this.desynced) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const buffered = this.pendingXpcData.get(streamId);
|
|
179
|
+
let pending = buffered ? Buffer.concat([buffered, chunk]) : chunk;
|
|
180
|
+
this.pendingXpcData.delete(streamId);
|
|
153
181
|
while (pending.length > 0) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this.emit('message', message.body);
|
|
159
|
-
}
|
|
182
|
+
const framing = probeXpcFraming(pending);
|
|
183
|
+
if (framing.status === 'incomplete') {
|
|
184
|
+
this.pendingXpcData.set(streamId, Buffer.from(pending));
|
|
185
|
+
return;
|
|
160
186
|
}
|
|
161
|
-
|
|
162
|
-
this.
|
|
187
|
+
if (framing.status === 'desynced') {
|
|
188
|
+
this.handleDesync(framing.reason);
|
|
163
189
|
return;
|
|
164
190
|
}
|
|
191
|
+
const message = pending.subarray(0, framing.byteLength);
|
|
192
|
+
pending = pending.subarray(framing.byteLength);
|
|
193
|
+
this.decodeAndEmit(message);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Latches the whole connection closed: framing alignment is lost and the peer's
|
|
198
|
+
* remaining bytes cannot be trusted on any stream. Teardown starts before the
|
|
199
|
+
* emit so a listener that reconnects synchronously keeps its new socket.
|
|
200
|
+
*/
|
|
201
|
+
handleDesync(reason) {
|
|
202
|
+
this.desynced = true;
|
|
203
|
+
this.connected = false;
|
|
204
|
+
this.close().catch((error) => {
|
|
205
|
+
log.debug(`Failed to close a desynced RemoteXPC transport: ${error}`);
|
|
206
|
+
});
|
|
207
|
+
this.emit('error', new Error(reason));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* A message that will not decode is reported on `'decodeError'`, never `'error'`:
|
|
211
|
+
* it is not fatal, the messages behind it still arrive, and an unheard `'error'`
|
|
212
|
+
* would be thrown by Node.
|
|
213
|
+
*/
|
|
214
|
+
decodeAndEmit(message) {
|
|
215
|
+
let body;
|
|
216
|
+
try {
|
|
217
|
+
body = decodeMessage(message).message.body;
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
this.emit('decodeError', error instanceof Error ? error : new Error(String(error)));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (body) {
|
|
224
|
+
this.emit('message', body);
|
|
165
225
|
}
|
|
166
226
|
}
|
|
167
227
|
shutdownSocket(socket) {
|
|
@@ -206,7 +266,8 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
206
266
|
}
|
|
207
267
|
resetParsers() {
|
|
208
268
|
this.frameParser = new Http2FrameParser();
|
|
209
|
-
this.pendingXpcData
|
|
269
|
+
this.pendingXpcData.clear();
|
|
270
|
+
this.desynced = false;
|
|
210
271
|
}
|
|
211
272
|
}
|
|
212
273
|
//# sourceMappingURL=remote-xpc-framed-transport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-xpc-framed-transport.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-framed-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-xpc-framed-transport.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-framed-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,12 @@ declare class RsdServiceCatalogClient {
|
|
|
52
52
|
*/
|
|
53
53
|
findService(serviceName: string): Service;
|
|
54
54
|
private createConnectSession;
|
|
55
|
+
/**
|
|
56
|
+
* The `'error'` listener is permanent: Node throws an `'error'` that has no
|
|
57
|
+
* listener, and one can still arrive after connect() has settled. `'decodeError'`
|
|
58
|
+
* is a single unreadable message, not a dead connection, so it must not fail the
|
|
59
|
+
* attempt; it logs only the first to stay off the hot path.
|
|
60
|
+
*/
|
|
55
61
|
private registerTransportHandlers;
|
|
56
62
|
private processIncomingMessage;
|
|
57
63
|
private connectTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsd-service-catalog-client.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/rsd-service-catalog-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,sBAAsB,CAAC;AAK9F,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,uCAAuC,QACqC,CAAC;AAC1F,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,QAA0C,CAAC;AAErF,MAAM,WAAW,qCAAqC;IACpD,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,cAAM,uBAAuB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,SAAS,CAAwB;IACzC,4EAA4E;IAC5E,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAU;gBAEhB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IASrC;;;OAGG;IACH,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9B;IAED;;OAEG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,qCAAqC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBzF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;OAGG;IACH,WAAW,IAAI,OAAO,EAAE;IAOxB;;;OAGG;IACH,eAAe,IAAI,OAAO,EAAE;IAI5B;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAUzC,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,yBAAyB;
|
|
1
|
+
{"version":3,"file":"rsd-service-catalog-client.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/rsd-service-catalog-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,sBAAsB,CAAC;AAK9F,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,uCAAuC,QACqC,CAAC;AAC1F,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,QAA0C,CAAC;AAErF,MAAM,WAAW,qCAAqC;IACpD,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,cAAM,uBAAuB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,SAAS,CAAwB;IACzC,4EAA4E;IAC5E,OAAO,CAAC,uBAAuB,CAA6B;IAC5D,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAU;gBAEhB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IASrC;;;OAGG;IACH,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9B;IAED;;OAEG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,qCAAqC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBzF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;OAGG;IACH,WAAW,IAAI,OAAO,EAAE;IAOxB;;;OAGG;IACH,eAAe,IAAI,OAAO,EAAE;IAI5B;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAUzC,OAAO,CAAC,oBAAoB;IA0C5B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,sBAAsB;YAWhB,gBAAgB;IAmB9B,OAAO,CAAC,mCAAmC;YAQ7B,iCAAiC;IAgB/C,OAAO,CAAC,2BAA2B;IASnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,YAAY;CAWrB;AAED,OAAO,EAAC,uBAAuB,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAC,CAAC"}
|
|
@@ -138,14 +138,23 @@ class RsdServiceCatalogClient {
|
|
|
138
138
|
isSettled: () => settled,
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* The `'error'` listener is permanent: Node throws an `'error'` that has no
|
|
143
|
+
* listener, and one can still arrive after connect() has settled. `'decodeError'`
|
|
144
|
+
* is a single unreadable message, not a dead connection, so it must not fail the
|
|
145
|
+
* attempt; it logs only the first to stay off the hot path.
|
|
146
|
+
*/
|
|
141
147
|
registerTransportHandlers(session, transport) {
|
|
142
|
-
transport.
|
|
148
|
+
transport.on('error', (error) => {
|
|
143
149
|
if (!this._isClosing) {
|
|
144
150
|
log.error(`Connection error: ${error}`);
|
|
145
151
|
}
|
|
146
152
|
this._isConnected = false;
|
|
147
153
|
session.settleFailure(error);
|
|
148
154
|
});
|
|
155
|
+
transport.once('decodeError', (error) => {
|
|
156
|
+
log.debug(`Skipped an undecodable RSD message: ${error.message}`);
|
|
157
|
+
});
|
|
149
158
|
transport.on('message', (body) => this.processIncomingMessage(session, body));
|
|
150
159
|
transport.once('close', () => {
|
|
151
160
|
this._isConnected = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsd-service-catalog-client.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/rsd-service-catalog-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rsd-service-catalog-client.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/rsd-service-catalog-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,11 @@ export interface ServicesResponse {
|
|
|
12
12
|
*/
|
|
13
13
|
export declare class ServiceCatalogCollector {
|
|
14
14
|
private previousFrameData;
|
|
15
|
+
private desynced;
|
|
15
16
|
/**
|
|
16
|
-
* Feed one DATA frame payload. Returns the catalog
|
|
17
|
-
*
|
|
17
|
+
* Feed one DATA frame payload. Returns the catalog once a complete XPC message
|
|
18
|
+
* carrying `Services` decodes. Framed-but-undecodable messages are skipped.
|
|
19
|
+
* @throws once the stream desyncs, and on every later call — no payload can resynchronise it
|
|
18
20
|
*/
|
|
19
21
|
ingestDataPayload(chunk: Buffer): ServicesResponse | null;
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,iBAAiB,CAA2B;
|
|
1
|
+
{"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CA+B1D;AAWD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAuBnG"}
|
|
@@ -1,38 +1,52 @@
|
|
|
1
|
-
import { decodeMessage } from './xpc-protocol.js';
|
|
1
|
+
import { decodeMessage, probeXpcFraming } from './xpc-protocol.js';
|
|
2
2
|
/**
|
|
3
3
|
* Reassemble length-prefixed XPC payloads from HTTP/2 DATA frames and extract
|
|
4
4
|
* the service catalog once the full handshake message is available.
|
|
5
5
|
*/
|
|
6
6
|
export class ServiceCatalogCollector {
|
|
7
7
|
previousFrameData = Buffer.alloc(0);
|
|
8
|
+
desynced = false;
|
|
8
9
|
/**
|
|
9
|
-
* Feed one DATA frame payload. Returns the catalog
|
|
10
|
-
*
|
|
10
|
+
* Feed one DATA frame payload. Returns the catalog once a complete XPC message
|
|
11
|
+
* carrying `Services` decodes. Framed-but-undecodable messages are skipped.
|
|
12
|
+
* @throws once the stream desyncs, and on every later call — no payload can resynchronise it
|
|
11
13
|
*/
|
|
12
14
|
ingestDataPayload(chunk) {
|
|
15
|
+
if (this.desynced) {
|
|
16
|
+
throw new Error('XPC stream is desynced');
|
|
17
|
+
}
|
|
13
18
|
let pending = Buffer.concat([this.previousFrameData, chunk]);
|
|
14
19
|
this.previousFrameData = Buffer.alloc(0);
|
|
15
20
|
while (pending.length > 0) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
pending = pending.subarray(bytesConsumed);
|
|
19
|
-
if (message.body === null || message.body === undefined) {
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
const catalog = servicesFromXpcBody(message.body);
|
|
23
|
-
if (catalog) {
|
|
24
|
-
this.previousFrameData = pending;
|
|
25
|
-
return catalog;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
21
|
+
const framing = probeXpcFraming(pending);
|
|
22
|
+
if (framing.status === 'incomplete') {
|
|
29
23
|
this.previousFrameData = pending;
|
|
30
24
|
return null;
|
|
31
25
|
}
|
|
26
|
+
if (framing.status === 'desynced') {
|
|
27
|
+
this.desynced = true;
|
|
28
|
+
throw new Error(framing.reason);
|
|
29
|
+
}
|
|
30
|
+
const message = pending.subarray(0, framing.byteLength);
|
|
31
|
+
pending = pending.subarray(framing.byteLength);
|
|
32
|
+
const catalog = extractCatalog(message);
|
|
33
|
+
if (catalog) {
|
|
34
|
+
this.previousFrameData = pending;
|
|
35
|
+
return catalog;
|
|
36
|
+
}
|
|
32
37
|
}
|
|
33
38
|
return null;
|
|
34
39
|
}
|
|
35
40
|
}
|
|
41
|
+
/** Catalog carried by one complete XPC message; null if it carries none or will not decode. */
|
|
42
|
+
function extractCatalog(message) {
|
|
43
|
+
try {
|
|
44
|
+
return servicesFromXpcBody(decodeMessage(message).message.body);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
36
50
|
/**
|
|
37
51
|
* Build the service list from a decoded RSD handshake body (`peer_info`).
|
|
38
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,17 +13,39 @@ export interface DecodedXpcMessage {
|
|
|
13
13
|
/** Bytes consumed from `buffer` (may be less than `buffer.length`). */
|
|
14
14
|
bytesConsumed: number;
|
|
15
15
|
}
|
|
16
|
+
/** Framing state of the wrapper at the front of a buffer. `desynced` is unrecoverable. */
|
|
17
|
+
export type XpcFramingProbe = {
|
|
18
|
+
status: 'incomplete';
|
|
19
|
+
} | {
|
|
20
|
+
status: 'desynced';
|
|
21
|
+
reason: string;
|
|
22
|
+
} | {
|
|
23
|
+
status: 'ok';
|
|
24
|
+
byteLength: number;
|
|
25
|
+
};
|
|
16
26
|
/**
|
|
17
27
|
* Encodes a message object into an XPC Buffer.
|
|
18
28
|
* A message is an object like:
|
|
19
29
|
* { flags: Number, id: bigint, body: Object|null }
|
|
20
30
|
*/
|
|
21
31
|
export declare function encodeMessage(message: XPCMessage): Buffer;
|
|
32
|
+
/**
|
|
33
|
+
* Upper bound on a declared body length: the initial receive window, which the peer
|
|
34
|
+
* cannot exceed on a stream because WINDOW_UPDATEs go out only for even streams and
|
|
35
|
+
* RemoteXPC uses odd ones. Anything larger is corrupt framing, not a partial read.
|
|
36
|
+
*/
|
|
37
|
+
export declare const MAX_XPC_BODY_SIZE: bigint;
|
|
22
38
|
/**
|
|
23
39
|
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
24
40
|
* @throws if the header is missing, invalid, or the buffer is shorter than the message
|
|
25
41
|
*/
|
|
26
42
|
export declare function getXpcMessageByteLength(buffer: Buffer): number;
|
|
43
|
+
/**
|
|
44
|
+
* Non-throwing framing check: separates "wait for more bytes" from "stream unusable".
|
|
45
|
+
* An oversized declared length is desync, not a partial read — treating it as
|
|
46
|
+
* incomplete would buffer the rest of the stream forever.
|
|
47
|
+
*/
|
|
48
|
+
export declare function probeXpcFraming(buffer: Buffer): XpcFramingProbe;
|
|
27
49
|
/**
|
|
28
50
|
* Decodes an XPC Buffer into a message object.
|
|
29
51
|
* (Keep this function if you plan to handle incoming messages.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xpc-protocol.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,aAAa,EAAW,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"xpc-protocol.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,aAAa,EAAW,MAAM,aAAa,CAAC;AASnE,eAAO,MAAM,SAAS,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAa7C,CAAC;AAGF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GACvB;IAAC,MAAM,EAAE,YAAY,CAAA;CAAC,GACtB;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GACpC;IAAC,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC;AA0GvC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAkCzD;AAGD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAA8D,CAAC;AAE7F;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAiB/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAuC/D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Http2Constants } from './constants.js';
|
|
1
2
|
import { XPCUUID } from './xpc-uuid.js';
|
|
2
3
|
// Constants for XPC protocol.
|
|
3
4
|
const BODY_VERSION = 0x00000005;
|
|
@@ -140,6 +141,12 @@ export function encodeMessage(message) {
|
|
|
140
141
|
return writer.concat();
|
|
141
142
|
}
|
|
142
143
|
const XPC_WRAPPER_HEADER_SIZE = 24;
|
|
144
|
+
/**
|
|
145
|
+
* Upper bound on a declared body length: the initial receive window, which the peer
|
|
146
|
+
* cannot exceed on a stream because WINDOW_UPDATEs go out only for even streams and
|
|
147
|
+
* RemoteXPC uses odd ones. Anything larger is corrupt framing, not a partial read.
|
|
148
|
+
*/
|
|
149
|
+
export const MAX_XPC_BODY_SIZE = BigInt(Http2Constants.DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE);
|
|
143
150
|
/**
|
|
144
151
|
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
145
152
|
* @throws if the header is missing, invalid, or the buffer is shorter than the message
|
|
@@ -159,6 +166,29 @@ export function getXpcMessageByteLength(buffer) {
|
|
|
159
166
|
}
|
|
160
167
|
return total;
|
|
161
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Non-throwing framing check: separates "wait for more bytes" from "stream unusable".
|
|
171
|
+
* An oversized declared length is desync, not a partial read — treating it as
|
|
172
|
+
* incomplete would buffer the rest of the stream forever.
|
|
173
|
+
*/
|
|
174
|
+
export function probeXpcFraming(buffer) {
|
|
175
|
+
if (buffer.length < XPC_WRAPPER_HEADER_SIZE) {
|
|
176
|
+
return { status: 'incomplete' };
|
|
177
|
+
}
|
|
178
|
+
const magic = buffer.readUInt32LE(0);
|
|
179
|
+
if (magic !== WRAPPER_MAGIC) {
|
|
180
|
+
return { status: 'desynced', reason: `Invalid XPC wrapper magic: 0x${magic.toString(16)}` };
|
|
181
|
+
}
|
|
182
|
+
const bodyLength = buffer.readBigUInt64LE(8);
|
|
183
|
+
if (bodyLength > MAX_XPC_BODY_SIZE) {
|
|
184
|
+
return { status: 'desynced', reason: `XPC body length ${bodyLength} exceeds ${MAX_XPC_BODY_SIZE}` };
|
|
185
|
+
}
|
|
186
|
+
const byteLength = XPC_WRAPPER_HEADER_SIZE + Number(bodyLength);
|
|
187
|
+
if (buffer.length < byteLength) {
|
|
188
|
+
return { status: 'incomplete' };
|
|
189
|
+
}
|
|
190
|
+
return { status: 'ok', byteLength };
|
|
191
|
+
}
|
|
162
192
|
/**
|
|
163
193
|
* Decodes an XPC Buffer into a message object.
|
|
164
194
|
* (Keep this function if you plan to handle incoming messages.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xpc-protocol.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xpc-protocol.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,11 +57,11 @@ export declare abstract class CoreDeviceService extends BaseService {
|
|
|
57
57
|
protected getTransport(): Promise<RemoteXpcFramedTransport>;
|
|
58
58
|
private enqueueInvocation;
|
|
59
59
|
/**
|
|
60
|
-
* Creates a transport
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* listener
|
|
64
|
-
*
|
|
60
|
+
* Creates a transport that already carries a permanent `'error'` listener.
|
|
61
|
+
* Attaching it after connect() would leave the handshake window uncovered:
|
|
62
|
+
* frames arriving there can emit `'error'`, and Node throws one that has no
|
|
63
|
+
* listener. Attaching is idempotent, so an override of createTransport() that
|
|
64
|
+
* already attached is not double-wired.
|
|
65
65
|
*/
|
|
66
66
|
private newTransport;
|
|
67
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-device-service.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/core-device/core-device-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,wBAAwB,EAAC,MAAM,wDAAwD,CAAC;AAEhG,OAAO,KAAK,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"core-device-service.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/core-device/core-device-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,wBAAwB,EAAC,MAAM,wDAAwD,CAAC;AAEhG,OAAO,KAAK,EAAC,aAAa,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAgC/C,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa;CAKtD;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,iBAAkB,SAAQ,WAAW;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,SAAS,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAC5D,SAAS,CAAC,aAAa,SAAK;IAE5B,4EAA4E;IAC5E,OAAO,CAAC,WAAW,CAAuC;gBAE9C,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;;OAGG;cACa,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD;;;;OAIG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,aAAa,CAAC;IAI/G;;;;;;OAMG;cACa,MAAM,CACpB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,KAAK,GAAE,aAAkB,EACzB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,QAAQ,CAAC;cAIJ,eAAe,IAAI,OAAO,CAAC,wBAAwB,CAAC;cAOpD,YAAY,IAAI,OAAO,CAAC,wBAAwB,CAAC;YAOnD,iBAAiB;IAuB/B;;;;;;OAMG;YACW,YAAY;IAO1B;;;OAGG;YACW,gBAAgB;YAUhB,cAAc;YAmCd,mBAAmB;IA0BjC,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,eAAe;CA4DxB;AAqDD,eAAe,iBAAiB,CAAC"}
|
|
@@ -5,6 +5,8 @@ import { RemoteXpcFramedTransport } from '../../../lib/remote-xpc/remote-xpc-fra
|
|
|
5
5
|
import { encodeMessage } from '../../../lib/remote-xpc/xpc-protocol.js';
|
|
6
6
|
import { BaseService } from '../base-service.js';
|
|
7
7
|
const log = getLogger('CoreDeviceService');
|
|
8
|
+
/** Transports already carrying the permanent failure loggers. */
|
|
9
|
+
const loggedTransports = new WeakSet();
|
|
8
10
|
const CONNECT_TIMEOUT_MS = 10_000;
|
|
9
11
|
const DEFAULT_INVOKE_TIMEOUT_MS = 30_000;
|
|
10
12
|
/**
|
|
@@ -99,6 +101,7 @@ export class CoreDeviceService extends BaseService {
|
|
|
99
101
|
}
|
|
100
102
|
async createTransport() {
|
|
101
103
|
const transport = new RemoteXpcFramedTransport(await this.resolveServiceAddress(this.serviceName));
|
|
104
|
+
attachTransportLogging(transport);
|
|
102
105
|
await transport.connect({ timeoutMs: CONNECT_TIMEOUT_MS });
|
|
103
106
|
return transport;
|
|
104
107
|
}
|
|
@@ -131,17 +134,15 @@ export class CoreDeviceService extends BaseService {
|
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
136
|
/**
|
|
134
|
-
* Creates a transport
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* listener
|
|
138
|
-
*
|
|
137
|
+
* Creates a transport that already carries a permanent `'error'` listener.
|
|
138
|
+
* Attaching it after connect() would leave the handshake window uncovered:
|
|
139
|
+
* frames arriving there can emit `'error'`, and Node throws one that has no
|
|
140
|
+
* listener. Attaching is idempotent, so an override of createTransport() that
|
|
141
|
+
* already attached is not double-wired.
|
|
139
142
|
*/
|
|
140
143
|
async newTransport() {
|
|
141
144
|
const transport = await this.createTransport();
|
|
142
|
-
transport
|
|
143
|
-
log.debug(`CoreDevice transport error: ${error.message}`);
|
|
144
|
-
});
|
|
145
|
+
attachTransportLogging(transport);
|
|
145
146
|
this.nextMessageId = 1;
|
|
146
147
|
return transport;
|
|
147
148
|
}
|
|
@@ -211,6 +212,7 @@ export class CoreDeviceService extends BaseService {
|
|
|
211
212
|
waitForResponse(transport, timeoutMs, featureIdentifier) {
|
|
212
213
|
return new Promise((resolve, reject) => {
|
|
213
214
|
let settled = false;
|
|
215
|
+
let lastDecodeError;
|
|
214
216
|
const cleanup = () => {
|
|
215
217
|
if (settled) {
|
|
216
218
|
return;
|
|
@@ -218,6 +220,7 @@ export class CoreDeviceService extends BaseService {
|
|
|
218
220
|
settled = true;
|
|
219
221
|
clearTimeout(timer);
|
|
220
222
|
transport.off('message', onMessage);
|
|
223
|
+
transport.off('decodeError', onDecodeError);
|
|
221
224
|
transport.off('error', onError);
|
|
222
225
|
transport.off('close', onClose);
|
|
223
226
|
};
|
|
@@ -229,6 +232,9 @@ export class CoreDeviceService extends BaseService {
|
|
|
229
232
|
cleanup();
|
|
230
233
|
resolve(body);
|
|
231
234
|
};
|
|
235
|
+
const onDecodeError = (error) => {
|
|
236
|
+
lastDecodeError = error;
|
|
237
|
+
};
|
|
232
238
|
const onError = (error) => {
|
|
233
239
|
cleanup();
|
|
234
240
|
reject(error);
|
|
@@ -239,14 +245,33 @@ export class CoreDeviceService extends BaseService {
|
|
|
239
245
|
};
|
|
240
246
|
const timer = setTimeout(() => {
|
|
241
247
|
cleanup();
|
|
242
|
-
|
|
248
|
+
const cause = lastDecodeError ? `; last message was undecodable: ${lastDecodeError.message}` : '';
|
|
249
|
+
reject(new CoreDeviceError(`CoreDevice invocation '${featureIdentifier ?? '<none>'}' timed out after ${timeoutMs}ms${cause}`));
|
|
243
250
|
}, timeoutMs);
|
|
244
251
|
transport.on('message', onMessage);
|
|
252
|
+
transport.on('decodeError', onDecodeError);
|
|
245
253
|
transport.once('error', onError);
|
|
246
254
|
transport.once('close', onClose);
|
|
247
255
|
});
|
|
248
256
|
}
|
|
249
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Attaches the permanent failure listeners once per transport. An `'error'` with
|
|
260
|
+
* no listener is thrown by Node and crashes the process, and fire-and-forget
|
|
261
|
+
* `send()` registers no per-call listener of its own.
|
|
262
|
+
*/
|
|
263
|
+
function attachTransportLogging(transport) {
|
|
264
|
+
if (loggedTransports.has(transport)) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
loggedTransports.add(transport);
|
|
268
|
+
transport.on('error', (error) => {
|
|
269
|
+
log.debug(`CoreDevice transport error: ${error.message}`);
|
|
270
|
+
});
|
|
271
|
+
transport.once('decodeError', (error) => {
|
|
272
|
+
log.debug(`CoreDevice skipped an undecodable message: ${error.message}`);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
250
275
|
/**
|
|
251
276
|
* Builds a descriptive error from a CoreDevice reply that carries no output.
|
|
252
277
|
* The device returns an `NSError`-shaped `CoreDevice.error` whose `userInfo`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-device-service.js","sourceRoot":"","sources":["../../../../../src/services/ios/core-device/core-device-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"core-device-service.js","sourceRoot":"","sources":["../../../../../src/services/ios/core-device/core-device-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-ios-remotexpc",
|
|
3
|
-
"version": "5.18.
|
|
3
|
+
"version": "5.18.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"bugs": {
|
|
@@ -90,16 +90,16 @@
|
|
|
90
90
|
"tunnel-creation": "sudo node scripts/tunnel-creation.mjs"
|
|
91
91
|
},
|
|
92
92
|
"dependencies": {
|
|
93
|
-
"@appium/strongbox": "^
|
|
94
|
-
"@appium/support": "^7.2.
|
|
93
|
+
"@appium/strongbox": "^2.0.0",
|
|
94
|
+
"@appium/support": "^7.2.6",
|
|
95
95
|
"@xmldom/xmldom": "^0.x",
|
|
96
|
-
"appium-ios-tuntap": "^2.0.
|
|
96
|
+
"appium-ios-tuntap": "^2.0.1",
|
|
97
97
|
"async-lock": "^1.4.1",
|
|
98
|
-
"axios": "^1.
|
|
98
|
+
"axios": "^1.18.0",
|
|
99
99
|
"commander": "^14.0.1",
|
|
100
|
-
"minimatch": "^10.
|
|
100
|
+
"minimatch": "^10.2.3",
|
|
101
101
|
"node-devicectl": "^2.0.0",
|
|
102
|
-
"path-to-regexp": "^8.
|
|
102
|
+
"path-to-regexp": "^8.4.0"
|
|
103
103
|
},
|
|
104
104
|
"devDependencies": {
|
|
105
105
|
"@appium/oxc-config": "^1.1.0",
|
|
@@ -2,10 +2,11 @@ import {EventEmitter} from 'node:events';
|
|
|
2
2
|
import net from 'node:net';
|
|
3
3
|
|
|
4
4
|
import {getLogger} from '../logger.js';
|
|
5
|
+
import type {XPCDictionary} from '../types.js';
|
|
5
6
|
import {DataFrame} from './handshake-frames.js';
|
|
6
7
|
import Handshake from './handshake.js';
|
|
7
8
|
import {Http2FrameParser, buildWindowUpdateFrames} from './http2-frame-parser.js';
|
|
8
|
-
import {decodeMessage} from './xpc-protocol.js';
|
|
9
|
+
import {decodeMessage, probeXpcFraming} from './xpc-protocol.js';
|
|
9
10
|
|
|
10
11
|
const log = getLogger('RemoteXpcFramedTransport');
|
|
11
12
|
|
|
@@ -25,9 +26,10 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
25
26
|
private readonly address: [string, number];
|
|
26
27
|
private socket: net.Socket | null = null;
|
|
27
28
|
private frameParser = new Http2FrameParser();
|
|
28
|
-
private pendingXpcData = Buffer
|
|
29
|
+
private pendingXpcData = new Map<number, Buffer>();
|
|
29
30
|
private connected = false;
|
|
30
31
|
private closing = false;
|
|
32
|
+
private desynced = false;
|
|
31
33
|
|
|
32
34
|
constructor(address: [string, number]) {
|
|
33
35
|
super();
|
|
@@ -129,12 +131,24 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
129
131
|
});
|
|
130
132
|
}
|
|
131
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Handlers ignore a socket that has since been replaced by a reconnect; a closing
|
|
136
|
+
* socket outlives `close()`, and its late events would otherwise hit the new one.
|
|
137
|
+
*/
|
|
132
138
|
private registerSocketHandlers(socket: net.Socket): void {
|
|
139
|
+
const superseded = (): boolean => this.socket !== null && this.socket !== socket;
|
|
140
|
+
|
|
133
141
|
socket.on('data', (data: Buffer | string) => {
|
|
142
|
+
if (superseded()) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
134
145
|
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data, 'hex');
|
|
135
146
|
this.handleData(chunk);
|
|
136
147
|
});
|
|
137
148
|
socket.on('error', (error: Error) => {
|
|
149
|
+
if (superseded()) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
138
152
|
const wasConnected = this.connected;
|
|
139
153
|
this.connected = false;
|
|
140
154
|
if (this.closing || !wasConnected) {
|
|
@@ -145,6 +159,9 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
145
159
|
this.emit('error', error);
|
|
146
160
|
});
|
|
147
161
|
socket.on('close', () => {
|
|
162
|
+
if (superseded()) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
148
165
|
this.connected = false;
|
|
149
166
|
this.emit('close');
|
|
150
167
|
});
|
|
@@ -168,29 +185,79 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
168
185
|
continue;
|
|
169
186
|
}
|
|
170
187
|
|
|
188
|
+
const socket = this.socket;
|
|
189
|
+
if (this.desynced || !socket) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
171
193
|
const {streamId, data, bodyLen} = frame.frame;
|
|
172
194
|
for (const windowUpdate of buildWindowUpdateFrames(streamId, bodyLen)) {
|
|
173
|
-
|
|
195
|
+
socket.write(windowUpdate);
|
|
174
196
|
}
|
|
175
|
-
this.ingestXpcData(data);
|
|
197
|
+
this.ingestXpcData(streamId, data);
|
|
176
198
|
}
|
|
177
199
|
}
|
|
178
200
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
201
|
+
/**
|
|
202
|
+
* Reassembles XPC messages for one HTTP/2 stream; streams buffer separately so
|
|
203
|
+
* interleaving cannot fabricate a desync. Framed-but-undecodable messages are
|
|
204
|
+
* skipped, and a retained tail is copied so it cannot pin the parser's buffer.
|
|
205
|
+
*/
|
|
206
|
+
private ingestXpcData(streamId: number, chunk: Buffer): void {
|
|
207
|
+
if (this.desynced) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const buffered = this.pendingXpcData.get(streamId);
|
|
212
|
+
let pending = buffered ? Buffer.concat([buffered, chunk]) : chunk;
|
|
213
|
+
this.pendingXpcData.delete(streamId);
|
|
182
214
|
|
|
183
215
|
while (pending.length > 0) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (message.body) {
|
|
188
|
-
this.emit('message', message.body);
|
|
189
|
-
}
|
|
190
|
-
} catch {
|
|
191
|
-
this.pendingXpcData = pending;
|
|
216
|
+
const framing = probeXpcFraming(pending);
|
|
217
|
+
if (framing.status === 'incomplete') {
|
|
218
|
+
this.pendingXpcData.set(streamId, Buffer.from(pending));
|
|
192
219
|
return;
|
|
193
220
|
}
|
|
221
|
+
if (framing.status === 'desynced') {
|
|
222
|
+
this.handleDesync(framing.reason);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const message = pending.subarray(0, framing.byteLength);
|
|
227
|
+
pending = pending.subarray(framing.byteLength);
|
|
228
|
+
this.decodeAndEmit(message);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Latches the whole connection closed: framing alignment is lost and the peer's
|
|
234
|
+
* remaining bytes cannot be trusted on any stream. Teardown starts before the
|
|
235
|
+
* emit so a listener that reconnects synchronously keeps its new socket.
|
|
236
|
+
*/
|
|
237
|
+
private handleDesync(reason: string): void {
|
|
238
|
+
this.desynced = true;
|
|
239
|
+
this.connected = false;
|
|
240
|
+
this.close().catch((error: unknown) => {
|
|
241
|
+
log.debug(`Failed to close a desynced RemoteXPC transport: ${error}`);
|
|
242
|
+
});
|
|
243
|
+
this.emit('error', new Error(reason));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* A message that will not decode is reported on `'decodeError'`, never `'error'`:
|
|
248
|
+
* it is not fatal, the messages behind it still arrive, and an unheard `'error'`
|
|
249
|
+
* would be thrown by Node.
|
|
250
|
+
*/
|
|
251
|
+
private decodeAndEmit(message: Buffer): void {
|
|
252
|
+
let body: XPCDictionary | null | undefined;
|
|
253
|
+
try {
|
|
254
|
+
body = decodeMessage(message).message.body;
|
|
255
|
+
} catch (error) {
|
|
256
|
+
this.emit('decodeError', error instanceof Error ? error : new Error(String(error)));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (body) {
|
|
260
|
+
this.emit('message', body);
|
|
194
261
|
}
|
|
195
262
|
}
|
|
196
263
|
|
|
@@ -241,6 +308,7 @@ export class RemoteXpcFramedTransport extends EventEmitter {
|
|
|
241
308
|
|
|
242
309
|
private resetParsers(): void {
|
|
243
310
|
this.frameParser = new Http2FrameParser();
|
|
244
|
-
this.pendingXpcData
|
|
311
|
+
this.pendingXpcData.clear();
|
|
312
|
+
this.desynced = false;
|
|
245
313
|
}
|
|
246
314
|
}
|
|
@@ -176,8 +176,14 @@ class RsdServiceCatalogClient {
|
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
/**
|
|
180
|
+
* The `'error'` listener is permanent: Node throws an `'error'` that has no
|
|
181
|
+
* listener, and one can still arrive after connect() has settled. `'decodeError'`
|
|
182
|
+
* is a single unreadable message, not a dead connection, so it must not fail the
|
|
183
|
+
* attempt; it logs only the first to stay off the hot path.
|
|
184
|
+
*/
|
|
179
185
|
private registerTransportHandlers(session: ConnectSession, transport: RemoteXpcFramedTransport): void {
|
|
180
|
-
transport.
|
|
186
|
+
transport.on('error', (error: Error) => {
|
|
181
187
|
if (!this._isClosing) {
|
|
182
188
|
log.error(`Connection error: ${error}`);
|
|
183
189
|
}
|
|
@@ -185,6 +191,10 @@ class RsdServiceCatalogClient {
|
|
|
185
191
|
session.settleFailure(error);
|
|
186
192
|
});
|
|
187
193
|
|
|
194
|
+
transport.once('decodeError', (error: Error) => {
|
|
195
|
+
log.debug(`Skipped an undecodable RSD message: ${error.message}`);
|
|
196
|
+
});
|
|
197
|
+
|
|
188
198
|
transport.on('message', (body) => this.processIncomingMessage(session, body));
|
|
189
199
|
|
|
190
200
|
transport.once('close', () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type {XPCDictionary} from '../types.js';
|
|
2
|
-
import {decodeMessage} from './xpc-protocol.js';
|
|
2
|
+
import {decodeMessage, probeXpcFraming} from './xpc-protocol.js';
|
|
3
3
|
|
|
4
4
|
export interface Service {
|
|
5
5
|
serviceName: string;
|
|
@@ -16,32 +16,39 @@ export interface ServicesResponse {
|
|
|
16
16
|
*/
|
|
17
17
|
export class ServiceCatalogCollector {
|
|
18
18
|
private previousFrameData: Buffer = Buffer.alloc(0);
|
|
19
|
+
private desynced = false;
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
|
-
* Feed one DATA frame payload. Returns the catalog
|
|
22
|
-
*
|
|
22
|
+
* Feed one DATA frame payload. Returns the catalog once a complete XPC message
|
|
23
|
+
* carrying `Services` decodes. Framed-but-undecodable messages are skipped.
|
|
24
|
+
* @throws once the stream desyncs, and on every later call — no payload can resynchronise it
|
|
23
25
|
*/
|
|
24
26
|
ingestDataPayload(chunk: Buffer): ServicesResponse | null {
|
|
27
|
+
if (this.desynced) {
|
|
28
|
+
throw new Error('XPC stream is desynced');
|
|
29
|
+
}
|
|
30
|
+
|
|
25
31
|
let pending = Buffer.concat([this.previousFrameData, chunk]);
|
|
26
32
|
this.previousFrameData = Buffer.alloc(0);
|
|
27
33
|
|
|
28
34
|
while (pending.length > 0) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const framing = probeXpcFraming(pending);
|
|
36
|
+
if (framing.status === 'incomplete') {
|
|
37
|
+
this.previousFrameData = pending;
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
if (framing.status === 'desynced') {
|
|
41
|
+
this.desynced = true;
|
|
42
|
+
throw new Error(framing.reason);
|
|
43
|
+
}
|
|
32
44
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
45
|
+
const message = pending.subarray(0, framing.byteLength);
|
|
46
|
+
pending = pending.subarray(framing.byteLength);
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.previousFrameData = pending;
|
|
40
|
-
return catalog;
|
|
41
|
-
}
|
|
42
|
-
} catch {
|
|
48
|
+
const catalog = extractCatalog(message);
|
|
49
|
+
if (catalog) {
|
|
43
50
|
this.previousFrameData = pending;
|
|
44
|
-
return
|
|
51
|
+
return catalog;
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
54
|
|
|
@@ -49,6 +56,15 @@ export class ServiceCatalogCollector {
|
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
58
|
|
|
59
|
+
/** Catalog carried by one complete XPC message; null if it carries none or will not decode. */
|
|
60
|
+
function extractCatalog(message: Buffer): ServicesResponse | null {
|
|
61
|
+
try {
|
|
62
|
+
return servicesFromXpcBody(decodeMessage(message).message.body);
|
|
63
|
+
} catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
52
68
|
/**
|
|
53
69
|
* Build the service list from a decoded RSD handshake body (`peer_info`).
|
|
54
70
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type {XPCArray, XPCDictionary, XPCValue} from '../types.js';
|
|
2
|
+
import {Http2Constants} from './constants.js';
|
|
2
3
|
import {XPCUUID} from './xpc-uuid.js';
|
|
3
4
|
|
|
4
5
|
// Constants for XPC protocol.
|
|
@@ -35,6 +36,12 @@ export interface DecodedXpcMessage {
|
|
|
35
36
|
bytesConsumed: number;
|
|
36
37
|
}
|
|
37
38
|
|
|
39
|
+
/** Framing state of the wrapper at the front of a buffer. `desynced` is unrecoverable. */
|
|
40
|
+
export type XpcFramingProbe =
|
|
41
|
+
| {status: 'incomplete'}
|
|
42
|
+
| {status: 'desynced'; reason: string}
|
|
43
|
+
| {status: 'ok'; byteLength: number};
|
|
44
|
+
|
|
38
45
|
// A simple binary writer that collects Buffer chunks.
|
|
39
46
|
class Writer {
|
|
40
47
|
private chunks: Buffer[] = [];
|
|
@@ -181,6 +188,12 @@ export function encodeMessage(message: XPCMessage): Buffer {
|
|
|
181
188
|
}
|
|
182
189
|
|
|
183
190
|
const XPC_WRAPPER_HEADER_SIZE = 24;
|
|
191
|
+
/**
|
|
192
|
+
* Upper bound on a declared body length: the initial receive window, which the peer
|
|
193
|
+
* cannot exceed on a stream because WINDOW_UPDATEs go out only for even streams and
|
|
194
|
+
* RemoteXPC uses odd ones. Anything larger is corrupt framing, not a partial read.
|
|
195
|
+
*/
|
|
196
|
+
export const MAX_XPC_BODY_SIZE = BigInt(Http2Constants.DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE);
|
|
184
197
|
|
|
185
198
|
/**
|
|
186
199
|
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
@@ -202,6 +215,30 @@ export function getXpcMessageByteLength(buffer: Buffer): number {
|
|
|
202
215
|
return total;
|
|
203
216
|
}
|
|
204
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Non-throwing framing check: separates "wait for more bytes" from "stream unusable".
|
|
220
|
+
* An oversized declared length is desync, not a partial read — treating it as
|
|
221
|
+
* incomplete would buffer the rest of the stream forever.
|
|
222
|
+
*/
|
|
223
|
+
export function probeXpcFraming(buffer: Buffer): XpcFramingProbe {
|
|
224
|
+
if (buffer.length < XPC_WRAPPER_HEADER_SIZE) {
|
|
225
|
+
return {status: 'incomplete'};
|
|
226
|
+
}
|
|
227
|
+
const magic = buffer.readUInt32LE(0);
|
|
228
|
+
if (magic !== WRAPPER_MAGIC) {
|
|
229
|
+
return {status: 'desynced', reason: `Invalid XPC wrapper magic: 0x${magic.toString(16)}`};
|
|
230
|
+
}
|
|
231
|
+
const bodyLength = buffer.readBigUInt64LE(8);
|
|
232
|
+
if (bodyLength > MAX_XPC_BODY_SIZE) {
|
|
233
|
+
return {status: 'desynced', reason: `XPC body length ${bodyLength} exceeds ${MAX_XPC_BODY_SIZE}`};
|
|
234
|
+
}
|
|
235
|
+
const byteLength = XPC_WRAPPER_HEADER_SIZE + Number(bodyLength);
|
|
236
|
+
if (buffer.length < byteLength) {
|
|
237
|
+
return {status: 'incomplete'};
|
|
238
|
+
}
|
|
239
|
+
return {status: 'ok', byteLength};
|
|
240
|
+
}
|
|
241
|
+
|
|
205
242
|
/**
|
|
206
243
|
* Decodes an XPC Buffer into a message object.
|
|
207
244
|
* (Keep this function if you plan to handle incoming messages.)
|
|
@@ -9,6 +9,9 @@ import {BaseService} from '../base-service.js';
|
|
|
9
9
|
|
|
10
10
|
const log = getLogger('CoreDeviceService');
|
|
11
11
|
|
|
12
|
+
/** Transports already carrying the permanent failure loggers. */
|
|
13
|
+
const loggedTransports = new WeakSet<RemoteXpcFramedTransport>();
|
|
14
|
+
|
|
12
15
|
const CONNECT_TIMEOUT_MS = 10_000;
|
|
13
16
|
const DEFAULT_INVOKE_TIMEOUT_MS = 30_000;
|
|
14
17
|
|
|
@@ -132,6 +135,7 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
132
135
|
|
|
133
136
|
protected async createTransport(): Promise<RemoteXpcFramedTransport> {
|
|
134
137
|
const transport = new RemoteXpcFramedTransport(await this.resolveServiceAddress(this.serviceName));
|
|
138
|
+
attachTransportLogging(transport);
|
|
135
139
|
await transport.connect({timeoutMs: CONNECT_TIMEOUT_MS});
|
|
136
140
|
return transport;
|
|
137
141
|
}
|
|
@@ -167,17 +171,15 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
167
171
|
}
|
|
168
172
|
|
|
169
173
|
/**
|
|
170
|
-
* Creates a transport
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* listener
|
|
174
|
-
*
|
|
174
|
+
* Creates a transport that already carries a permanent `'error'` listener.
|
|
175
|
+
* Attaching it after connect() would leave the handshake window uncovered:
|
|
176
|
+
* frames arriving there can emit `'error'`, and Node throws one that has no
|
|
177
|
+
* listener. Attaching is idempotent, so an override of createTransport() that
|
|
178
|
+
* already attached is not double-wired.
|
|
175
179
|
*/
|
|
176
180
|
private async newTransport(): Promise<RemoteXpcFramedTransport> {
|
|
177
181
|
const transport = await this.createTransport();
|
|
178
|
-
transport
|
|
179
|
-
log.debug(`CoreDevice transport error: ${error.message}`);
|
|
180
|
-
});
|
|
182
|
+
attachTransportLogging(transport);
|
|
181
183
|
this.nextMessageId = 1;
|
|
182
184
|
return transport;
|
|
183
185
|
}
|
|
@@ -286,6 +288,7 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
286
288
|
): Promise<XPCDictionary> {
|
|
287
289
|
return new Promise<XPCDictionary>((resolve, reject) => {
|
|
288
290
|
let settled = false;
|
|
291
|
+
let lastDecodeError: Error | undefined;
|
|
289
292
|
|
|
290
293
|
const cleanup = (): void => {
|
|
291
294
|
if (settled) {
|
|
@@ -294,6 +297,7 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
294
297
|
settled = true;
|
|
295
298
|
clearTimeout(timer);
|
|
296
299
|
transport.off('message', onMessage);
|
|
300
|
+
transport.off('decodeError', onDecodeError);
|
|
297
301
|
transport.off('error', onError);
|
|
298
302
|
transport.off('close', onClose);
|
|
299
303
|
};
|
|
@@ -307,6 +311,10 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
307
311
|
resolve(body);
|
|
308
312
|
};
|
|
309
313
|
|
|
314
|
+
const onDecodeError = (error: Error): void => {
|
|
315
|
+
lastDecodeError = error;
|
|
316
|
+
};
|
|
317
|
+
|
|
310
318
|
const onError = (error: Error): void => {
|
|
311
319
|
cleanup();
|
|
312
320
|
reject(error);
|
|
@@ -319,20 +327,41 @@ export abstract class CoreDeviceService extends BaseService {
|
|
|
319
327
|
|
|
320
328
|
const timer = setTimeout(() => {
|
|
321
329
|
cleanup();
|
|
330
|
+
const cause = lastDecodeError ? `; last message was undecodable: ${lastDecodeError.message}` : '';
|
|
322
331
|
reject(
|
|
323
332
|
new CoreDeviceError(
|
|
324
|
-
`CoreDevice invocation '${featureIdentifier ?? '<none>'}' timed out after ${timeoutMs}ms`,
|
|
333
|
+
`CoreDevice invocation '${featureIdentifier ?? '<none>'}' timed out after ${timeoutMs}ms${cause}`,
|
|
325
334
|
),
|
|
326
335
|
);
|
|
327
336
|
}, timeoutMs);
|
|
328
337
|
|
|
329
338
|
transport.on('message', onMessage);
|
|
339
|
+
transport.on('decodeError', onDecodeError);
|
|
330
340
|
transport.once('error', onError);
|
|
331
341
|
transport.once('close', onClose);
|
|
332
342
|
});
|
|
333
343
|
}
|
|
334
344
|
}
|
|
335
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Attaches the permanent failure listeners once per transport. An `'error'` with
|
|
348
|
+
* no listener is thrown by Node and crashes the process, and fire-and-forget
|
|
349
|
+
* `send()` registers no per-call listener of its own.
|
|
350
|
+
*/
|
|
351
|
+
function attachTransportLogging(transport: RemoteXpcFramedTransport): void {
|
|
352
|
+
if (loggedTransports.has(transport)) {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
loggedTransports.add(transport);
|
|
356
|
+
|
|
357
|
+
transport.on('error', (error: Error) => {
|
|
358
|
+
log.debug(`CoreDevice transport error: ${error.message}`);
|
|
359
|
+
});
|
|
360
|
+
transport.once('decodeError', (error: Error) => {
|
|
361
|
+
log.debug(`CoreDevice skipped an undecodable message: ${error.message}`);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
|
|
336
365
|
/**
|
|
337
366
|
* Builds a descriptive error from a CoreDevice reply that carries no output.
|
|
338
367
|
* The device returns an `NSError`-shaped `CoreDevice.error` whose `userInfo`
|