Skip to content

Commit 5f7901b

Browse files
committed
quic: add support for version advertisement
1 parent a34e7b3 commit 5f7901b

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

src/quic/session.cc

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ void ngtcp2_debug_log(void* user_data, const char* fmt, ...) {
216216
va_end(ap);
217217
}
218218

219-
template <typename Opt, PreferredAddress::Policy Opt::* member>
219+
template <typename Opt, PreferredAddress::Policy Opt::*member>
220220
bool SetOption(Environment* env,
221221
Opt* options,
222222
const Local<Object>& object,
@@ -231,7 +231,7 @@ bool SetOption(Environment* env,
231231
return true;
232232
}
233233

234-
template <typename Opt, TLSContext::Options Opt::* member>
234+
template <typename Opt, TLSContext::Options Opt::*member>
235235
bool SetOption(Environment* env,
236236
Opt* options,
237237
const Local<Object>& object,
@@ -246,7 +246,7 @@ bool SetOption(Environment* env,
246246
return true;
247247
}
248248

249-
template <typename Opt, TransportParams::Options Opt::* member>
249+
template <typename Opt, TransportParams::Options Opt::*member>
250250
bool SetOption(Environment* env,
251251
Opt* options,
252252
const Local<Object>& object,
@@ -261,7 +261,7 @@ bool SetOption(Environment* env,
261261
return true;
262262
}
263263

264-
template <typename Opt, ngtcp2_cc_algo Opt::* member>
264+
template <typename Opt, ngtcp2_cc_algo Opt::*member>
265265
bool SetOption(Environment* env,
266266
Opt* options,
267267
const Local<Object>& object,
@@ -327,6 +327,20 @@ Session::Config::Config(Environment* env,
327327
ngtcp2_settings_default(&settings);
328328
settings.initial_ts = uv_hrtime();
329329

330+
// Advertise all versions ngtcp2 supports for compatible version
331+
// negotiation (RFC 9368). The preferred list orders the newest
332+
// version first so that negotiation upgrades when possible. The
333+
// initial packet version (options.version) defaults to V1 for
334+
// maximum compatibility with peers that don't support version
335+
// negotiation.
336+
static const uint32_t kSupportedVersions[] = {NGTCP2_PROTO_VER_V2,
337+
NGTCP2_PROTO_VER_V1};
338+
339+
settings.preferred_versions = kSupportedVersions;
340+
settings.preferred_versionslen = std::size(kSupportedVersions);
341+
settings.available_versions = kSupportedVersions;
342+
settings.available_versionslen = std::size(kSupportedVersions);
343+
330344
// TODO(@jasnell): Path MTU Discovery is disabled because libuv does not
331345
// currently expose the IP_DONTFRAG / IP_MTU_DISCOVER socket options
332346
// needed for PMTUD probes to work correctly. Revisit when libuv adds

0 commit comments

Comments
 (0)