Skip to content

Commit 543e43f

Browse files
Peter Wilhelmsson2hdddg
authored andcommitted
Ignore keep-alive chunks sent by server
New 4.1 feature, server can keep connections alive by periodically sending empty chunks. This should be ignored by chunking layer.
1 parent 28dd4c9 commit 543e43f

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

src/internal/chunking.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,18 @@ class Dechunker {
177177
if (header === 0) {
178178
// Message boundary
179179
let message
180-
if (this._currentMessage.length === 1) {
181-
message = this._currentMessage[0]
182-
} else {
183-
message = new CombinedBuffer(this._currentMessage)
180+
switch (this._currentMessage.length) {
181+
case 0:
182+
// Keep alive chunk, sent by server to keep network alive.
183+
return this.AWAITING_CHUNK
184+
case 1:
185+
// All data in one chunk, this signals the end of that chunk.
186+
message = this._currentMessage[0]
187+
break
188+
default:
189+
// A large chunk of data received, this signals that the last chunk has been received.
190+
message = new CombinedBuffer(this._currentMessage)
191+
break
184192
}
185193
this._currentMessage = []
186194
this.onmessage(message)

test/internal/chunking.test.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ describe('#unit Chunker', () => {
6565
})
6666
})
6767

68-
describe('Dechunker', () => {
68+
describe('#unit Dechunker', () => {
6969
it('should unchunk a simple message', () => {
7070
// Given
7171
const messages = []
@@ -124,6 +124,26 @@ describe('Dechunker', () => {
124124
expect(messages[0].toHex()).toBe('01 00 02 00 00 00 03 04 00 00 00 05')
125125
}
126126
})
127+
128+
it('should ignore empty chunks sent as keep alive', () => {
129+
const messages = []
130+
const dechunker = new Dechunker()
131+
dechunker.onmessage = buffer => {
132+
messages.push(buffer)
133+
}
134+
135+
dechunker.write(bytes(0, 0)) // Empty
136+
dechunker.write(bytes(0, 1, 10, 0, 0)) // Small message
137+
dechunker.write(bytes(0, 0)) // Empty
138+
dechunker.write(bytes(0, 1, 11, 0, 0)) // Small message
139+
dechunker.write(bytes(0, 0)) // Empty
140+
141+
expect(messages.length).toBe(2)
142+
expect(messages[0].length).toBe(1)
143+
expect(messages[0].readInt8()).toBe(10)
144+
expect(messages[1].length).toBe(1)
145+
expect(messages[1].readInt8()).toBe(11)
146+
})
127147
})
128148

129149
function bytes () {

0 commit comments

Comments
 (0)