@@ -23,27 +23,30 @@ use std::{
23
23
24
24
use neqo_common:: { event:: Provider , hex, qdebug, qerror, qinfo, qwarn, Datagram , Header } ;
25
25
use neqo_crypto:: { AuthenticationStatus , ResumptionToken } ;
26
- use neqo_http3:: { Error , Http3Client , Http3ClientEvent , Http3Parameters , Http3State , Priority } ;
26
+ use neqo_http3:: {
27
+ ConnectUdpEvent , Error , Http3Client , Http3ClientEvent , Http3Parameters , Http3State , Priority ,
28
+ } ;
27
29
use neqo_transport:: {
28
- AppError , CloseReason , Connection , EmptyConnectionIdGenerator , Error as TransportError ,
29
- OutputBatch , RandomConnectionIdGenerator , StreamId ,
30
+ AppError , CloseReason , Connection , DatagramTracking , EmptyConnectionIdGenerator ,
31
+ Error as TransportError , OutputBatch , RandomConnectionIdGenerator , StreamId ,
30
32
} ;
31
33
use rustc_hash:: FxHashMap as HashMap ;
32
34
use url:: Url ;
33
35
34
- use super :: { get_output_file , qlog_new, Args , CloseState , Res } ;
35
- use crate :: { send_data:: SendData , STREAM_IO_BUFFER_SIZE } ;
36
+ use super :: { qlog_new, Args , CloseState , Res } ;
37
+ use crate :: { client :: get_output_file , send_data:: SendData , STREAM_IO_BUFFER_SIZE } ;
36
38
37
- pub struct Handler < ' a > {
39
+ pub struct Handler {
38
40
#[ expect( clippy:: struct_field_names, reason = "This name is more descriptive." ) ]
39
- url_handler : UrlHandler < ' a > ,
41
+ url_handler : UrlHandler ,
40
42
token : Option < ResumptionToken > ,
41
43
output_read_data : bool ,
42
44
read_buffer : Vec < u8 > ,
43
45
}
44
46
45
- impl < ' a > Handler < ' a > {
46
- pub ( crate ) fn new ( url_queue : VecDeque < Url > , args : & ' a Args ) -> Self {
47
+ impl Handler {
48
+ pub ( crate ) fn new ( url_queue : VecDeque < Url > , args : Args ) -> Self {
49
+ let output_read_data = args. output_read_data ;
47
50
let url_handler = UrlHandler {
48
51
url_queue,
49
52
handled_urls : Vec :: new ( ) ,
@@ -55,7 +58,7 @@ impl<'a> Handler<'a> {
55
58
Self {
56
59
url_handler,
57
60
token : None ,
58
- output_read_data : args . output_read_data ,
61
+ output_read_data,
59
62
read_buffer : vec ! [ 0 ; STREAM_IO_BUFFER_SIZE ] ,
60
63
}
61
64
}
@@ -82,7 +85,10 @@ pub fn create_client(
82
85
cid_generator,
83
86
local_addr,
84
87
remote_addr,
85
- args. shared . quic_parameters . get ( args. shared . alpn . as_str ( ) ) ,
88
+ args. shared
89
+ . quic_parameters
90
+ . get ( args. shared . alpn . as_str ( ) )
91
+ . datagram_size ( 1500 ) ,
86
92
Instant :: now ( ) ,
87
93
) ?;
88
94
let ciphers = args. get_ciphers ( ) ;
@@ -95,7 +101,9 @@ pub fn create_client(
95
101
. max_table_size_encoder ( args. shared . max_table_size_encoder )
96
102
. max_table_size_decoder ( args. shared . max_table_size_decoder )
97
103
. max_blocked_streams ( args. shared . max_blocked_streams )
98
- . max_concurrent_push_streams ( args. max_concurrent_push_streams ) ,
104
+ . max_concurrent_push_streams ( args. max_concurrent_push_streams )
105
+ . http3_datagram ( true )
106
+ . connect ( true ) ,
99
107
) ;
100
108
101
109
let qlog = qlog_new ( args, hostname, client. connection_id ( ) ) ?;
@@ -140,6 +148,7 @@ impl super::Client for Http3Client {
140
148
now : Instant ,
141
149
max_datagrams : NonZeroUsize ,
142
150
) -> OutputBatch {
151
+ println ! ( "==== client process_multiple_output ====" ) ;
143
152
self . process_multiple_output ( now, max_datagrams)
144
153
}
145
154
@@ -148,6 +157,7 @@ impl super::Client for Http3Client {
148
157
dgrams : impl IntoIterator < Item = Datagram < & ' a mut [ u8 ] > > ,
149
158
now : Instant ,
150
159
) {
160
+ println ! ( "==== client process_multiple_input ====" ) ;
151
161
self . process_multiple_input ( dgrams, now) ;
152
162
}
153
163
@@ -167,7 +177,7 @@ impl super::Client for Http3Client {
167
177
}
168
178
}
169
179
170
- impl Handler < ' _ > {
180
+ impl Handler {
171
181
fn reinit ( & mut self ) {
172
182
for url in self . url_handler . handled_urls . drain ( ..) {
173
183
self . url_handler . url_queue . push_front ( url) ;
@@ -177,7 +187,7 @@ impl Handler<'_> {
177
187
}
178
188
}
179
189
180
- impl super :: Handler for Handler < ' _ > {
190
+ impl super :: Handler for Handler {
181
191
type Client = Http3Client ;
182
192
183
193
fn handle ( & mut self , client : & mut Http3Client ) -> Res < bool > {
@@ -258,6 +268,25 @@ impl super::Handler for Handler<'_> {
258
268
self . url_handler . process_urls ( client) ;
259
269
}
260
270
Http3ClientEvent :: ResumptionToken ( t) => self . token = Some ( t) ,
271
+ Http3ClientEvent :: ConnectUdp ( event) => match event {
272
+ ConnectUdpEvent :: Negotiated ( _) => todo ! ( ) ,
273
+ ConnectUdpEvent :: Session {
274
+ stream_id,
275
+ status : _,
276
+ headers : _,
277
+ } => {
278
+ todo ! ( ) ;
279
+ }
280
+ ConnectUdpEvent :: SessionClosed {
281
+ stream_id : _,
282
+ reason : _,
283
+ headers : _,
284
+ } => todo ! ( ) ,
285
+ ConnectUdpEvent :: Datagram {
286
+ session_id,
287
+ datagram,
288
+ } => todo ! ( ) ,
289
+ } ,
261
290
_ => {
262
291
qwarn ! ( "Unhandled event {event:?}" ) ;
263
292
}
@@ -363,15 +392,15 @@ impl StreamHandler for UploadStreamHandler {
363
392
}
364
393
}
365
394
366
- struct UrlHandler < ' a > {
395
+ struct UrlHandler {
367
396
url_queue : VecDeque < Url > ,
368
397
handled_urls : Vec < Url > ,
369
398
stream_handlers : HashMap < StreamId , Box < dyn StreamHandler > > ,
370
399
all_paths : Vec < PathBuf > ,
371
- args : & ' a Args ,
400
+ args : Args ,
372
401
}
373
402
374
- impl UrlHandler < ' _ > {
403
+ impl UrlHandler {
375
404
fn stream_handler ( & mut self , stream_id : StreamId ) -> Option < & mut Box < dyn StreamHandler > > {
376
405
self . stream_handlers . get_mut ( & stream_id)
377
406
}
0 commit comments