@@ -36,9 +36,12 @@ const MAX_DATAGRAM_SIZE: usize = 1350;
36
36
const HTTP_REQ_STREAM_ID : u64 = 4 ;
37
37
38
38
struct TestData {
39
- num_messages : u8 ,
39
+ num_messages : i64 ,
40
40
}
41
41
42
+ const STREAMS : u64 = 10000 ;
43
+ const MESSAGES : i64 = 400 ;
44
+
42
45
fn main ( ) {
43
46
let mut buf = [ 0 ; 65535 ] ;
44
47
let mut out = [ 0 ; MAX_DATAGRAM_SIZE ] ;
@@ -204,50 +207,67 @@ fn main() {
204
207
if conn. is_established ( ) && !req_sent {
205
208
println ! ( "Init data" ) ;
206
209
// init application data
207
- match conn. stream_send ( 0 , b"" , false ) {
210
+ for n in 0 ..STREAMS {
211
+ let stream_id = n * 4 ;
212
+ match conn. stream_send ( stream_id, b"" , false ) {
208
213
Ok ( _) => { } ,
209
214
Err ( quiche:: Error :: Done ) => { } ,
210
215
Err ( e) => {
211
216
error ! ( "{} stream send failed {:?}" , conn. trace_id( ) , e) ;
212
217
return ;
213
218
} ,
214
219
} ;
215
- match conn. stream_init_application_data ( 0 , TestData { num_messages : 0 } ) {
220
+ match conn. stream_init_application_data ( stream_id , TestData { num_messages : MESSAGES } ) {
216
221
Ok ( _) => { } ,
217
222
Err ( quiche:: Error :: Done ) => { } ,
218
223
Err ( e) => {
219
224
error ! ( "{} stream init failed {:?}" , conn. trace_id( ) , e) ;
220
225
return ;
221
226
} ,
222
227
} ;
223
-
228
+ }
224
229
req_sent = true ;
225
230
}
226
231
227
232
// Process all readable streams.
228
233
for s in conn. readable ( ) {
229
234
while let Ok ( ( read, fin) ) = conn. stream_recv ( s, & mut buf) {
230
- println ! ( "received {} bytes" , read) ;
235
+ // println!("received {} bytes", read);
231
236
232
237
let stream_buf = & buf[ ..read] ;
233
238
234
- println ! (
235
- "stream {} has {} bytes (fin? {})" ,
236
- s,
237
- stream_buf. len( ) ,
238
- fin
239
- ) ;
239
+ // println!(
240
+ // "stream {} has {} bytes (fin? {})",
241
+ // s,
242
+ // stream_buf.len(),
243
+ // fin
244
+ // );
240
245
241
- println ! ( "{}" , unsafe {
242
- std:: str :: from_utf8_unchecked( stream_buf)
243
- } ) ;
246
+ // println!("{}", unsafe {
247
+ // std::str::from_utf8_unchecked(stream_buf)
248
+ // });
244
249
245
250
}
246
251
}
247
252
248
253
for s in conn. writable ( ) {
249
- println ! ( "Writing stream {}" , s) ;
250
- let written = match conn. stream_send ( s, b"Hello!" , true ) {
254
+ // println!("Writing stream {}", s);
255
+ // get the application data
256
+ let app_data = conn. stream_application_data ( s)
257
+ . unwrap ( )
258
+ . downcast_mut :: < TestData > ( )
259
+ . unwrap ( ) ;
260
+
261
+ // println!("numruns {}", app_data.num_messages);
262
+ // dec the number of messages
263
+ app_data. num_messages = app_data. num_messages - 1 ;
264
+
265
+ let fin = app_data. num_messages <= 1 ;
266
+ if ( fin) {
267
+ println ! { "finishing {}" , s} ;
268
+ }
269
+ if ( app_data. num_messages > 0 ) {
270
+ let written = match conn. stream_send ( s, b"Hello!" , fin) {
251
271
Ok ( v) => v,
252
272
253
273
Err ( quiche:: Error :: Done ) => 0 ,
@@ -257,7 +277,7 @@ fn main() {
257
277
return ;
258
278
} ,
259
279
} ;
260
- println ! ( "Written {} bytes" , written ) ;
280
+ }
261
281
}
262
282
263
283
// Generate outgoing QUIC packets and send them on the UDP socket, until
0 commit comments