]> git.kaiwu.me - nginx.git/commitdiff
QUIC: multiple versions support.
authorSergey Kandaurov <pluknet@nginx.com>
Mon, 9 Nov 2020 21:23:04 +0000 (00:23 +0300)
committerSergey Kandaurov <pluknet@nginx.com>
Mon, 9 Nov 2020 21:23:04 +0000 (00:23 +0300)
Draft-29 and beyond are now treated as compatible versions.

src/event/ngx_event_quic.c
src/event/ngx_event_quic.h
src/event/ngx_event_quic_transport.c

index 4b0050d074c7044bab377dc1074109bd4fefb58c..a7e4748032cb536d8441e697528ce909e454fc84 100644 (file)
@@ -1163,9 +1163,7 @@ ngx_quic_negotiate_version(ngx_connection_t *c, ngx_quic_header_t *inpkt)
 {
     size_t             len;
     ngx_quic_header_t  pkt;
-
-    /* buffer size is calculated assuming a single supported version */
-    static u_char      buf[NGX_QUIC_MAX_LONG_HEADER + sizeof(uint32_t)];
+    static u_char      buf[NGX_QUIC_MAX_UDP_PAYLOAD_SIZE];
 
     ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
                    "sending version negotiation packet");
index 9078b60267d640d4b995d766385b2179768cc222..e8bf926a04d47d70886b078da101d4f25f5c9666 100644 (file)
@@ -16,7 +16,6 @@
 #ifndef NGX_QUIC_DRAFT_VERSION
 #define NGX_QUIC_DRAFT_VERSION               29
 #endif
-#define NGX_QUIC_VERSION  (0xff000000 + NGX_QUIC_DRAFT_VERSION)
 
 #define NGX_QUIC_MAX_SHORT_HEADER            25 /* 1 flags + 20 dcid + 4 pn */
 #define NGX_QUIC_MAX_LONG_HEADER             56
index 4248e867ae1cda19f26601dc654447b318f164bf..98c178ba002f37e35ce564df5cbac83ba97ea283 100644 (file)
@@ -56,6 +56,8 @@
      : ((uint64_t) value) <= 1073741823 ?  4                                  \
      : 8)
 
+#define NGX_QUIC_VERSION(c)       (0xff000000 + (c))
+
 
 static u_char *ngx_quic_parse_int(u_char *pos, u_char *end, uint64_t *out);
 static void ngx_quic_build_int(u_char **pos, uint64_t value);
@@ -101,9 +103,18 @@ static ngx_int_t ngx_quic_parse_transport_param(u_char *p, u_char *end,
     uint16_t id, ngx_quic_tp_t *dst);
 
 
-/* currently only single version (selected at compile-time) is supported */
 uint32_t  ngx_quic_versions[] = {
-    NGX_QUIC_VERSION
+#if (NGX_QUIC_DRAFT_VERSION >= 29)
+    /* pretend we support all versions in range draft-29..v1 */
+    NGX_QUIC_VERSION(29),
+    NGX_QUIC_VERSION(30),
+    NGX_QUIC_VERSION(31),
+    NGX_QUIC_VERSION(32),
+    /* QUICv1 */
+    0x00000001
+#else
+    NGX_QUIC_VERSION(NGX_QUIC_DRAFT_VERSION)
+#endif
 };
 
 #define NGX_QUIC_NVERSIONS \