appium-ios-remotexpc 5.18.2 → 5.18.3

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 CHANGED
@@ -1,3 +1,9 @@
1
+ ## [5.18.3](https://github.com/appium/appium-ios-remotexpc/compare/v5.18.2...v5.18.3) (2026-09-02)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **remote-xpc:** honor HTTP/2 frame size and flow control on outbound DATA frames ([#316](https://github.com/appium/appium-ios-remotexpc/issues/316)) ([0b640ad](https://github.com/appium/appium-ios-remotexpc/commit/0b640ada41fec828e31cc7aaa43342a2871f0308))
6
+
1
7
  ## [5.18.2](https://github.com/appium/appium-ios-remotexpc/compare/v5.18.1...v5.18.2) (2026-09-01)
2
8
 
3
9
  ### Miscellaneous Chores
@@ -10,6 +10,9 @@ export declare const Http2Constants: {
10
10
  readonly DEFAULT_WIN_SIZE_INCR: number;
11
11
  readonly SETTINGS_MAX_CONCURRENT_STREAMS: 3;
12
12
  readonly SETTINGS_INITIAL_WINDOW_SIZE: 4;
13
+ readonly SETTINGS_MAX_FRAME_SIZE: 5;
14
+ readonly DEFAULT_PEER_MAX_FRAME_SIZE: 16384;
15
+ readonly DEFAULT_PEER_WINDOW_SIZE: 65535;
13
16
  };
