@@ -85,12 +85,15 @@ function setup(opts, cb) {
85
85
const reader = stream . readable . getReader ( ) ;
86
86
const writer = stream . writable . getWriter ( ) ;
87
87
88
- engine . on ( "connection" , ( socket ) => {
88
+ engine . on ( "connection" , async ( socket ) => {
89
+ await reader . read ( ) ; // header
90
+ await reader . read ( ) ; // payload (handshake)
91
+
89
92
cb ( { engine, h3Server, socket, client, stream, reader, writer } ) ;
90
93
} ) ;
91
94
95
+ await writer . write ( Uint8Array . of ( 1 ) ) ;
92
96
await writer . write ( TEXT_ENCODER . encode ( "0" ) ) ;
93
- await reader . read ( ) ; // handshake
94
97
} ) ;
95
98
}
96
99
@@ -130,19 +133,20 @@ describe("WebTransport", () => {
130
133
const writer = stream . writable . getWriter ( ) ;
131
134
132
135
( async function read ( ) {
133
- const { done , value } = await reader . read ( ) ;
136
+ const header = await reader . read ( ) ;
134
137
135
- if ( done ) {
136
- return ;
137
- }
138
+ expect ( header . value ) . to . eql ( Uint8Array . of ( 107 ) ) ;
139
+
140
+ const { value } = await reader . read ( ) ;
138
141
139
142
const handshake = TEXT_DECODER . decode ( value ) ;
140
143
expect ( handshake . startsWith ( "0{" ) ) . to . be ( true ) ;
141
144
142
145
partialDone ( ) ;
143
146
} ) ( ) ;
144
147
145
- await writer . write ( TEXT_ENCODER . encode ( "0" ) ) ;
148
+ writer . write ( Uint8Array . of ( 1 ) ) ;
149
+ writer . write ( TEXT_ENCODER . encode ( "0" ) ) ;
146
150
} ) ;
147
151
} ) ;
148
152
@@ -194,6 +198,10 @@ describe("WebTransport", () => {
194
198
const writer = stream . writable . getWriter ( ) ;
195
199
196
200
( async function read ( ) {
201
+ const header = await reader . read ( ) ;
202
+
203
+ expect ( header . value ) . to . eql ( Uint8Array . of ( 6 ) ) ;
204
+
197
205
const { done, value } = await reader . read ( ) ;
198
206
199
207
if ( done ) {
@@ -206,10 +214,13 @@ describe("WebTransport", () => {
206
214
partialDone ( ) ;
207
215
} ) ( ) ;
208
216
217
+ await writer . write ( Uint8Array . of ( 31 ) ) ;
209
218
await writer . write (
210
219
TEXT_ENCODER . encode ( `0{"sid":"${ payload . sid } "}` )
211
220
) ;
221
+ await writer . write ( Uint8Array . of ( 6 ) ) ;
212
222
await writer . write ( TEXT_ENCODER . encode ( `2probe` ) ) ;
223
+ await writer . write ( Uint8Array . of ( 1 ) ) ;
213
224
await writer . write ( TEXT_ENCODER . encode ( `5` ) ) ;
214
225
} ) ;
215
226
}
@@ -281,10 +292,14 @@ describe("WebTransport", () => {
281
292
} ,
282
293
async ( { engine, h3Server, reader, writer } ) => {
283
294
for ( let i = 0 ; i < 5 ; i ++ ) {
295
+ const header = await reader . read ( ) ;
296
+ expect ( header . value ) . to . eql ( Uint8Array . of ( 1 ) ) ;
297
+
284
298
const packet = await reader . read ( ) ;
285
299
const value = TEXT_DECODER . decode ( packet . value ) ;
286
300
expect ( value ) . to . eql ( "2" ) ;
287
301
302
+ writer . write ( Uint8Array . of ( 1 ) ) ;
288
303
writer . write ( TEXT_ENCODER . encode ( "3" ) ) ;
289
304
}
290
305
@@ -338,6 +353,7 @@ describe("WebTransport", () => {
338
353
success ( engine , h3Server , done ) ;
339
354
} ) ;
340
355
356
+ writer . write ( Uint8Array . of ( 6 ) ) ;
341
357
writer . write ( TEXT_ENCODER . encode ( "4hello" ) ) ;
342
358
} ) ;
343
359
} ) ;
@@ -346,6 +362,9 @@ describe("WebTransport", () => {
346
362
setup ( { } , async ( { engine, h3Server, socket, reader } ) => {
347
363
socket . send ( "hello" ) ;
348
364
365
+ const header = await reader . read ( ) ;
366
+ expect ( header . value ) . to . eql ( Uint8Array . of ( 6 ) ) ;
367
+
349
368
const { value } = await reader . read ( ) ;
350
369
const decoded = TEXT_DECODER . decode ( value ) ;
351
370
expect ( decoded ) . to . eql ( "4hello" ) ;
@@ -363,6 +382,7 @@ describe("WebTransport", () => {
363
382
success ( engine , h3Server , done ) ;
364
383
} ) ;
365
384
385
+ writer . write ( Uint8Array . of ( 131 ) ) ;
366
386
writer . write ( Uint8Array . of ( 1 , 2 , 3 ) ) ;
367
387
} ) ;
368
388
} ) ;
@@ -371,64 +391,49 @@ describe("WebTransport", () => {
371
391
setup ( { } , async ( { engine, h3Server, socket, reader } ) => {
372
392
socket . send ( Buffer . of ( 1 , 2 , 3 ) ) ;
373
393
374
- const { value } = await reader . read ( ) ;
375
- expect ( value ) . to . eql ( Uint8Array . of ( 1 , 2 , 3 ) ) ;
376
-
377
- success ( engine , h3Server , done ) ;
378
- } ) ;
379
- } ) ;
380
-
381
- it ( "should send some binary data (client to server) (with binary flag)" , ( done ) => {
382
- setup ( { } , async ( { engine, h3Server, socket, writer } ) => {
383
- socket . on ( "data" , ( data ) => {
384
- expect ( Buffer . isBuffer ( data ) ) . to . be ( true ) ;
385
- expect ( data ) . to . eql ( Buffer . of ( 48 , 1 , 2 , 3 ) ) ;
386
-
387
- success ( engine , h3Server , done ) ;
388
- } ) ;
389
-
390
- writer . write ( Uint8Array . of ( 54 ) ) ;
391
- writer . write ( Uint8Array . of ( 48 , 1 , 2 , 3 ) ) ;
392
- } ) ;
393
- } ) ;
394
-
395
- it ( "should send some binary data (server to client) (with binary flag)" , ( done ) => {
396
- setup ( { } , async ( { engine, h3Server, socket, reader } ) => {
397
- socket . send ( Buffer . of ( 48 , 1 , 2 , 3 ) ) ;
398
-
399
394
const header = await reader . read ( ) ;
400
- expect ( header . value ) . to . eql ( Uint8Array . of ( 54 ) ) ;
395
+ expect ( header . value ) . to . eql ( Uint8Array . of ( 131 ) ) ;
401
396
402
397
const { value } = await reader . read ( ) ;
403
- expect ( value ) . to . eql ( Uint8Array . of ( 48 , 1 , 2 , 3 ) ) ;
398
+ expect ( value ) . to . eql ( Uint8Array . of ( 1 , 2 , 3 ) ) ;
404
399
405
400
success ( engine , h3Server , done ) ;
406
401
} ) ;
407
402
} ) ;
408
403
409
- it ( "should send some binary data (client to server) (binary flag )" , ( done ) => {
404
+ it ( "should send some big binary data (client to server)" , ( done ) => {
410
405
setup ( { } , async ( { engine, h3Server, socket, writer } ) => {
406
+ const payload = Buffer . allocUnsafe ( 1e6 ) ;
407
+
411
408
socket . on ( "data" , ( data ) => {
412
409
expect ( Buffer . isBuffer ( data ) ) . to . be ( true ) ;
413
- expect ( data ) . to . eql ( Buffer . of ( 54 ) ) ;
410
+ expect ( data ) . to . eql ( payload ) ;
414
411
415
412
success ( engine , h3Server , done ) ;
416
413
} ) ;
417
414
418
- writer . write ( Uint8Array . of ( 54 ) ) ;
419
- writer . write ( Uint8Array . of ( 54 ) ) ;
415
+ writer . write ( Uint8Array . of ( 255 , 0 , 0 , 0 , 0 , 0 , 15 , 66 , 64 ) ) ;
416
+ writer . write ( payload ) ;
420
417
} ) ;
421
418
} ) ;
422
419
423
- it ( "should send some binary data (server to client) (binary flag )" , ( done ) => {
420
+ it ( "should send some big binary data (server to client)" , ( done ) => {
424
421
setup ( { } , async ( { engine, h3Server, socket, reader } ) => {
425
- socket . send ( Buffer . of ( 54 ) ) ;
422
+ const payload = Buffer . allocUnsafe ( 1e6 ) ;
423
+
424
+ socket . send ( payload ) ;
426
425
427
426
const header = await reader . read ( ) ;
428
- expect ( header . value ) . to . eql ( Uint8Array . of ( 54 ) ) ;
427
+ expect ( header . value ) . to . eql (
428
+ Uint8Array . of ( 255 , 0 , 0 , 0 , 0 , 0 , 15 , 66 , 64 )
429
+ ) ;
429
430
430
- const { value } = await reader . read ( ) ;
431
- expect ( value ) . to . eql ( Uint8Array . of ( 54 ) ) ;
431
+ const chunk1 = await reader . read ( ) ;
432
+ // the size of the chunk is implementation-specific (maxDatagramSize)
433
+ expect ( chunk1 . value ) . to . eql ( payload . slice ( 0 , 1228 ) ) ;
434
+
435
+ const chunk2 = await reader . read ( ) ;
436
+ expect ( chunk2 . value ) . to . eql ( payload . slice ( 1228 , 2456 ) ) ;
432
437
433
438
success ( engine , h3Server , done ) ;
434
439
} ) ;
0 commit comments