@@ -36,9 +36,12 @@ const MAX_DATAGRAM_SIZE: usize = 1350;
3636const HTTP_REQ_STREAM_ID : u64 = 4 ;
3737
3838struct TestData {
39- num_messages : u8 ,
39+ num_messages : i64 ,
4040}
4141
42+ const STREAMS : u64 = 10000 ;
43+ const MESSAGES : i64 = 400 ;
44+
4245fn main ( ) {
4346 let mut buf = [ 0 ; 65535 ] ;
4447 let mut out = [ 0 ; MAX_DATAGRAM_SIZE ] ;
@@ -204,50 +207,67 @@ fn main() {
204207 if conn. is_established ( ) && !req_sent {
205208 println ! ( "Init data" ) ;
206209 // 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 ) {
208213 Ok ( _) => { } ,
209214 Err ( quiche:: Error :: Done ) => { } ,
210215 Err ( e) => {
211216 error ! ( "{} stream send failed {:?}" , conn. trace_id( ) , e) ;
212217 return ;
213218 } ,
214219 } ;
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 } ) {
216221 Ok ( _) => { } ,
217222 Err ( quiche:: Error :: Done ) => { } ,
218223 Err ( e) => {
219224 error ! ( "{} stream init failed {:?}" , conn. trace_id( ) , e) ;
220225 return ;
221226 } ,
222227 } ;
223-
228+ }
224229 req_sent = true ;
225230 }
226231
227232 // Process all readable streams.
228233 for s in conn. readable ( ) {
229234 while let Ok ( ( read, fin) ) = conn. stream_recv ( s, & mut buf) {
230- println ! ( "received {} bytes" , read) ;
235+ // println!("received {} bytes", read);
231236
232237 let stream_buf = & buf[ ..read] ;
233238
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+ // );
240245
241- println ! ( "{}" , unsafe {
242- std:: str :: from_utf8_unchecked( stream_buf)
243- } ) ;
246+ // println!("{}", unsafe {
247+ // std::str::from_utf8_unchecked(stream_buf)
248+ // });
244249
245250 }
246251 }
247252
248253 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) {
251271 Ok ( v) => v,
252272
253273 Err ( quiche:: Error :: Done ) => 0 ,
@@ -257,7 +277,7 @@ fn main() {
257277 return ;
258278 } ,
259279 } ;
260- println ! ( "Written {} bytes" , written ) ;
280+ }
261281 }
262282
263283 // Generate outgoing QUIC packets and send them on the UDP socket, until
0 commit comments