appium-ios-remotexpc 2.0.0 → 2.0.1
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 +6 -0
- package/build/src/lib/remote-xpc/http2-frame-parser.d.ts +23 -0
- package/build/src/lib/remote-xpc/http2-frame-parser.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/http2-frame-parser.js +70 -0
- package/build/src/lib/remote-xpc/http2-frame-parser.js.map +1 -0
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts +3 -9
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/remote-xpc-connection.js +28 -99
- package/build/src/lib/remote-xpc/remote-xpc-connection.js.map +1 -1
- package/build/src/lib/remote-xpc/service-catalog.d.ts +25 -0
- package/build/src/lib/remote-xpc/service-catalog.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/service-catalog.js +62 -0
- package/build/src/lib/remote-xpc/service-catalog.js.map +1 -0
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts +11 -1
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/xpc-protocol.js +42 -6
- package/build/src/lib/remote-xpc/xpc-protocol.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/remote-xpc/http2-frame-parser.ts +100 -0
- package/src/lib/remote-xpc/remote-xpc-connection.ts +46 -140
- package/src/lib/remote-xpc/service-catalog.ts +85 -0
- package/src/lib/remote-xpc/xpc-protocol.ts +52 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [2.0.1](https://github.com/appium/appium-ios-remotexpc/compare/v2.0.0...v2.0.1) (2026-05-21)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* Partial XPC services discovery ([#218](https://github.com/appium/appium-ios-remotexpc/issues/218)) ([d173b70](https://github.com/appium/appium-ios-remotexpc/commit/d173b7029fc51c32c2941bcdf9886b9310cc4eef))
|
|
6
|
+
|
|
1
7
|
## [2.0.0](https://github.com/appium/appium-ios-remotexpc/compare/v1.1.13...v2.0.0) (2026-05-21)
|
|
2
8
|
|
|
3
9
|
### ⚠ BREAKING CHANGES
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ParsedDataFrame {
|
|
2
|
+
readonly streamId: number;
|
|
3
|
+
readonly data: Buffer;
|
|
4
|
+
readonly bodyLen: number;
|
|
5
|
+
}
|
|
6
|
+
export type ParsedFrame = {
|
|
7
|
+
readonly type: 'data';
|
|
8
|
+
readonly frame: ParsedDataFrame;
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: 'other';
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Incrementally parse HTTP/2 frames from a byte stream (RFC 7540).
|
|
14
|
+
*/
|
|
15
|
+
export declare class Http2FrameParser {
|
|
16
|
+
private buffer;
|
|
17
|
+
append(chunk: Buffer): ParsedFrame[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Emit WINDOW_UPDATE frames for even-numbered streams, matching `remoted` behavior.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildWindowUpdateFrames(streamId: number, increment: number): Buffer[];
|
|
23
|
+
//# sourceMappingURL=http2-frame-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http2-frame-parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/http2-frame-parser.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IAEzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAmBrC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAQV"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { InvalidDataError, WindowUpdateFrame } from './handshake-frames.js';
|
|
2
|
+
const FRAME_HEADER_SIZE = 9;
|
|
3
|
+
const FRAME_TYPE_DATA = 0x00;
|
|
4
|
+
const FLAG_PADDED = 0x08;
|
|
5
|
+
/**
|
|
6
|
+
* Incrementally parse HTTP/2 frames from a byte stream (RFC 7540).
|
|
7
|
+
*/
|
|
8
|
+
export class Http2FrameParser {
|
|
9
|
+
buffer = Buffer.alloc(0);
|
|
10
|
+
append(chunk) {
|
|
11
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
12
|
+
const frames = [];
|
|
13
|
+
while (this.buffer.length >= FRAME_HEADER_SIZE) {
|
|
14
|
+
const length = (this.buffer[0] << 16) | (this.buffer[1] << 8) | this.buffer[2];
|
|
15
|
+
const totalSize = FRAME_HEADER_SIZE + length;
|
|
16
|
+
if (this.buffer.length < totalSize) {
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
const frameBuffer = this.buffer.subarray(0, totalSize);
|
|
20
|
+
this.buffer = this.buffer.subarray(totalSize);
|
|
21
|
+
frames.push(parseFrame(frameBuffer));
|
|
22
|
+
}
|
|
23
|
+
return frames;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Emit WINDOW_UPDATE frames for even-numbered streams, matching `remoted` behavior.
|
|
28
|
+
*/
|
|
29
|
+
export function buildWindowUpdateFrames(streamId, increment) {
|
|
30
|
+
if (streamId % 2 !== 0 || increment <= 0) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return [
|
|
34
|
+
new WindowUpdateFrame(0, increment).serialize(),
|
|
35
|
+
new WindowUpdateFrame(streamId, increment).serialize(),
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
function parseFrame(buffer) {
|
|
39
|
+
const length = (buffer[0] << 16) | (buffer[1] << 8) | buffer[2];
|
|
40
|
+
const type = buffer[3];
|
|
41
|
+
const flags = buffer[4];
|
|
42
|
+
const streamId = buffer.readUInt32BE(5) & 0x7fffffff;
|
|
43
|
+
const body = buffer.subarray(FRAME_HEADER_SIZE, FRAME_HEADER_SIZE + length);
|
|
44
|
+
if (type !== FRAME_TYPE_DATA) {
|
|
45
|
+
return { type: 'other' };
|
|
46
|
+
}
|
|
47
|
+
const data = stripDataFramePadding(body, flags);
|
|
48
|
+
return {
|
|
49
|
+
type: 'data',
|
|
50
|
+
frame: { streamId, data, bodyLen: length },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Strip HTTP/2 DATA frame padding (RFC 7540 §6.1).
|
|
55
|
+
* @throws {InvalidDataError} when padding length is invalid
|
|
56
|
+
*/
|
|
57
|
+
function stripDataFramePadding(body, flags) {
|
|
58
|
+
if (!(flags & FLAG_PADDED)) {
|
|
59
|
+
return body;
|
|
60
|
+
}
|
|
61
|
+
if (body.length === 0) {
|
|
62
|
+
throw new InvalidDataError('PROTOCOL_ERROR: PADDED DATA frame has empty payload');
|
|
63
|
+
}
|
|
64
|
+
const padLength = body.readUInt8(0);
|
|
65
|
+
if (padLength >= body.length) {
|
|
66
|
+
throw new InvalidDataError('PROTOCOL_ERROR: Padding exceeds frame size');
|
|
67
|
+
}
|
|
68
|
+
return body.subarray(1, body.length - padLength);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=http2-frame-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http2-frame-parser.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/http2-frame-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { type Service, type ServicesResponse } from './service-catalog.js';
|
|
1
2
|
/** Max time to wait for the TCP socket to connect. */
|
|
2
3
|
export declare const CONNECTION_CONNECT_TIMEOUT_MS = 3000;
|
|
3
4
|
/**
|
|
4
5
|
* Default max time for one connect attempt (TCP + handshake + service discovery).
|
|
5
|
-
*
|
|
6
|
+
* Sum of connect, handshake delay, and post-handshake service wait.
|
|
6
7
|
*/
|
|
7
8
|
export declare const CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS: number;
|
|
8
9
|
/** TunnelManager retry budget; never shorter than a single connect attempt. */
|
|
@@ -11,13 +12,6 @@ export interface RemoteXpcConnectOptions {
|
|
|
11
12
|
/** Max time for this connect attempt (TCP + handshake + services). */
|
|
12
13
|
timeoutMs?: number;
|
|
13
14
|
}
|
|
14
|
-
interface Service {
|
|
15
|
-
serviceName: string;
|
|
16
|
-
port: string;
|
|
17
|
-
}
|
|
18
|
-
interface ServicesResponse {
|
|
19
|
-
services: Service[];
|
|
20
|
-
}
|
|
21
15
|
declare class RemoteXpcConnection {
|
|
22
16
|
private readonly _address;
|
|
23
17
|
private _socket;
|
|
@@ -62,7 +56,7 @@ declare class RemoteXpcConnection {
|
|
|
62
56
|
private createConnectSession;
|
|
63
57
|
private createConnectSocket;
|
|
64
58
|
private registerConnectSocketHandlers;
|
|
65
|
-
private
|
|
59
|
+
private processIncomingData;
|
|
66
60
|
private onConnectSocketReady;
|
|
67
61
|
private performHandshake;
|
|
68
62
|
private schedulePostHandshakeServiceTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-xpc-connection.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-connection.ts"],"names":[],"mappings":"AAQA,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"remote-xpc-connection.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-connection.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAK9B,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,uCAAuC,QAGrB,CAAC;AAChC,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,QACD,CAAC;AAK1C,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAwB;IAC1C,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;IAUrC;;;OAGG;IACH,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9B;IAED;;;OAGG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyB3E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;;OAGG;IACH,WAAW,IAAI,OAAO,EAAE;IAOxB;;;OAGG;IACH,eAAe,IAAI,OAAO,EAAE;IAI5B;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAYzC,OAAO,CAAC,oBAAoB;IA4C5B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,6BAA6B;IAyCrC,OAAO,CAAC,mBAAmB;YAqCb,oBAAoB;YAgBpB,gBAAgB;IAU9B,OAAO,CAAC,mCAAmC;YAQ7B,iCAAiC;IAkB/C,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,cAAc;IAiDtB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,YAAY;CAcrB;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import net from 'node:net';
|
|
2
2
|
import { getLogger } from '../logger.js';
|
|
3
3
|
import Handshake from './handshake.js';
|
|
4
|
+
import { Http2FrameParser, buildWindowUpdateFrames, } from './http2-frame-parser.js';
|
|
5
|
+
import { ServiceCatalogCollector, } from './service-catalog.js';
|
|
4
6
|
const log = getLogger('RemoteXpcConnection');
|
|
5
7
|
// Timeout constants
|
|
6
8
|
/** Max time to wait for the TCP socket to connect. */
|
|
@@ -8,15 +10,13 @@ export const CONNECTION_CONNECT_TIMEOUT_MS = 3_000;
|
|
|
8
10
|
const HANDSHAKE_DELAY_MS = 100;
|
|
9
11
|
/** Wait for service list after handshake before failing the connect attempt. */
|
|
10
12
|
const SERVICE_AFTER_HANDSHAKE_TIMEOUT_MS = 10_000;
|
|
11
|
-
/** Resolve with partial data if service parsing stalls mid-stream. */
|
|
12
|
-
const SERVICE_EXTRACTION_TIMEOUT_MS = 5_000;
|
|
13
13
|
/**
|
|
14
14
|
* Default max time for one connect attempt (TCP + handshake + service discovery).
|
|
15
|
-
*
|
|
15
|
+
* Sum of connect, handshake delay, and post-handshake service wait.
|
|
16
16
|
*/
|
|
17
|
-
export const CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS =
|
|
17
|
+
export const CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS = SERVICE_AFTER_HANDSHAKE_TIMEOUT_MS +
|
|
18
18
|
HANDSHAKE_DELAY_MS +
|
|
19
|
-
CONNECTION_CONNECT_TIMEOUT_MS
|
|
19
|
+
CONNECTION_CONNECT_TIMEOUT_MS;
|
|
20
20
|
/** TunnelManager retry budget; never shorter than a single connect attempt. */
|
|
21
21
|
export const CONNECTION_OVERALL_TIMEOUT_MS = CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS;
|
|
22
22
|
const SOCKET_CLOSE_TIMEOUT_MS = 1000; // 1 second
|
|
@@ -115,13 +115,8 @@ class RemoteXpcConnection {
|
|
|
115
115
|
}
|
|
116
116
|
createConnectSession(operationTimeoutMs, resolve, reject) {
|
|
117
117
|
let settled = false;
|
|
118
|
-
let partialExtractionTimer;
|
|
119
118
|
const clearAllTimers = () => {
|
|
120
119
|
clearTimeout(operationTimer);
|
|
121
|
-
if (partialExtractionTimer) {
|
|
122
|
-
clearTimeout(partialExtractionTimer);
|
|
123
|
-
partialExtractionTimer = undefined;
|
|
124
|
-
}
|
|
125
120
|
};
|
|
126
121
|
const settleSuccess = (response) => {
|
|
127
122
|
if (settled) {
|
|
@@ -148,9 +143,6 @@ class RemoteXpcConnection {
|
|
|
148
143
|
settleSuccess,
|
|
149
144
|
settleFailure,
|
|
150
145
|
isSettled: () => settled,
|
|
151
|
-
trackPartialExtractionTimer: (timer) => {
|
|
152
|
-
partialExtractionTimer = timer;
|
|
153
|
-
},
|
|
154
146
|
};
|
|
155
147
|
}
|
|
156
148
|
createConnectSocket() {
|
|
@@ -163,20 +155,8 @@ class RemoteXpcConnection {
|
|
|
163
155
|
});
|
|
164
156
|
}
|
|
165
157
|
registerConnectSocketHandlers(session, socket) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const schedulePartialExtractionTimeout = () => {
|
|
169
|
-
if (partialExtractionTimer) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
partialExtractionTimer = setTimeout(() => {
|
|
173
|
-
partialExtractionTimer = undefined;
|
|
174
|
-
log.warn('Service extraction timeout reached, resolving with current data');
|
|
175
|
-
const finalResponse = extractServices(accumulatedData.toString('utf8'));
|
|
176
|
-
session.settleSuccess(finalResponse);
|
|
177
|
-
}, SERVICE_EXTRACTION_TIMEOUT_MS);
|
|
178
|
-
session.trackPartialExtractionTimer(partialExtractionTimer);
|
|
179
|
-
};
|
|
158
|
+
const frameParser = new Http2FrameParser();
|
|
159
|
+
const catalogCollector = new ServiceCatalogCollector();
|
|
180
160
|
socket.once('error', (error) => {
|
|
181
161
|
if (!this._isClosing) {
|
|
182
162
|
log.error(`Connection error: ${error}`);
|
|
@@ -185,11 +165,8 @@ class RemoteXpcConnection {
|
|
|
185
165
|
session.settleFailure(error);
|
|
186
166
|
});
|
|
187
167
|
socket.on('data', (data) => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
accumulatedData = Buffer.concat([accumulatedData, chunk]);
|
|
191
|
-
}
|
|
192
|
-
this.tryResolveServicesFromPayload(session, accumulatedData, schedulePartialExtractionTimeout);
|
|
168
|
+
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data, 'hex');
|
|
169
|
+
this.processIncomingData(session, socket, frameParser, catalogCollector, chunk);
|
|
193
170
|
});
|
|
194
171
|
socket.once('close', () => {
|
|
195
172
|
this._isConnected = false;
|
|
@@ -201,21 +178,31 @@ class RemoteXpcConnection {
|
|
|
201
178
|
void this.onConnectSocketReady(session, socket);
|
|
202
179
|
});
|
|
203
180
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
if (!dataStr.includes('com.apple') || !dataStr.includes('Port')) {
|
|
181
|
+
processIncomingData(session, socket, frameParser, catalogCollector, chunk) {
|
|
182
|
+
if (session.isSettled()) {
|
|
207
183
|
return;
|
|
208
184
|
}
|
|
185
|
+
let frames;
|
|
209
186
|
try {
|
|
210
|
-
|
|
211
|
-
|
|
187
|
+
frames = frameParser.append(chunk);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
session.settleFailure(error);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
for (const frame of frames) {
|
|
194
|
+
if (frame.type !== 'data') {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const { streamId, data, bodyLen } = frame.frame;
|
|
198
|
+
for (const windowUpdate of buildWindowUpdateFrames(streamId, bodyLen)) {
|
|
199
|
+
socket.write(windowUpdate);
|
|
200
|
+
}
|
|
201
|
+
const servicesResponse = catalogCollector.ingestDataPayload(data);
|
|
202
|
+
if (servicesResponse) {
|
|
212
203
|
session.settleSuccess(servicesResponse);
|
|
213
204
|
return;
|
|
214
205
|
}
|
|
215
|
-
schedulePartialExtractionTimeout();
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
log.warn(`Error extracting services: ${error}, continuing to collect data`);
|
|
219
206
|
}
|
|
220
207
|
}
|
|
221
208
|
async onConnectSocketReady(session, socket) {
|
|
@@ -355,63 +342,5 @@ class RemoteXpcConnection {
|
|
|
355
342
|
}
|
|
356
343
|
}
|
|
357
344
|
}
|
|
358
|
-
/**
|
|
359
|
-
* Extract services from the response
|
|
360
|
-
* @param response The response string to parse
|
|
361
|
-
* @returns Object containing the extracted services
|
|
362
|
-
*/
|
|
363
|
-
function extractServices(response) {
|
|
364
|
-
// More robust regex that handles various formats of service names and port specifications
|
|
365
|
-
const serviceRegex = /com\.apple(?:\.[\w-]+)+/g;
|
|
366
|
-
const portRegex = /Port[^0-9]*(\d+)/g;
|
|
367
|
-
// First, collect all service names
|
|
368
|
-
const serviceMatches = [];
|
|
369
|
-
let match;
|
|
370
|
-
while ((match = serviceRegex.exec(response)) !== null) {
|
|
371
|
-
serviceMatches.push({ value: match[0], index: match.index });
|
|
372
|
-
}
|
|
373
|
-
// Then, collect all port numbers
|
|
374
|
-
const portMatches = [];
|
|
375
|
-
while ((match = portRegex.exec(response)) !== null) {
|
|
376
|
-
if (match[1]) {
|
|
377
|
-
// Ensure we have a captured port number
|
|
378
|
-
portMatches.push({ value: match[1], index: match.index });
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
// Sort both arrays by index to maintain order
|
|
382
|
-
serviceMatches.sort((a, b) => a.index - b.index);
|
|
383
|
-
portMatches.sort((a, b) => a.index - b.index);
|
|
384
|
-
// Create a mapping of services to ports
|
|
385
|
-
const services = [];
|
|
386
|
-
// Assign a port to each service based on proximity in the response
|
|
387
|
-
for (let i = 0; i < serviceMatches.length; i++) {
|
|
388
|
-
const serviceName = serviceMatches[i].value;
|
|
389
|
-
const serviceIndex = serviceMatches[i].index;
|
|
390
|
-
// Find the closest port after this service
|
|
391
|
-
let closestPort = '';
|
|
392
|
-
let closestDistance = Number.MAX_SAFE_INTEGER;
|
|
393
|
-
for (const portMatch of portMatches) {
|
|
394
|
-
// Only consider ports that come after the service in the response
|
|
395
|
-
if (portMatch.index > serviceIndex) {
|
|
396
|
-
const distance = portMatch.index - serviceIndex;
|
|
397
|
-
// If this port is closer than the current closest, update
|
|
398
|
-
if (distance < closestDistance) {
|
|
399
|
-
closestDistance = distance;
|
|
400
|
-
closestPort = portMatch.value;
|
|
401
|
-
// If the port is very close (within 200 chars), we can be confident it's the right one
|
|
402
|
-
if (distance < 200) {
|
|
403
|
-
break;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
// Add the service with its port (or empty string if no port found)
|
|
409
|
-
services.push({
|
|
410
|
-
serviceName,
|
|
411
|
-
port: closestPort || '',
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
return { services };
|
|
415
|
-
}
|
|
416
345
|
export { RemoteXpcConnection };
|
|
417
346
|
//# sourceMappingURL=remote-xpc-connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-xpc-connection.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-xpc-connection.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { XPCDictionary } from '../types.js';
|
|
2
|
+
export interface Service {
|
|
3
|
+
serviceName: string;
|
|
4
|
+
port: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ServicesResponse {
|
|
7
|
+
services: Service[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Reassemble length-prefixed XPC payloads from HTTP/2 DATA frames and extract
|
|
11
|
+
* the service catalog once the full handshake message is available.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ServiceCatalogCollector {
|
|
14
|
+
private previousFrameData;
|
|
15
|
+
/**
|
|
16
|
+
* Feed one DATA frame payload. Returns the catalog when a complete XPC
|
|
17
|
+
* message containing `Services` has been decoded.
|
|
18
|
+
*/
|
|
19
|
+
ingestDataPayload(chunk: Buffer): ServicesResponse | null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build the service list from a decoded RSD handshake body (`peer_info`).
|
|
23
|
+
*/
|
|
24
|
+
export declare function servicesFromXpcBody(body: XPCDictionary | null | undefined): ServicesResponse | null;
|
|
25
|
+
//# sourceMappingURL=service-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,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;IAEpD;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CA0B1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACrC,gBAAgB,GAAG,IAAI,CA4BzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { decodeMessage } from './xpc-protocol.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reassemble length-prefixed XPC payloads from HTTP/2 DATA frames and extract
|
|
4
|
+
* the service catalog once the full handshake message is available.
|
|
5
|
+
*/
|
|
6
|
+
export class ServiceCatalogCollector {
|
|
7
|
+
previousFrameData = Buffer.alloc(0);
|
|
8
|
+
/**
|
|
9
|
+
* Feed one DATA frame payload. Returns the catalog when a complete XPC
|
|
10
|
+
* message containing `Services` has been decoded.
|
|
11
|
+
*/
|
|
12
|
+
ingestDataPayload(chunk) {
|
|
13
|
+
let pending = Buffer.concat([this.previousFrameData, chunk]);
|
|
14
|
+
this.previousFrameData = Buffer.alloc(0);
|
|
15
|
+
while (pending.length > 0) {
|
|
16
|
+
try {
|
|
17
|
+
const { message, bytesConsumed } = decodeMessage(pending);
|
|
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 {
|
|
29
|
+
this.previousFrameData = pending;
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build the service list from a decoded RSD handshake body (`peer_info`).
|
|
38
|
+
*/
|
|
39
|
+
export function servicesFromXpcBody(body) {
|
|
40
|
+
if (!body || typeof body !== 'object' || Array.isArray(body)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const servicesDict = body.Services;
|
|
44
|
+
if (!servicesDict ||
|
|
45
|
+
typeof servicesDict !== 'object' ||
|
|
46
|
+
Array.isArray(servicesDict)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const services = [];
|
|
50
|
+
for (const [serviceName, info] of Object.entries(servicesDict)) {
|
|
51
|
+
if (!info || typeof info !== 'object' || Array.isArray(info)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const portValue = info.Port;
|
|
55
|
+
services.push({
|
|
56
|
+
serviceName,
|
|
57
|
+
port: portValue !== undefined && portValue !== null ? String(portValue) : '',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return services.length > 0 ? { services } : null;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=service-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/service-catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWlD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAC1B,iBAAiB,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpD;;;OAGG;IACH,iBAAiB,CAAC,KAAa;QAC7B,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC1D,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAE1C,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxD,SAAS;gBACX,CAAC;gBAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;oBACjC,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAsC;IAEtC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnC,IACE,CAAC,YAAY;QACb,OAAO,YAAY,KAAK,QAAQ;QAChC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAI,IAAsB,CAAC,IAAI,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC;YACZ,WAAW;YACX,IAAI,EACF,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC"}
|
|
@@ -8,15 +8,25 @@ export interface XPCMessage {
|
|
|
8
8
|
body?: XPCDictionary | null;
|
|
9
9
|
size?: number;
|
|
10
10
|
}
|
|
11
|
+
export interface DecodedXpcMessage {
|
|
12
|
+
message: XPCMessage;
|
|
13
|
+
/** Bytes consumed from `buffer` (may be less than `buffer.length`). */
|
|
14
|
+
bytesConsumed: number;
|
|
15
|
+
}
|
|
11
16
|
/**
|
|
12
17
|
* Encodes a message object into an XPC Buffer.
|
|
13
18
|
* A message is an object like:
|
|
14
19
|
* { flags: Number, id: bigint, body: Object|null }
|
|
15
20
|
*/
|
|
16
21
|
export declare function encodeMessage(message: XPCMessage): Buffer;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
24
|
+
* @throws if the header is missing, invalid, or the buffer is shorter than the message
|
|
25
|
+
*/
|
|
26
|
+
export declare function getXpcMessageByteLength(buffer: Buffer): number;
|
|
17
27
|
/**
|
|
18
28
|
* Decodes an XPC Buffer into a message object.
|
|
19
29
|
* (Keep this function if you plan to handle incoming messages.)
|
|
20
30
|
*/
|
|
21
|
-
export declare function decodeMessage(buffer: Buffer):
|
|
31
|
+
export declare function decodeMessage(buffer: Buffer): DecodedXpcMessage;
|
|
22
32
|
//# sourceMappingURL=xpc-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xpc-protocol.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAY,MAAM,aAAa,CAAC;AAOrE,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAa9C,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;
|
|
1
|
+
{"version":3,"file":"xpc-protocol.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/xpc-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,aAAa,EAAY,MAAM,aAAa,CAAC;AAOrE,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAa9C,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;AA0GD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAkCzD;AAID;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAc9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CA2C/D"}
|
|
@@ -101,6 +101,9 @@ class Reader {
|
|
|
101
101
|
skip(n) {
|
|
102
102
|
this.offset += n;
|
|
103
103
|
}
|
|
104
|
+
getOffset() {
|
|
105
|
+
return this.offset;
|
|
106
|
+
}
|
|
104
107
|
}
|
|
105
108
|
/**
|
|
106
109
|
* Encodes a message object into an XPC Buffer.
|
|
@@ -135,11 +138,32 @@ export function encodeMessage(message) {
|
|
|
135
138
|
writer.writeBuffer(bodyBuffer);
|
|
136
139
|
return writer.concat();
|
|
137
140
|
}
|
|
141
|
+
const XPC_WRAPPER_HEADER_SIZE = 24;
|
|
142
|
+
/**
|
|
143
|
+
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
144
|
+
* @throws if the header is missing, invalid, or the buffer is shorter than the message
|
|
145
|
+
*/
|
|
146
|
+
export function getXpcMessageByteLength(buffer) {
|
|
147
|
+
if (buffer.length < XPC_WRAPPER_HEADER_SIZE) {
|
|
148
|
+
throw new Error('Incomplete XPC wrapper');
|
|
149
|
+
}
|
|
150
|
+
const magic = buffer.readUInt32LE(0);
|
|
151
|
+
if (magic !== WRAPPER_MAGIC) {
|
|
152
|
+
throw new Error(`Invalid wrapper magic: 0x${magic.toString(16)}`);
|
|
153
|
+
}
|
|
154
|
+
const bodyLen = Number(buffer.readBigUInt64LE(8));
|
|
155
|
+
const total = XPC_WRAPPER_HEADER_SIZE + bodyLen;
|
|
156
|
+
if (buffer.length < total) {
|
|
157
|
+
throw new Error('Incomplete XPC wrapper');
|
|
158
|
+
}
|
|
159
|
+
return total;
|
|
160
|
+
}
|
|
138
161
|
/**
|
|
139
162
|
* Decodes an XPC Buffer into a message object.
|
|
140
163
|
* (Keep this function if you plan to handle incoming messages.)
|
|
141
164
|
*/
|
|
142
165
|
export function decodeMessage(buffer) {
|
|
166
|
+
const bytesConsumed = getXpcMessageByteLength(buffer);
|
|
143
167
|
const reader = new Reader(buffer);
|
|
144
168
|
const magic = reader.readUInt32LE();
|
|
145
169
|
if (magic !== WRAPPER_MAGIC) {
|
|
@@ -149,7 +173,10 @@ export function decodeMessage(buffer) {
|
|
|
149
173
|
const bodyLen = reader.readBigUInt64LE();
|
|
150
174
|
const msgId = reader.readBigUInt64LE();
|
|
151
175
|
if (bodyLen === BigInt(0)) {
|
|
152
|
-
return {
|
|
176
|
+
return {
|
|
177
|
+
message: { flags, id: msgId, body: null },
|
|
178
|
+
bytesConsumed,
|
|
179
|
+
};
|
|
153
180
|
}
|
|
154
181
|
// Read body header.
|
|
155
182
|
const objMagic = reader.readUInt32LE();
|
|
@@ -170,7 +197,10 @@ export function decodeMessage(buffer) {
|
|
|
170
197
|
Array.isArray(decodedValue)) {
|
|
171
198
|
throw new TypeError('Expected dictionary as message body');
|
|
172
199
|
}
|
|
173
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
message: { flags, id: msgId, body: decodedValue },
|
|
202
|
+
bytesConsumed,
|
|
203
|
+
};
|
|
174
204
|
}
|
|
175
205
|
/**
|
|
176
206
|
* Helper: calculates padding bytes needed to align a length to a multiple of 4.
|
|
@@ -325,15 +355,21 @@ function decodeObject(reader) {
|
|
|
325
355
|
return uuidBuf.toString('hex'); // Return UUID as hex string.
|
|
326
356
|
}
|
|
327
357
|
case XPC_TYPES.array: {
|
|
328
|
-
const
|
|
358
|
+
const payloadLen = reader.readUInt32LE();
|
|
359
|
+
const payload = reader.readBytes(payloadLen);
|
|
360
|
+
const payloadReader = new Reader(payload);
|
|
361
|
+
const numElements = payloadReader.readUInt32LE();
|
|
329
362
|
const arr = [];
|
|
330
363
|
for (let i = 0; i < numElements; i++) {
|
|
331
|
-
arr.push(decodeObject(
|
|
364
|
+
arr.push(decodeObject(payloadReader));
|
|
332
365
|
}
|
|
333
366
|
return arr;
|
|
334
367
|
}
|
|
335
|
-
case XPC_TYPES.dictionary:
|
|
336
|
-
|
|
368
|
+
case XPC_TYPES.dictionary: {
|
|
369
|
+
const payloadLen = reader.readUInt32LE();
|
|
370
|
+
const payload = reader.readBytes(payloadLen);
|
|
371
|
+
return decodeDictionary(new Reader(payload));
|
|
372
|
+
}
|
|
337
373
|
// Note: fileTransfer type is not implemented here.
|
|
338
374
|
default:
|
|
339
375
|
throw new TypeError(`Unsupported xpc type: 0x${type.toString(16)}`);
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { InvalidDataError, WindowUpdateFrame } from './handshake-frames.js';
|
|
2
|
+
|
|
3
|
+
const FRAME_HEADER_SIZE = 9;
|
|
4
|
+
const FRAME_TYPE_DATA = 0x00;
|
|
5
|
+
const FLAG_PADDED = 0x08;
|
|
6
|
+
|
|
7
|
+
export interface ParsedDataFrame {
|
|
8
|
+
readonly streamId: number;
|
|
9
|
+
readonly data: Buffer;
|
|
10
|
+
readonly bodyLen: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ParsedFrame =
|
|
14
|
+
| { readonly type: 'data'; readonly frame: ParsedDataFrame }
|
|
15
|
+
| { readonly type: 'other' };
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Incrementally parse HTTP/2 frames from a byte stream (RFC 7540).
|
|
19
|
+
*/
|
|
20
|
+
export class Http2FrameParser {
|
|
21
|
+
private buffer: Buffer = Buffer.alloc(0);
|
|
22
|
+
|
|
23
|
+
append(chunk: Buffer): ParsedFrame[] {
|
|
24
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
25
|
+
const frames: ParsedFrame[] = [];
|
|
26
|
+
|
|
27
|
+
while (this.buffer.length >= FRAME_HEADER_SIZE) {
|
|
28
|
+
const length =
|
|
29
|
+
(this.buffer[0] << 16) | (this.buffer[1] << 8) | this.buffer[2];
|
|
30
|
+
const totalSize = FRAME_HEADER_SIZE + length;
|
|
31
|
+
if (this.buffer.length < totalSize) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const frameBuffer = this.buffer.subarray(0, totalSize);
|
|
36
|
+
this.buffer = this.buffer.subarray(totalSize);
|
|
37
|
+
frames.push(parseFrame(frameBuffer));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return frames;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Emit WINDOW_UPDATE frames for even-numbered streams, matching `remoted` behavior.
|
|
46
|
+
*/
|
|
47
|
+
export function buildWindowUpdateFrames(
|
|
48
|
+
streamId: number,
|
|
49
|
+
increment: number,
|
|
50
|
+
): Buffer[] {
|
|
51
|
+
if (streamId % 2 !== 0 || increment <= 0) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
return [
|
|
55
|
+
new WindowUpdateFrame(0, increment).serialize(),
|
|
56
|
+
new WindowUpdateFrame(streamId, increment).serialize(),
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function parseFrame(buffer: Buffer): ParsedFrame {
|
|
61
|
+
const length = (buffer[0] << 16) | (buffer[1] << 8) | buffer[2];
|
|
62
|
+
const type = buffer[3];
|
|
63
|
+
const flags = buffer[4];
|
|
64
|
+
const streamId = buffer.readUInt32BE(5) & 0x7fffffff;
|
|
65
|
+
const body = buffer.subarray(FRAME_HEADER_SIZE, FRAME_HEADER_SIZE + length);
|
|
66
|
+
|
|
67
|
+
if (type !== FRAME_TYPE_DATA) {
|
|
68
|
+
return { type: 'other' };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const data = stripDataFramePadding(body, flags);
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
type: 'data',
|
|
75
|
+
frame: { streamId, data, bodyLen: length },
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Strip HTTP/2 DATA frame padding (RFC 7540 §6.1).
|
|
81
|
+
* @throws {InvalidDataError} when padding length is invalid
|
|
82
|
+
*/
|
|
83
|
+
function stripDataFramePadding(body: Buffer, flags: number): Buffer {
|
|
84
|
+
if (!(flags & FLAG_PADDED)) {
|
|
85
|
+
return body;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (body.length === 0) {
|
|
89
|
+
throw new InvalidDataError(
|
|
90
|
+
'PROTOCOL_ERROR: PADDED DATA frame has empty payload',
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const padLength = body.readUInt8(0);
|
|
95
|
+
if (padLength >= body.length) {
|
|
96
|
+
throw new InvalidDataError('PROTOCOL_ERROR: Padding exceeds frame size');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return body.subarray(1, body.length - padLength);
|
|
100
|
+
}
|
|
@@ -2,6 +2,15 @@ import net from 'node:net';
|
|
|
2
2
|
|
|
3
3
|
import { getLogger } from '../logger.js';
|
|
4
4
|
import Handshake from './handshake.js';
|
|
5
|
+
import {
|
|
6
|
+
Http2FrameParser,
|
|
7
|
+
buildWindowUpdateFrames,
|
|
8
|
+
} from './http2-frame-parser.js';
|
|
9
|
+
import {
|
|
10
|
+
type Service,
|
|
11
|
+
ServiceCatalogCollector,
|
|
12
|
+
type ServicesResponse,
|
|
13
|
+
} from './service-catalog.js';
|
|
5
14
|
|
|
6
15
|
const log = getLogger('RemoteXpcConnection');
|
|
7
16
|
|
|
@@ -11,18 +20,14 @@ export const CONNECTION_CONNECT_TIMEOUT_MS = 3_000;
|
|
|
11
20
|
const HANDSHAKE_DELAY_MS = 100;
|
|
12
21
|
/** Wait for service list after handshake before failing the connect attempt. */
|
|
13
22
|
const SERVICE_AFTER_HANDSHAKE_TIMEOUT_MS = 10_000;
|
|
14
|
-
/** Resolve with partial data if service parsing stalls mid-stream. */
|
|
15
|
-
const SERVICE_EXTRACTION_TIMEOUT_MS = 5_000;
|
|
16
23
|
/**
|
|
17
24
|
* Default max time for one connect attempt (TCP + handshake + service discovery).
|
|
18
|
-
*
|
|
25
|
+
* Sum of connect, handshake delay, and post-handshake service wait.
|
|
19
26
|
*/
|
|
20
|
-
export const CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS =
|
|
21
|
-
SERVICE_EXTRACTION_TIMEOUT_MS,
|
|
27
|
+
export const CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS =
|
|
22
28
|
SERVICE_AFTER_HANDSHAKE_TIMEOUT_MS +
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
);
|
|
29
|
+
HANDSHAKE_DELAY_MS +
|
|
30
|
+
CONNECTION_CONNECT_TIMEOUT_MS;
|
|
26
31
|
/** TunnelManager retry budget; never shorter than a single connect attempt. */
|
|
27
32
|
export const CONNECTION_OVERALL_TIMEOUT_MS =
|
|
28
33
|
CONNECTION_DEFAULT_OPERATION_TIMEOUT_MS;
|
|
@@ -35,21 +40,11 @@ export interface RemoteXpcConnectOptions {
|
|
|
35
40
|
timeoutMs?: number;
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
interface Service {
|
|
39
|
-
serviceName: string;
|
|
40
|
-
port: string;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface ServicesResponse {
|
|
44
|
-
services: Service[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
43
|
/** Guards connect() resolve/reject and clears active connect-phase timers. */
|
|
48
44
|
interface ConnectSession {
|
|
49
45
|
settleSuccess(response: ServicesResponse): void;
|
|
50
46
|
settleFailure(error: Error | unknown): void;
|
|
51
47
|
isSettled(): boolean;
|
|
52
|
-
trackPartialExtractionTimer(timer: NodeJS.Timeout): void;
|
|
53
48
|
}
|
|
54
49
|
|
|
55
50
|
class RemoteXpcConnection {
|
|
@@ -168,14 +163,9 @@ class RemoteXpcConnection {
|
|
|
168
163
|
reject: (reason: Error) => void,
|
|
169
164
|
): ConnectSession {
|
|
170
165
|
let settled = false;
|
|
171
|
-
let partialExtractionTimer: NodeJS.Timeout | undefined;
|
|
172
166
|
|
|
173
167
|
const clearAllTimers = (): void => {
|
|
174
168
|
clearTimeout(operationTimer);
|
|
175
|
-
if (partialExtractionTimer) {
|
|
176
|
-
clearTimeout(partialExtractionTimer);
|
|
177
|
-
partialExtractionTimer = undefined;
|
|
178
|
-
}
|
|
179
169
|
};
|
|
180
170
|
|
|
181
171
|
const settleSuccess = (response: ServicesResponse): void => {
|
|
@@ -208,9 +198,6 @@ class RemoteXpcConnection {
|
|
|
208
198
|
settleSuccess,
|
|
209
199
|
settleFailure,
|
|
210
200
|
isSettled: () => settled,
|
|
211
|
-
trackPartialExtractionTimer: (timer) => {
|
|
212
|
-
partialExtractionTimer = timer;
|
|
213
|
-
},
|
|
214
201
|
};
|
|
215
202
|
}
|
|
216
203
|
|
|
@@ -228,24 +215,8 @@ class RemoteXpcConnection {
|
|
|
228
215
|
session: ConnectSession,
|
|
229
216
|
socket: net.Socket,
|
|
230
217
|
): void {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const schedulePartialExtractionTimeout = (): void => {
|
|
235
|
-
if (partialExtractionTimer) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
partialExtractionTimer = setTimeout(() => {
|
|
240
|
-
partialExtractionTimer = undefined;
|
|
241
|
-
log.warn(
|
|
242
|
-
'Service extraction timeout reached, resolving with current data',
|
|
243
|
-
);
|
|
244
|
-
const finalResponse = extractServices(accumulatedData.toString('utf8'));
|
|
245
|
-
session.settleSuccess(finalResponse);
|
|
246
|
-
}, SERVICE_EXTRACTION_TIMEOUT_MS);
|
|
247
|
-
session.trackPartialExtractionTimer(partialExtractionTimer);
|
|
248
|
-
};
|
|
218
|
+
const frameParser = new Http2FrameParser();
|
|
219
|
+
const catalogCollector = new ServiceCatalogCollector();
|
|
249
220
|
|
|
250
221
|
socket.once('error', (error: Error) => {
|
|
251
222
|
if (!this._isClosing) {
|
|
@@ -256,15 +227,13 @@ class RemoteXpcConnection {
|
|
|
256
227
|
});
|
|
257
228
|
|
|
258
229
|
socket.on('data', (data: Buffer | string) => {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
accumulatedData = Buffer.concat([accumulatedData, chunk]);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
this.tryResolveServicesFromPayload(
|
|
230
|
+
const chunk = Buffer.isBuffer(data) ? data : Buffer.from(data, 'hex');
|
|
231
|
+
this.processIncomingData(
|
|
265
232
|
session,
|
|
266
|
-
|
|
267
|
-
|
|
233
|
+
socket,
|
|
234
|
+
frameParser,
|
|
235
|
+
catalogCollector,
|
|
236
|
+
chunk,
|
|
268
237
|
);
|
|
269
238
|
});
|
|
270
239
|
|
|
@@ -283,28 +252,40 @@ class RemoteXpcConnection {
|
|
|
283
252
|
});
|
|
284
253
|
}
|
|
285
254
|
|
|
286
|
-
private
|
|
255
|
+
private processIncomingData(
|
|
287
256
|
session: ConnectSession,
|
|
288
|
-
|
|
289
|
-
|
|
257
|
+
socket: net.Socket,
|
|
258
|
+
frameParser: Http2FrameParser,
|
|
259
|
+
catalogCollector: ServiceCatalogCollector,
|
|
260
|
+
chunk: Buffer,
|
|
290
261
|
): void {
|
|
291
|
-
|
|
292
|
-
if (!dataStr.includes('com.apple') || !dataStr.includes('Port')) {
|
|
262
|
+
if (session.isSettled()) {
|
|
293
263
|
return;
|
|
294
264
|
}
|
|
295
265
|
|
|
266
|
+
let frames;
|
|
296
267
|
try {
|
|
297
|
-
|
|
298
|
-
|
|
268
|
+
frames = frameParser.append(chunk);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
session.settleFailure(error);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
for (const frame of frames) {
|
|
275
|
+
if (frame.type !== 'data') {
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const { streamId, data, bodyLen } = frame.frame;
|
|
280
|
+
for (const windowUpdate of buildWindowUpdateFrames(streamId, bodyLen)) {
|
|
281
|
+
socket.write(windowUpdate);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const servicesResponse = catalogCollector.ingestDataPayload(data);
|
|
285
|
+
if (servicesResponse) {
|
|
299
286
|
session.settleSuccess(servicesResponse);
|
|
300
287
|
return;
|
|
301
288
|
}
|
|
302
|
-
|
|
303
|
-
schedulePartialExtractionTimeout();
|
|
304
|
-
} catch (error) {
|
|
305
|
-
log.warn(
|
|
306
|
-
`Error extracting services: ${error}, continuing to collect data`,
|
|
307
|
-
);
|
|
308
289
|
}
|
|
309
290
|
}
|
|
310
291
|
|
|
@@ -472,79 +453,4 @@ class RemoteXpcConnection {
|
|
|
472
453
|
}
|
|
473
454
|
}
|
|
474
455
|
|
|
475
|
-
/**
|
|
476
|
-
* Extract services from the response
|
|
477
|
-
* @param response The response string to parse
|
|
478
|
-
* @returns Object containing the extracted services
|
|
479
|
-
*/
|
|
480
|
-
function extractServices(response: string): ServicesResponse {
|
|
481
|
-
// More robust regex that handles various formats of service names and port specifications
|
|
482
|
-
const serviceRegex = /com\.apple(?:\.[\w-]+)+/g;
|
|
483
|
-
const portRegex = /Port[^0-9]*(\d+)/g;
|
|
484
|
-
|
|
485
|
-
interface Match {
|
|
486
|
-
value: string;
|
|
487
|
-
index: number;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// First, collect all service names
|
|
491
|
-
const serviceMatches: Match[] = [];
|
|
492
|
-
let match: RegExpExecArray | null;
|
|
493
|
-
while ((match = serviceRegex.exec(response)) !== null) {
|
|
494
|
-
serviceMatches.push({ value: match[0], index: match.index });
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
// Then, collect all port numbers
|
|
498
|
-
const portMatches: Match[] = [];
|
|
499
|
-
while ((match = portRegex.exec(response)) !== null) {
|
|
500
|
-
if (match[1]) {
|
|
501
|
-
// Ensure we have a captured port number
|
|
502
|
-
portMatches.push({ value: match[1], index: match.index });
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
// Sort both arrays by index to maintain order
|
|
507
|
-
serviceMatches.sort((a, b) => a.index - b.index);
|
|
508
|
-
portMatches.sort((a, b) => a.index - b.index);
|
|
509
|
-
|
|
510
|
-
// Create a mapping of services to ports
|
|
511
|
-
const services: Service[] = [];
|
|
512
|
-
|
|
513
|
-
// Assign a port to each service based on proximity in the response
|
|
514
|
-
for (let i = 0; i < serviceMatches.length; i++) {
|
|
515
|
-
const serviceName = serviceMatches[i].value;
|
|
516
|
-
const serviceIndex = serviceMatches[i].index;
|
|
517
|
-
|
|
518
|
-
// Find the closest port after this service
|
|
519
|
-
let closestPort = '';
|
|
520
|
-
let closestDistance = Number.MAX_SAFE_INTEGER;
|
|
521
|
-
|
|
522
|
-
for (const portMatch of portMatches) {
|
|
523
|
-
// Only consider ports that come after the service in the response
|
|
524
|
-
if (portMatch.index > serviceIndex) {
|
|
525
|
-
const distance = portMatch.index - serviceIndex;
|
|
526
|
-
|
|
527
|
-
// If this port is closer than the current closest, update
|
|
528
|
-
if (distance < closestDistance) {
|
|
529
|
-
closestDistance = distance;
|
|
530
|
-
closestPort = portMatch.value;
|
|
531
|
-
|
|
532
|
-
// If the port is very close (within 200 chars), we can be confident it's the right one
|
|
533
|
-
if (distance < 200) {
|
|
534
|
-
break;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
// Add the service with its port (or empty string if no port found)
|
|
541
|
-
services.push({
|
|
542
|
-
serviceName,
|
|
543
|
-
port: closestPort || '',
|
|
544
|
-
});
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
return { services };
|
|
548
|
-
}
|
|
549
|
-
|
|
550
456
|
export { RemoteXpcConnection, type Service, type ServicesResponse };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { XPCDictionary } from '../types.js';
|
|
2
|
+
import { decodeMessage } from './xpc-protocol.js';
|
|
3
|
+
|
|
4
|
+
export interface Service {
|
|
5
|
+
serviceName: string;
|
|
6
|
+
port: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface ServicesResponse {
|
|
10
|
+
services: Service[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Reassemble length-prefixed XPC payloads from HTTP/2 DATA frames and extract
|
|
15
|
+
* the service catalog once the full handshake message is available.
|
|
16
|
+
*/
|
|
17
|
+
export class ServiceCatalogCollector {
|
|
18
|
+
private previousFrameData: Buffer = Buffer.alloc(0);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Feed one DATA frame payload. Returns the catalog when a complete XPC
|
|
22
|
+
* message containing `Services` has been decoded.
|
|
23
|
+
*/
|
|
24
|
+
ingestDataPayload(chunk: Buffer): ServicesResponse | null {
|
|
25
|
+
let pending = Buffer.concat([this.previousFrameData, chunk]);
|
|
26
|
+
this.previousFrameData = Buffer.alloc(0);
|
|
27
|
+
|
|
28
|
+
while (pending.length > 0) {
|
|
29
|
+
try {
|
|
30
|
+
const { message, bytesConsumed } = decodeMessage(pending);
|
|
31
|
+
pending = pending.subarray(bytesConsumed);
|
|
32
|
+
|
|
33
|
+
if (message.body === null || message.body === undefined) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const catalog = servicesFromXpcBody(message.body);
|
|
38
|
+
if (catalog) {
|
|
39
|
+
this.previousFrameData = pending;
|
|
40
|
+
return catalog;
|
|
41
|
+
}
|
|
42
|
+
} catch {
|
|
43
|
+
this.previousFrameData = pending;
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Build the service list from a decoded RSD handshake body (`peer_info`).
|
|
54
|
+
*/
|
|
55
|
+
export function servicesFromXpcBody(
|
|
56
|
+
body: XPCDictionary | null | undefined,
|
|
57
|
+
): ServicesResponse | null {
|
|
58
|
+
if (!body || typeof body !== 'object' || Array.isArray(body)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const servicesDict = body.Services;
|
|
63
|
+
if (
|
|
64
|
+
!servicesDict ||
|
|
65
|
+
typeof servicesDict !== 'object' ||
|
|
66
|
+
Array.isArray(servicesDict)
|
|
67
|
+
) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const services: Service[] = [];
|
|
72
|
+
for (const [serviceName, info] of Object.entries(servicesDict)) {
|
|
73
|
+
if (!info || typeof info !== 'object' || Array.isArray(info)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const portValue = (info as XPCDictionary).Port;
|
|
77
|
+
services.push({
|
|
78
|
+
serviceName,
|
|
79
|
+
port:
|
|
80
|
+
portValue !== undefined && portValue !== null ? String(portValue) : '',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return services.length > 0 ? { services } : null;
|
|
85
|
+
}
|
|
@@ -28,6 +28,12 @@ export interface XPCMessage {
|
|
|
28
28
|
size?: number;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
export interface DecodedXpcMessage {
|
|
32
|
+
message: XPCMessage;
|
|
33
|
+
/** Bytes consumed from `buffer` (may be less than `buffer.length`). */
|
|
34
|
+
bytesConsumed: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
31
37
|
// A simple binary writer that collects Buffer chunks.
|
|
32
38
|
class Writer {
|
|
33
39
|
private chunks: Buffer[] = [];
|
|
@@ -126,6 +132,10 @@ class Reader {
|
|
|
126
132
|
skip(n: number): void {
|
|
127
133
|
this.offset += n;
|
|
128
134
|
}
|
|
135
|
+
|
|
136
|
+
getOffset(): number {
|
|
137
|
+
return this.offset;
|
|
138
|
+
}
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
/**
|
|
@@ -169,11 +179,34 @@ export function encodeMessage(message: XPCMessage): Buffer {
|
|
|
169
179
|
return writer.concat();
|
|
170
180
|
}
|
|
171
181
|
|
|
182
|
+
const XPC_WRAPPER_HEADER_SIZE = 24;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Returns the total byte length of one length-prefixed XPC wrapper in `buffer`.
|
|
186
|
+
* @throws if the header is missing, invalid, or the buffer is shorter than the message
|
|
187
|
+
*/
|
|
188
|
+
export function getXpcMessageByteLength(buffer: Buffer): number {
|
|
189
|
+
if (buffer.length < XPC_WRAPPER_HEADER_SIZE) {
|
|
190
|
+
throw new Error('Incomplete XPC wrapper');
|
|
191
|
+
}
|
|
192
|
+
const magic = buffer.readUInt32LE(0);
|
|
193
|
+
if (magic !== WRAPPER_MAGIC) {
|
|
194
|
+
throw new Error(`Invalid wrapper magic: 0x${magic.toString(16)}`);
|
|
195
|
+
}
|
|
196
|
+
const bodyLen = Number(buffer.readBigUInt64LE(8));
|
|
197
|
+
const total = XPC_WRAPPER_HEADER_SIZE + bodyLen;
|
|
198
|
+
if (buffer.length < total) {
|
|
199
|
+
throw new Error('Incomplete XPC wrapper');
|
|
200
|
+
}
|
|
201
|
+
return total;
|
|
202
|
+
}
|
|
203
|
+
|
|
172
204
|
/**
|
|
173
205
|
* Decodes an XPC Buffer into a message object.
|
|
174
206
|
* (Keep this function if you plan to handle incoming messages.)
|
|
175
207
|
*/
|
|
176
|
-
export function decodeMessage(buffer: Buffer):
|
|
208
|
+
export function decodeMessage(buffer: Buffer): DecodedXpcMessage {
|
|
209
|
+
const bytesConsumed = getXpcMessageByteLength(buffer);
|
|
177
210
|
const reader = new Reader(buffer);
|
|
178
211
|
const magic = reader.readUInt32LE();
|
|
179
212
|
if (magic !== WRAPPER_MAGIC) {
|
|
@@ -183,7 +216,10 @@ export function decodeMessage(buffer: Buffer): XPCMessage {
|
|
|
183
216
|
const bodyLen = reader.readBigUInt64LE();
|
|
184
217
|
const msgId = reader.readBigUInt64LE();
|
|
185
218
|
if (bodyLen === BigInt(0)) {
|
|
186
|
-
return {
|
|
219
|
+
return {
|
|
220
|
+
message: { flags, id: msgId, body: null },
|
|
221
|
+
bytesConsumed,
|
|
222
|
+
};
|
|
187
223
|
}
|
|
188
224
|
// Read body header.
|
|
189
225
|
const objMagic = reader.readUInt32LE();
|
|
@@ -208,7 +244,10 @@ export function decodeMessage(buffer: Buffer): XPCMessage {
|
|
|
208
244
|
throw new TypeError('Expected dictionary as message body');
|
|
209
245
|
}
|
|
210
246
|
|
|
211
|
-
return {
|
|
247
|
+
return {
|
|
248
|
+
message: { flags, id: msgId, body: decodedValue as XPCDictionary },
|
|
249
|
+
bytesConsumed,
|
|
250
|
+
};
|
|
212
251
|
}
|
|
213
252
|
|
|
214
253
|
/**
|
|
@@ -367,15 +406,21 @@ function decodeObject(reader: Reader): XPCValue {
|
|
|
367
406
|
return uuidBuf.toString('hex'); // Return UUID as hex string.
|
|
368
407
|
}
|
|
369
408
|
case XPC_TYPES.array: {
|
|
370
|
-
const
|
|
409
|
+
const payloadLen = reader.readUInt32LE();
|
|
410
|
+
const payload = reader.readBytes(payloadLen);
|
|
411
|
+
const payloadReader = new Reader(payload);
|
|
412
|
+
const numElements = payloadReader.readUInt32LE();
|
|
371
413
|
const arr: XPCArray = [];
|
|
372
414
|
for (let i = 0; i < numElements; i++) {
|
|
373
|
-
arr.push(decodeObject(
|
|
415
|
+
arr.push(decodeObject(payloadReader));
|
|
374
416
|
}
|
|
375
417
|
return arr;
|
|
376
418
|
}
|
|
377
|
-
case XPC_TYPES.dictionary:
|
|
378
|
-
|
|
419
|
+
case XPC_TYPES.dictionary: {
|
|
420
|
+
const payloadLen = reader.readUInt32LE();
|
|
421
|
+
const payload = reader.readBytes(payloadLen);
|
|
422
|
+
return decodeDictionary(new Reader(payload));
|
|
423
|
+
}
|
|
379
424
|
// Note: fileTransfer type is not implemented here.
|
|
380
425
|
default:
|
|
381
426
|
throw new TypeError(`Unsupported xpc type: 0x${type.toString(16)}`);
|