@@ -8909,6 +8909,8 @@ pub struct TransportParams {
89098909 pub retry_source_connection_id : Option < ConnectionId < ' static > > ,
89108910 /// DATAGRAM frame extension parameter, if any.
89118911 pub max_datagram_frame_size : Option < u64 > ,
8912+ /// Information for version negotiation, if any.
8913+ pub version_information : Option < ( u32 , Option < Vec < u32 > > ) > ,
89128914 /// Unknown peer transport parameters and values, if any.
89138915 pub unknown_params : Option < UnknownTransportParameters > ,
89148916 // pub preferred_address: ...,
@@ -8934,6 +8936,7 @@ impl Default for TransportParams {
89348936 initial_source_connection_id : None ,
89358937 retry_source_connection_id : None ,
89368938 max_datagram_frame_size : None ,
8939+ version_information : None ,
89378940 unknown_params : Default :: default ( ) ,
89388941 }
89398942 }
@@ -9094,6 +9097,18 @@ impl TransportParams {
90949097 tp. max_datagram_frame_size = Some ( val. get_varint ( ) ?) ;
90959098 } ,
90969099
9100+ 0x0011 => {
9101+ let chosen_version = val. get_u32 ( ) ?;
9102+
9103+ let mut available_versions: Option < Vec < u32 > > = None ;
9104+ while val. off ( ) < val. len ( ) {
9105+ let version = val. get_u32 ( ) ?;
9106+ available_versions. get_or_insert_default ( ) . push ( version) ;
9107+ }
9108+ tp. version_information =
9109+ Some ( ( chosen_version, available_versions) ) ;
9110+ } ,
9111+
90979112 // Track unknown transport parameters specially.
90989113 unknown_tp_id => {
90999114 if let Some ( unknown_params) = & mut tp. unknown_params {
@@ -9279,6 +9294,20 @@ impl TransportParams {
92799294 b. put_varint ( max_datagram_frame_size) ?;
92809295 }
92819296
9297+ if let Some ( ( left, right) ) = & tp. version_information {
9298+ TransportParams :: encode_param (
9299+ & mut b,
9300+ 0x0011 ,
9301+ 4 + 4 * right. as_ref ( ) . map ( |r| r. len ( ) ) . unwrap_or_default ( ) ,
9302+ ) ?;
9303+ b. put_u32 ( * left) ?;
9304+ if let Some ( available_versions) = & right {
9305+ for available_version in available_versions {
9306+ b. put_u32 ( * available_version) ?;
9307+ }
9308+ }
9309+ }
9310+
92829311 let out_len = b. off ( ) ;
92839312
92849313 Ok ( & mut out[ ..out_len] )
0 commit comments