14
17
  export declare const XpcConstants: {
15
18
  readonly XPC_FLAGS_INIT_HANDSHAKE: 4194304;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;;;;;CAgBjB,CAAC;AAGX,eAAO,MAAM,YAAY;;;;;CAKf,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;CAmBjB,CAAC;AAGX,eAAO,MAAM,YAAY;;;;;CAKf,CAAC"}
@@ -15,6 +15,9 @@ export const Http2Constants = {
15
15
  DEFAULT_WIN_SIZE_INCR: 16 * 1024 * 1024 - 65535,
16
16
  SETTINGS_MAX_CONCURRENT_STREAMS: 0x03,
17
17
  SETTINGS_INITIAL_WINDOW_SIZE: 0x04,
18
+ SETTINGS_MAX_FRAME_SIZE: 0x05,
19
+ DEFAULT_PEER_MAX_FRAME_SIZE: 16384,
20
+ DEFAULT_PEER_WINDOW_SIZE: 65535,
18
21
  };
19
22
  // XPC Constants
20
23
  export const XpcConstants = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/constants.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACrE,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,gBAAgB,EAAE,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,uCAAuC,EAAE,GAAG;IAC5C,qEAAqE;IACrE,0EAA0E;IAC1E,0EAA0E;IAC1E,iBAAiB;IACjB,oCAAoC,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACtD,qBAAqB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;IAC/C,+BAA+B,EAAE,IAAI;IACrC,4BAA4B,EAAE,IAAI;CAC1B,CAAC;AAEX,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,wBAAwB,EAAE,UAAU;IACpC,oBAAoB,EAAE,UAAU;IAChC,sBAAsB,EAAE,UAAU;IAClC,uBAAuB,EAAE,UAAU;CAC3B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/constants.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACrE,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,gBAAgB,EAAE,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,uCAAuC,EAAE,GAAG;IAC5C,qEAAqE;IACrE,0EAA0E;IAC1E,0EAA0E;IAC1E,iBAAiB;IACjB,oCAAoC,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACtD,qBAAqB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;IAC/C,+BAA+B,EAAE,IAAI;IACrC,4BAA4B,EAAE,IAAI;IAClC,uBAAuB,EAAE,IAAI;IAC7B,2BAA2B,EAAE,KAAK;IAClC,wBAAwB,EAAE,KAAK;CACvB,CAAC;AAEX,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,wBAAwB,EAAE,UAAU;IACpC,oBAAoB,EAAE,UAAU;IAChC,sBAAsB,EAAE,UAAU;IAClC,uBAAuB,EAAE,UAAU;CAC3B,CAAC"}
@@ -5,9 +5,13 @@ export type MessageId = number;
5
5
  declare class Handshake {
6
6
  private _socket;
7
7
  private readonly _nextMessageId;
8
+ private readonly _dataBytesSent;
8
9
  constructor(socket: Socket);
10
+ /** DATA payload bytes sent per stream, so the transport can debit its send windows. */
11
+ get dataBytesSent(): Readonly<Record<ChannelId, number>>;
9
12
  sendFrame(frame: Buffer): Promise<void>;
10
13
  sendRequest(data: XPCDictionary): Promise<void>;
14
+ private sendData;
11
15
  perform(): Promise<void>;
12
16
  }
13
17
  export default Handshake;
@@ -1 +1 @@
1
- {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,MAAM,EAAC,MAAM,UAAU,CAAC;AAErC,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAK/C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,cAAM,SAAS;IACb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;gBAElD,MAAM,EAAE,MAAM;IAQpB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA2E/B;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,MAAM,EAAC,MAAM,UAAU,CAAC;AAErC,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAK/C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,cAAM,SAAS;IACb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAE/C,MAAM,EAAE,MAAM;IAY1B,uFAAuF;IACvF,IAAI,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAEvD;IAEK,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAWvC,QAAQ;IAMhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAuE/B;AAED,eAAe,SAAS,CAAC"}
@@ -4,12 +4,21 @@ import { encodeMessage } from './xpc-protocol.js';
4
4
  class Handshake {
5
5
  _socket;
6
6
  _nextMessageId;
7
+ _dataBytesSent;
7
8
  constructor(socket) {
8
9
  this._socket = socket;
9
10
  this._nextMessageId = {
10
11
  [Http2Constants.ROOT_CHANNEL]: 0,
11
12
  [Http2Constants.REPLY_CHANNEL]: 0,
12
13
  };
14
+ this._dataBytesSent = {
15
+ [Http2Constants.ROOT_CHANNEL]: 0,
16
+ [Http2Constants.REPLY_CHANNEL]: 0,
17
+ };
18
+ }
19
+ /** DATA payload bytes sent per stream, so the transport can debit its send windows. */
20
+ get dataBytesSent() {
21
+ return { ...this._dataBytesSent };
13
22
  }
14
23
  async sendFrame(frame) {
15
24
  return new Promise((resolve, reject) => {
@@ -34,9 +43,12 @@ class Handshake {
34
43
  id: BigInt(this._nextMessageId[Http2Constants.ROOT_CHANNEL]),
35
44
  body: data,
36
45
  };
37
- const encodedMessage = encodeMessage(requestMessage);
38
- const dataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedMessage, []);
39
- await this.sendFrame(dataFrame.serialize());
46
+ await this.sendData(Http2Constants.ROOT_CHANNEL, requestMessage);
47
+ }
48
+ async sendData(streamId, message) {
49
+ const encoded = encodeMessage(message);
50
+ this._dataBytesSent[streamId] += encoded.length;
51
+ await this.sendFrame(new DataFrame(streamId, encoded, []).serialize());
40
52
  }
41
53
  async perform() {
42
54
  try {
@@ -79,9 +91,7 @@ class Handshake {
79
91
  id: 0,
80
92
  body: null,
81
93
  };
82
- const encodedDataMessage = encodeMessage(dataMessage);
83
- const dataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedDataMessage, []);
84
- await this.sendFrame(dataFrame.serialize());
94
+ await this.sendData(Http2Constants.ROOT_CHANNEL, dataMessage);
85
95
  this._nextMessageId[Http2Constants.ROOT_CHANNEL]++;
86
96
  // Step 8: Open REPLY_CHANNEL with INIT_HANDSHAKE flags.
87
97
  const replyMessage = {
@@ -89,9 +99,7 @@ class Handshake {
89
99
  id: 0,
90
100
  body: null,
91
101
  };
92
- const encodedReplyMessage = encodeMessage(replyMessage);
93
- const replyDataFrame = new DataFrame(Http2Constants.REPLY_CHANNEL, encodedReplyMessage, []);
94
- await this.sendFrame(replyDataFrame.serialize());
102
+ await this.sendData(Http2Constants.REPLY_CHANNEL, replyMessage);
95
103
  this._nextMessageId[Http2Constants.REPLY_CHANNEL]++;
96
104
  // Step 9: Send SETTINGS ACK frame.
97
105
  const ackFrame = new SettingsFrame(0, null, ['ACK']);
@@ -1 +1 @@
1
- {"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAkB,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAKjE,MAAM,SAAS;IACL,OAAO,CAAS;IACP,cAAc,CAA+B;IAC7C,cAAc,CAA4B;IAE3D,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG;YACpB,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;SAClC,CAAC;QACF,IAAI,CAAC,cAAc,GAAG;YACpB,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;SAClC,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,IAAI,aAAa;QACf,OAAO,EAAC,GAAG,IAAI,CAAC,cAAc,EAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAmB;QACnC,MAAM,KAAK,GAAW,YAAY,CAAC,oBAAoB,CAAC;QACxD,MAAM,cAAc,GAAe;YACjC,KAAK;YACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC5D,IAAI,EAAE,IAAI;SACX,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAmB,EAAE,OAAmB;QAC7D,MAAM,OAAO,GAAW,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;QAChD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC3B,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YAEH,2CAA2C;YAC3C,MAAM,QAAQ,GAA2B;gBACvC,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,cAAc,CAAC,uCAAuC;gBAC9F,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,cAAc,CAAC,oCAAoC;aACzF,CAAC;YACF,MAAM,aAAa,GAAkB,IAAI,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxE,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YAEhD,gDAAgD;YAChD,MAAM,iBAAiB,GAAsB,IAAI,iBAAiB,CAAC,CAAC,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;YAC5G,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;YAEpD,4CAA4C;YAC5C,MAAM,gBAAgB,GAAiB,IAAI,YAAY,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACpG,aAAa;aACd,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;YAEnD,4DAA4D;YAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAE3B,wEAAwE;YACxE,yEAAyE;YACzE,mEAAmE;YACnE,MAAM,iBAAiB,GAAiB,IAAI,YAAY,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACtG,aAAa;aACd,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC;YAEpD,iEAAiE;YACjE,iDAAiD;YACjD,kEAAkE;YAClE,MAAM,WAAW,GAAe;gBAC9B,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,IAAI;aACX,CAAC;YACF,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YAEnD,wDAAwD;YACxD,MAAM,YAAY,GAAe;gBAC/B,KAAK,EAAE,YAAY,CAAC,oBAAoB,GAAG,YAAY,CAAC,wBAAwB;gBAChF,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,IAAI;aACX,CAAC;YACF,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YAEpD,mCAAmC;YACnC,MAAM,QAAQ,GAAkB,IAAI,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACpE,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qCAAqC;YACrC,MAAM,IAAI,KAAK,CACb,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,yBAAyB,EACjG,EAAC,KAAK,EAAE,KAAK,EAAC,CACf,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,eAAe,SAAS,CAAC"}
@@ -6,6 +6,13 @@ export interface ParsedDataFrame {
6
6
  export type ParsedFrame = {
7
7
  readonly type: 'data';
8
8
  readonly frame: ParsedDataFrame;
9
+ } | {
10
+ readonly type: 'settings';
11
+ readonly settings: Record<number, number>;
12
+ } | {
13
+ readonly type: 'windowUpdate';
14
+ readonly streamId: number;
15
+ readonly increment: number;
9
16
  } | {
10
17
  readonly type: 'other';
11
18
  };
@@ -1 +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,GAAG;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAC,GAAG;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC;AAE9G;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IAEzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAkBrC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrF"}
1
+ {"version":3,"file":"http2-frame-parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/http2-frame-parser.ts"],"names":[],"mappings":"AAUA,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;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;CAAC,GACxD;IAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAC,GACtE;IAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAC,GACtF;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAC,CAAC;AAE7B;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IAEzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;CAkBrC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrF"}
@@ -1,7 +1,11 @@
1
+ import { Http2Constants } from './constants.js';
1
2
  import { InvalidDataError, WindowUpdateFrame } from './handshake-frames.js';
2
3
  const FRAME_HEADER_SIZE = 9;
3
4
  const FRAME_TYPE_DATA = 0x00;
5
+ const FRAME_TYPE_SETTINGS = 0x04;
6
+ const FRAME_TYPE_WINDOW_UPDATE = 0x08;
4
7
  const FLAG_PADDED = 0x08;
8
+ const SETTINGS_ENTRY_SIZE = 6;
5
9
  /**
6
10
  * Incrementally parse HTTP/2 frames from a byte stream (RFC 7540).
7
11
  */
@@ -38,6 +42,12 @@ function parseFrame(buffer) {
38
42
  const flags = buffer[4];
39
43
  const streamId = buffer.readUInt32BE(5) & 0x7fffffff;
40
44
  const body = buffer.subarray(FRAME_HEADER_SIZE, FRAME_HEADER_SIZE + length);
45
+ if (type === FRAME_TYPE_SETTINGS && !(flags & Http2Constants.FLAG_ACK)) {
46
+ return { type: 'settings', settings: parseSettings(body) };
47
+ }
48
+ if (type === FRAME_TYPE_WINDOW_UPDATE) {
49
+ return { type: 'windowUpdate', streamId, increment: body.readUInt32BE(0) & 0x7fffffff };
50
+ }
41
51
  if (type !== FRAME_TYPE_DATA) {
42
52
  return { type: 'other' };
43
53
  }
@@ -47,6 +57,13 @@ function parseFrame(buffer) {
47
57
  frame: { streamId, data, bodyLen: length },
48
58
  };
49
59
  }
60
+ /** SETTINGS body is a list of 16-bit identifier / 32-bit value pairs (RFC 7540 §6.5.1). */
61
+ function parseSettings(body) {
62
+ return Object.fromEntries(Array.from({ length: Math.floor(body.length / SETTINGS_ENTRY_SIZE) }, (_, i) => {
63
+ const offset = i * SETTINGS_ENTRY_SIZE;
64
+ return [body.readUInt16BE(offset), body.readUInt32BE(offset + 2)];
65
+ }));
66
+ }
50
67
  /**
51
68
  * Strip HTTP/2 DATA frame padding (RFC 7540 §6.1).
52
69
  * @throws {InvalidDataError} when padding length is invalid
@@ -1 +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
+ {"version":3,"file":"http2-frame-parser.js","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/http2-frame-parser.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,11 @@ export declare class RemoteXpcFramedTransport extends EventEmitter {
15
15
  private connected;
16
16
  private closing;
17
17
  private desynced;
18
+ private peerMaxFrameSize;
19
+ private peerInitialWindowSize;
20
+ private connectionSendWindow;
21
+ private streamSendWindows;
22
+ private sendQueue;
18
23
  constructor(address: [string, number]);
19
24
  get isConnected(): boolean;
20
25
  /**
@@ -29,6 +34,17 @@ export declare class RemoteXpcFramedTransport extends EventEmitter {
29
34
  get localAddress(): string | undefined;
30
35
  connect(options: RemoteXpcFramedTransportConnectOptions): Promise<void>;
31
36
  sendDataFrame(payload: Buffer, streamId?: number): void;
37
+ /**
38
+ * Writes queued payloads as DATA frames no larger than the peer's max frame size
39
+ * or its send windows. Stops at the first blocked payload so ordering holds.
40
+ */
41
+ private flushPendingSends;
42
+ /** Stream 0 is the connection-level window. */
43
+ private sendWindow;
44
+ private adjustSendWindow;
45
+ private consumeSendWindow;
46
+ /** A new INITIAL_WINDOW_SIZE shifts every open stream's window by the delta (RFC 7540 §6.9.2). */
47
+ private applyPeerSettings;
32
48
  close(): Promise<void>;
33
49
  private waitForSocketConnect;
34
50
  /**
@@ -56,6 +72,6 @@ export declare class RemoteXpcFramedTransport extends EventEmitter {
56
72
  */
57
73
  private decodeAndEmit;
58
74
  private shutdownSocket;
59
- private resetParsers;
75
+ private resetConnectionState;
60
76
  }
61
77
  //# sourceMappingURL=remote-xpc-framed-transport.d.ts.map
@@ -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;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"}
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;AAgBzC,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;IACzB,OAAO,CAAC,gBAAgB,CAAsD;IAC9E,OAAO,CAAC,qBAAqB,CAAmD;IAChF,OAAO,CAAC,oBAAoB,CAAmD;IAC/E,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,SAAS,CAA6C;gBAElD,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;IAmC7E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAQlD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAuBzB,+CAA+C;IAC/C,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,iBAAiB;IAKzB,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,oBAAoB;IAyB5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,UAAU;IAyClB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA0BrB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IASpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,oBAAoB;CAU7B"}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import net from 'node:net';
3
3
  import { getLogger } from '../logger.js';
4
+ import { Http2Constants } from './constants.js';
4
5
  import { DataFrame } from './handshake-frames.js';
5
6
  import Handshake from './handshake.js';
6
7
  import { Http2FrameParser, buildWindowUpdateFrames } from './http2-frame-parser.js';
@@ -20,6 +21,11 @@ export class RemoteXpcFramedTransport extends EventEmitter {
20
21
  connected = false;
21
22
  closing = false;
22
23
  desynced = false;
24
+ peerMaxFrameSize = Http2Constants.DEFAULT_PEER_MAX_FRAME_SIZE;
25
+ peerInitialWindowSize = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
26
+ connectionSendWindow = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
27
+ streamSendWindows = new Map();
28
+ sendQueue = [];
23
29
  constructor(address) {
24
30
  super();
25
31
  this.address = address;
@@ -43,7 +49,7 @@ export class RemoteXpcFramedTransport extends EventEmitter {
43
49
  if (this.connected) {
44
50
  return;
45
51
  }
46
- this.resetParsers();
52
+ this.resetConnectionState();
47
53
  const socket = net.createConnection({
48
54
  host: this.address[0],
49
55
  port: this.address[1],
@@ -58,7 +64,11 @@ export class RemoteXpcFramedTransport extends EventEmitter {
58
64
  await new Promise((resolve) => setTimeout(resolve, options.handshakeDelayMs));
59
65
  }
60
66
  try {
61
- await new Handshake(socket).perform();
67
+ const handshake = new Handshake(socket);
68
+ await handshake.perform();
69
+ for (const [streamId, bytes] of Object.entries(handshake.dataBytesSent)) {
70
+ this.consumeSendWindow(Number(streamId), bytes);
71
+ }
62
72
  this.connected = true;
63
73
  }
64
74
  catch (error) {
@@ -70,7 +80,63 @@ export class RemoteXpcFramedTransport extends EventEmitter {
70
80
  if (!this.socket?.writable) {
71
81
  throw new Error('RemoteXPC socket is not writable');
72
82
  }
73
- this.socket.write(new DataFrame(streamId, payload, []).serialize());
83
+ this.sendQueue.push({ streamId, payload });
84
+ this.flushPendingSends();
85
+ }
86
+ /**
87
+ * Writes queued payloads as DATA frames no larger than the peer's max frame size
88
+ * or its send windows. Stops at the first blocked payload so ordering holds.
89
+ */
90
+ flushPendingSends() {
91
+ const socket = this.socket;
92
+ while (socket?.writable && this.sendQueue.length > 0) {
93
+ const send = this.sendQueue[0];
94
+ const size = Math.min(send.payload.length, this.peerMaxFrameSize, this.sendWindow(0), this.sendWindow(send.streamId));
95
+ if (size <= 0 && send.payload.length > 0) {
96
+ return;
97
+ }
98
+ socket.write(new DataFrame(send.streamId, send.payload.subarray(0, size), []).serialize());
99
+ this.consumeSendWindow(send.streamId, size);
100
+ if (size === send.payload.length) {
101
+ this.sendQueue.shift();
102
+ }
103
+ else {
104
+ send.payload = send.payload.subarray(size);
105
+ }
106
+ }
107
+ }
108
+ /** Stream 0 is the connection-level window. */
109
+ sendWindow(streamId) {
110
+ return streamId === 0
111
+ ? this.connectionSendWindow
112
+ : (this.streamSendWindows.get(streamId) ?? this.peerInitialWindowSize);
113
+ }
114
+ adjustSendWindow(streamId, delta) {
115
+ if (streamId === 0) {
116
+ this.connectionSendWindow += delta;
117
+ }
118
+ else {
119
+ this.streamSendWindows.set(streamId, this.sendWindow(streamId) + delta);
120
+ }
121
+ }
122
+ consumeSendWindow(streamId, bytes) {
123
+ this.adjustSendWindow(0, -bytes);
124
+ this.adjustSendWindow(streamId, -bytes);
125
+ }
126
+ /** A new INITIAL_WINDOW_SIZE shifts every open stream's window by the delta (RFC 7540 §6.9.2). */
127
+ applyPeerSettings(settings) {
128
+ const maxFrameSize = settings[Http2Constants.SETTINGS_MAX_FRAME_SIZE];
129
+ if (maxFrameSize !== undefined) {
130
+ this.peerMaxFrameSize = maxFrameSize;
131
+ }
132
+ const initialWindowSize = settings[Http2Constants.SETTINGS_INITIAL_WINDOW_SIZE];
133
+ if (initialWindowSize !== undefined) {
134
+ const delta = initialWindowSize - this.peerInitialWindowSize;
135
+ this.peerInitialWindowSize = initialWindowSize;
136
+ for (const [streamId, window] of this.streamSendWindows) {
137
+ this.streamSendWindows.set(streamId, window + delta);
138
+ }
139
+ }
74
140
  }
75
141
  async close() {
76
142
  this.closing = true;
@@ -152,6 +218,16 @@ export class RemoteXpcFramedTransport extends EventEmitter {
152
218
  return;
153
219
  }
154
220
  for (const frame of frames) {
221
+ if (frame.type === 'settings') {
222
+ this.applyPeerSettings(frame.settings);
223
+ this.flushPendingSends();
224
+ continue;
225
+ }
226
+ if (frame.type === 'windowUpdate') {
227
+ this.adjustSendWindow(frame.streamId, frame.increment);
228
+ this.flushPendingSends();
229
+ continue;
230
+ }
155
231
  if (frame.type !== 'data') {
156
232
  continue;
157
233
  }
@@ -264,10 +340,15 @@ export class RemoteXpcFramedTransport extends EventEmitter {
264
340
  }
265
341
  });
266
342
  }
267
- resetParsers() {
343
+ resetConnectionState() {
268
344
  this.frameParser = new Http2FrameParser();
269
345
  this.pendingXpcData.clear();
270
346
  this.desynced = false;
347
+ this.peerMaxFrameSize = Http2Constants.DEFAULT_PEER_MAX_FRAME_SIZE;
348
+ this.peerInitialWindowSize = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
349
+ this.connectionSendWindow = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
350
+ this.streamSendWindows.clear();
351
+ this.sendQueue = [];
271
352
  }
272
353
  }
273
354
  //# 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":"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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-ios-remotexpc",
3
- "version": "5.18.2",
3
+ "version": "5.18.3",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "bugs": {
@@ -15,6 +15,9 @@ export const Http2Constants = {
15
15
  DEFAULT_WIN_SIZE_INCR: 16 * 1024 * 1024 - 65535,
16
16
  SETTINGS_MAX_CONCURRENT_STREAMS: 0x03,
17
17
  SETTINGS_INITIAL_WINDOW_SIZE: 0x04,
18
+ SETTINGS_MAX_FRAME_SIZE: 0x05,
19
+ DEFAULT_PEER_MAX_FRAME_SIZE: 16384,
20
+ DEFAULT_PEER_WINDOW_SIZE: 65535,
18
21
  } as const;
19
22
 
20
23
  // XPC Constants
@@ -11,6 +11,7 @@ export type MessageId = number;
11
11
  class Handshake {
12
12
  private _socket: Socket;
13
13
  private readonly _nextMessageId: Record<ChannelId, MessageId>;
14
+ private readonly _dataBytesSent: Record<ChannelId, number>;
14
15
 
15
16
  constructor(socket: Socket) {
16
17
  this._socket = socket;
@@ -18,6 +19,15 @@ class Handshake {
18
19
  [Http2Constants.ROOT_CHANNEL]: 0,
19
20
  [Http2Constants.REPLY_CHANNEL]: 0,
20
21
  };
22
+ this._dataBytesSent = {
23
+ [Http2Constants.ROOT_CHANNEL]: 0,
24
+ [Http2Constants.REPLY_CHANNEL]: 0,
25
+ };
26
+ }
27
+
28
+ /** DATA payload bytes sent per stream, so the transport can debit its send windows. */
29
+ get dataBytesSent(): Readonly<Record<ChannelId, number>> {
30
+ return {...this._dataBytesSent};
21
31
  }
22
32
 
23
33
  async sendFrame(frame: Buffer): Promise<void> {
@@ -45,9 +55,13 @@ class Handshake {
45
55
  body: data,
46
56
  };
47
57
 
48
- const encodedMessage: Buffer = encodeMessage(requestMessage);
49
- const dataFrame: DataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedMessage, []);
50
- await this.sendFrame(dataFrame.serialize());
58
+ await this.sendData(Http2Constants.ROOT_CHANNEL, requestMessage);
59
+ }
60
+
61
+ private async sendData(streamId: ChannelId, message: XPCMessage): Promise<void> {
62
+ const encoded: Buffer = encodeMessage(message);
63
+ this._dataBytesSent[streamId] += encoded.length;
64
+ await this.sendFrame(new DataFrame(streamId, encoded, []).serialize());
51
65
  }
52
66
 
53
67
  async perform(): Promise<void> {
@@ -98,9 +112,7 @@ class Handshake {
98
112
  id: 0,
99
113
  body: null,
100
114
  };
101
- const encodedDataMessage: Buffer = encodeMessage(dataMessage);
102
- const dataFrame: DataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedDataMessage, []);
103
- await this.sendFrame(dataFrame.serialize());
115
+ await this.sendData(Http2Constants.ROOT_CHANNEL, dataMessage);
104
116
  this._nextMessageId[Http2Constants.ROOT_CHANNEL]++;
105
117
 
106
118
  // Step 8: Open REPLY_CHANNEL with INIT_HANDSHAKE flags.
@@ -109,9 +121,7 @@ class Handshake {
109
121
  id: 0,
110
122
  body: null,
111
123
  };
112
- const encodedReplyMessage: Buffer = encodeMessage(replyMessage);
113
- const replyDataFrame: DataFrame = new DataFrame(Http2Constants.REPLY_CHANNEL, encodedReplyMessage, []);
114
- await this.sendFrame(replyDataFrame.serialize());
124
+ await this.sendData(Http2Constants.REPLY_CHANNEL, replyMessage);
115
125
  this._nextMessageId[Http2Constants.REPLY_CHANNEL]++;
116
126
 
117
127
  // Step 9: Send SETTINGS ACK frame.
@@ -1,8 +1,12 @@
1
+ import {Http2Constants} from './constants.js';
1
2
  import {InvalidDataError, WindowUpdateFrame} from './handshake-frames.js';
2
3
 
3
4
  const FRAME_HEADER_SIZE = 9;
4
5
  const FRAME_TYPE_DATA = 0x00;
6
+ const FRAME_TYPE_SETTINGS = 0x04;
7
+ const FRAME_TYPE_WINDOW_UPDATE = 0x08;
5
8
  const FLAG_PADDED = 0x08;
9
+ const SETTINGS_ENTRY_SIZE = 6;
6
10
 
7
11
  export interface ParsedDataFrame {
8
12
  readonly streamId: number;
@@ -10,7 +14,11 @@ export interface ParsedDataFrame {
10
14
  readonly bodyLen: number;
11
15
  }
12
16
 
13
- export type ParsedFrame = {readonly type: 'data'; readonly frame: ParsedDataFrame} | {readonly type: 'other'};
17
+ export type ParsedFrame =
18
+ | {readonly type: 'data'; readonly frame: ParsedDataFrame}
19
+ | {readonly type: 'settings'; readonly settings: Record<number, number>}
20
+ | {readonly type: 'windowUpdate'; readonly streamId: number; readonly increment: number}
21
+ | {readonly type: 'other'};
14
22
 
15
23
  /**
16
24
  * Incrementally parse HTTP/2 frames from a byte stream (RFC 7540).
@@ -55,6 +63,12 @@ function parseFrame(buffer: Buffer): ParsedFrame {
55
63
  const streamId = buffer.readUInt32BE(5) & 0x7fffffff;
56
64
  const body = buffer.subarray(FRAME_HEADER_SIZE, FRAME_HEADER_SIZE + length);
57
65
 
66
+ if (type === FRAME_TYPE_SETTINGS && !(flags & Http2Constants.FLAG_ACK)) {
67
+ return {type: 'settings', settings: parseSettings(body)};
68
+ }
69
+ if (type === FRAME_TYPE_WINDOW_UPDATE) {
70
+ return {type: 'windowUpdate', streamId, increment: body.readUInt32BE(0) & 0x7fffffff};
71
+ }
58
72
  if (type !== FRAME_TYPE_DATA) {
59
73
  return {type: 'other'};
60
74
  }
@@ -67,6 +81,16 @@ function parseFrame(buffer: Buffer): ParsedFrame {
67
81
  };
68
82
  }
69
83
 
84
+ /** SETTINGS body is a list of 16-bit identifier / 32-bit value pairs (RFC 7540 §6.5.1). */
85
+ function parseSettings(body: Buffer): Record<number, number> {
86
+ return Object.fromEntries(
87
+ Array.from({length: Math.floor(body.length / SETTINGS_ENTRY_SIZE)}, (_, i) => {
88
+ const offset = i * SETTINGS_ENTRY_SIZE;
89
+ return [body.readUInt16BE(offset), body.readUInt32BE(offset + 2)];
90
+ }),
91
+ );
92
+ }
93
+
70
94
  /**
71
95
  * Strip HTTP/2 DATA frame padding (RFC 7540 §6.1).
72
96
  * @throws {InvalidDataError} when padding length is invalid
@@ -3,6 +3,7 @@ import net from 'node:net';
3
3
 
4
4
  import {getLogger} from '../logger.js';
5
5
  import type {XPCDictionary} from '../types.js';
6
+ import {Http2Constants} from './constants.js';
6
7
  import {DataFrame} from './handshake-frames.js';
7
8
  import Handshake from './handshake.js';
8
9
  import {Http2FrameParser, buildWindowUpdateFrames} from './http2-frame-parser.js';
@@ -30,6 +31,11 @@ export class RemoteXpcFramedTransport extends EventEmitter {
30
31
  private connected = false;
31
32
  private closing = false;
32
33
  private desynced = false;
34
+ private peerMaxFrameSize: number = Http2Constants.DEFAULT_PEER_MAX_FRAME_SIZE;
35
+ private peerInitialWindowSize: number = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
36
+ private connectionSendWindow: number = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
37
+ private streamSendWindows = new Map<number, number>();
38
+ private sendQueue: {streamId: number; payload: Buffer}[] = [];
33
39
 
34
40
  constructor(address: [string, number]) {
35
41
  super();
@@ -58,7 +64,7 @@ export class RemoteXpcFramedTransport extends EventEmitter {
58
64
  return;
59
65
  }
60
66
 
61
- this.resetParsers();
67
+ this.resetConnectionState();
62
68
  const socket = net.createConnection({
63
69
  host: this.address[0],
64
70
  port: this.address[1],
@@ -76,7 +82,11 @@ export class RemoteXpcFramedTransport extends EventEmitter {
76
82
  }
77
83
 
78
84
  try {
79
- await new Handshake(socket).perform();
85
+ const handshake = new Handshake(socket);
86
+ await handshake.perform();
87
+ for (const [streamId, bytes] of Object.entries(handshake.dataBytesSent)) {
88
+ this.consumeSendWindow(Number(streamId), bytes);
89
+ }
80
90
  this.connected = true;
81
91
  } catch (error) {
82
92
  await this.close();
@@ -88,7 +98,71 @@ export class RemoteXpcFramedTransport extends EventEmitter {
88
98
  if (!this.socket?.writable) {
89
99
  throw new Error('RemoteXPC socket is not writable');
90
100
  }
91
- this.socket.write(new DataFrame(streamId, payload, []).serialize());
101
+ this.sendQueue.push({streamId, payload});
102
+ this.flushPendingSends();
103
+ }
104
+
105
+ /**
106
+ * Writes queued payloads as DATA frames no larger than the peer's max frame size
107
+ * or its send windows. Stops at the first blocked payload so ordering holds.
108
+ */
109
+ private flushPendingSends(): void {
110
+ const socket = this.socket;
111
+ while (socket?.writable && this.sendQueue.length > 0) {
112
+ const send = this.sendQueue[0];
113
+ const size = Math.min(
114
+ send.payload.length,
115
+ this.peerMaxFrameSize,
116
+ this.sendWindow(0),
117
+ this.sendWindow(send.streamId),
118
+ );
119
+ if (size <= 0 && send.payload.length > 0) {
120
+ return;
121
+ }
122
+ socket.write(new DataFrame(send.streamId, send.payload.subarray(0, size), []).serialize());
123
+ this.consumeSendWindow(send.streamId, size);
124
+ if (size === send.payload.length) {
125
+ this.sendQueue.shift();
126
+ } else {
127
+ send.payload = send.payload.subarray(size);
128
+ }
129
+ }
130
+ }
131
+
132
+ /** Stream 0 is the connection-level window. */
133
+ private sendWindow(streamId: number): number {
134
+ return streamId === 0
135
+ ? this.connectionSendWindow
136
+ : (this.streamSendWindows.get(streamId) ?? this.peerInitialWindowSize);
137
+ }
138
+
139
+ private adjustSendWindow(streamId: number, delta: number): void {
140
+ if (streamId === 0) {
141
+ this.connectionSendWindow += delta;
142
+ } else {
143
+ this.streamSendWindows.set(streamId, this.sendWindow(streamId) + delta);
144
+ }
145
+ }
146
+
147
+ private consumeSendWindow(streamId: number, bytes: number): void {
148
+ this.adjustSendWindow(0, -bytes);
149
+ this.adjustSendWindow(streamId, -bytes);
150
+ }
151
+
152
+ /** A new INITIAL_WINDOW_SIZE shifts every open stream's window by the delta (RFC 7540 §6.9.2). */
153
+ private applyPeerSettings(settings: Record<number, number>): void {
154
+ const maxFrameSize = settings[Http2Constants.SETTINGS_MAX_FRAME_SIZE];
155
+ if (maxFrameSize !== undefined) {
156
+ this.peerMaxFrameSize = maxFrameSize;
157
+ }
158
+ const initialWindowSize = settings[Http2Constants.SETTINGS_INITIAL_WINDOW_SIZE];
159
+ if (initialWindowSize !== undefined) {
160
+ const delta = initialWindowSize - this.peerInitialWindowSize;
161
+ this.peerInitialWindowSize = initialWindowSize;
162
+ for (const [streamId, window] of this.streamSendWindows) {
163
+ this.streamSendWindows.set(streamId, window + delta);
164
+ }
165
+ }
92
166
  }
93
167
 
94
168
  async close(): Promise<void> {
@@ -181,6 +255,16 @@ export class RemoteXpcFramedTransport extends EventEmitter {
181
255
  }
182
256
 
183
257
  for (const frame of frames) {
258
+ if (frame.type === 'settings') {
259
+ this.applyPeerSettings(frame.settings);
260
+ this.flushPendingSends();
261
+ continue;
262
+ }
263
+ if (frame.type === 'windowUpdate') {
264
+ this.adjustSendWindow(frame.streamId, frame.increment);
265
+ this.flushPendingSends();
266
+ continue;
267
+ }
184
268
  if (frame.type !== 'data') {
185
269
  continue;
186
270
  }
@@ -306,9 +390,14 @@ export class RemoteXpcFramedTransport extends EventEmitter {
306
390
  });
307
391
  }
308
392
 
309
- private resetParsers(): void {
393
+ private resetConnectionState(): void {
310
394
  this.frameParser = new Http2FrameParser();
311
395
  this.pendingXpcData.clear();
312
396
  this.desynced = false;
397
+ this.peerMaxFrameSize = Http2Constants.DEFAULT_PEER_MAX_FRAME_SIZE;
398
+ this.peerInitialWindowSize = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
399
+ this.connectionSendWindow = Http2Constants.DEFAULT_PEER_WINDOW_SIZE;
400
+ this.streamSendWindows.clear();
401
+ this.sendQueue = [];
313
402
  }
314
403
  }