MCPcopy Index your code
hub / github.com/nodejs/node / parseChannelMessages

Function parseChannelMessages

lib/internal/child_process/serialization.js:32–76  ·  view source on GitHub ↗
(channel, readData)

Source from the content-addressed store, hash-verified

30 },
31
32 *parseChannelMessages(channel, readData) {
33 if (readData.length === 0) return;
34
35 if (channel[kMessageBufferSize] && channel[kMessageBuffer][0].length < 4) {
36 // Message length split into two buffers, so let's concatenate it.
37 channel[kMessageBuffer][0] = Buffer.concat([channel[kMessageBuffer][0], readData]);
38 } else {
39 ArrayPrototypePush(channel[kMessageBuffer], readData);
40 }
41 channel[kMessageBufferSize] += readData.length;
42
43 // Index 0 should always be present because we just pushed data into it.
44 let messageBufferHead = channel[kMessageBuffer][0];
45 while (messageBufferHead.length >= 4) {
46 // We call `readUInt32BE` manually here, because this is faster than first converting
47 // it to a buffer and using `readUInt32BE` on that.
48 const fullMessageSize = ((
49 messageBufferHead[0] << 24 |
50 messageBufferHead[1] << 16 |
51 messageBufferHead[2] << 8 |
52 messageBufferHead[3]
53 ) >>> 0) + 4;
54
55 if (channel[kMessageBufferSize] < fullMessageSize) break;
56
57 const concatenatedBuffer = channel[kMessageBuffer].length === 1 ?
58 channel[kMessageBuffer][0] :
59 Buffer.concat(
60 channel[kMessageBuffer],
61 channel[kMessageBufferSize],
62 );
63
64 const serializedMessage =
65 TypedArrayPrototypeSubarray(concatenatedBuffer, 4, fullMessageSize);
66
67 messageBufferHead = TypedArrayPrototypeSubarray(concatenatedBuffer, fullMessageSize);
68 channel[kMessageBufferSize] = messageBufferHead.length;
69 channel[kMessageBuffer] =
70 channel[kMessageBufferSize] !== 0 ? [messageBufferHead] : [];
71
72 yield deserialize(serializedMessage);
73 }
74
75 channel.buffering = channel[kMessageBufferSize] > 0;
76 },
77
78 writeChannelMessage(channel, req, message, handle) {
79 // Pass the stable Buffer constructor so the native codec can classify Node

Callers 1

setupChannelFunction · 0.85

Calls 3

concatMethod · 0.80
deserializeFunction · 0.50
writeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…