annotate src/event/quic/ngx_event_quic_frames.c @ 8766:03b40440c13d quic

QUIC: renamed input handling functions. Now these functions have names ngx_quic_handle_XXX(): - ngx_quic_process_stateless_reset() -> ngx_quic_handle_stateless_reset() - ngx_quic_input() -> ngx_quic_handle_datagram() - ngx_quic_process_packet() -> ngx_quic_handle_packet() - ngx_quic_process_payload() -> ngx_quic_handle_payload()
author Roman Arutyunyan <arut@nginx.com>
date Mon, 27 Dec 2021 16:15:28 +0300
parents fb811b6c76ee
children 5acd0d89d8c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 */
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 #include <ngx_config.h>
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #include <ngx_core.h>
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 #include <ngx_event.h>
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10 #include <ngx_event_quic_connection.h>
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13 #define NGX_QUIC_BUFFER_SIZE 4096
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
14
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
15 #define ngx_quic_buf_refs(b) (b)->shadow->num
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
16 #define ngx_quic_buf_inc_refs(b) ngx_quic_buf_refs(b)++
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
17 #define ngx_quic_buf_dec_refs(b) ngx_quic_buf_refs(b)--
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
18 #define ngx_quic_buf_set_refs(b, v) ngx_quic_buf_refs(b) = v
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
19
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
20
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
21 static ngx_buf_t *ngx_quic_alloc_buf(ngx_connection_t *c);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
22 static void ngx_quic_free_buf(ngx_connection_t *c, ngx_buf_t *b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
23 static ngx_buf_t *ngx_quic_clone_buf(ngx_connection_t *c, ngx_buf_t *b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
24
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
25
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
26 static ngx_buf_t *
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
27 ngx_quic_alloc_buf(ngx_connection_t *c)
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
28 {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
29 u_char *p;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
30 ngx_buf_t *b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
31 ngx_quic_connection_t *qc;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
32
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
33 qc = ngx_quic_get_connection(c);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
34
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
35 b = qc->free_bufs;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
36
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
37 if (b) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
38 qc->free_bufs = b->shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
39 p = b->start;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
40
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
41 } else {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
42 b = qc->free_shadow_bufs;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
43
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
44 if (b) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
45 qc->free_shadow_bufs = b->shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
46
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
47 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
48 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
49 "quic use shadow buffer n:%ui %ui",
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
50 ++qc->nbufs, --qc->nshadowbufs);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
51 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
52
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
53 } else {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
54 b = ngx_palloc(c->pool, sizeof(ngx_buf_t));
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
55 if (b == NULL) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
56 return NULL;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
57 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
58
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
59 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
60 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
61 "quic new buffer n:%ui", ++qc->nbufs);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
62 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
63 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
64
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
65 p = ngx_pnalloc(c->pool, NGX_QUIC_BUFFER_SIZE);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
66 if (p == NULL) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
67 return NULL;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
68 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
69 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
70
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
71 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
72 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic alloc buffer %p", b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
73 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
74
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
75 ngx_memzero(b, sizeof(ngx_buf_t));
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
76
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
77 b->tag = (ngx_buf_tag_t) &ngx_quic_alloc_buf;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
78 b->temporary = 1;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
79 b->shadow = b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
80
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
81 b->start = p;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
82 b->pos = p;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
83 b->last = p;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
84 b->end = p + NGX_QUIC_BUFFER_SIZE;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
85
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
86 ngx_quic_buf_set_refs(b, 1);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
87
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
88 return b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
89 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
90
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
91
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
92 static void
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
93 ngx_quic_free_buf(ngx_connection_t *c, ngx_buf_t *b)
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
94 {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
95 ngx_buf_t *shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
96 ngx_quic_connection_t *qc;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
97
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
98 qc = ngx_quic_get_connection(c);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
99
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
100 ngx_quic_buf_dec_refs(b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
101
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
102 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
103 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
104 "quic free buffer %p r:%ui",
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
105 b, (ngx_uint_t) ngx_quic_buf_refs(b));
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
106 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
107
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
108 shadow = b->shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
109
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
110 if (ngx_quic_buf_refs(b) == 0) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
111 shadow->shadow = qc->free_bufs;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
112 qc->free_bufs = shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
113 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
114
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
115 if (b != shadow) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
116 b->shadow = qc->free_shadow_bufs;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
117 qc->free_shadow_bufs = b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
118 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
119
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
120 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
121
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
122
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
123 static ngx_buf_t *
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
124 ngx_quic_clone_buf(ngx_connection_t *c, ngx_buf_t *b)
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
125 {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
126 ngx_buf_t *nb;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
127 ngx_quic_connection_t *qc;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
128
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
129 qc = ngx_quic_get_connection(c);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
130
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
131 nb = qc->free_shadow_bufs;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
132
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
133 if (nb) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
134 qc->free_shadow_bufs = nb->shadow;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
135
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
136 } else {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
137 nb = ngx_palloc(c->pool, sizeof(ngx_buf_t));
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
138 if (nb == NULL) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
139 return NULL;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
140 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
141
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
142 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
143 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
144 "quic new shadow buffer n:%ui", ++qc->nshadowbufs);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
145 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
146 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
147
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
148 *nb = *b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
149
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
150 ngx_quic_buf_inc_refs(b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
151
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
152 #ifdef NGX_QUIC_DEBUG_ALLOC
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
153 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
154 "quic clone buffer %p %p r:%ui",
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
155 b, nb, (ngx_uint_t) ngx_quic_buf_refs(b));
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
156 #endif
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
157
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
158 return nb;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
159 }
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
160
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162 ngx_quic_frame_t *
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163 ngx_quic_alloc_frame(ngx_connection_t *c)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 ngx_queue_t *q;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 ngx_quic_frame_t *frame;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167 ngx_quic_connection_t *qc;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 qc = ngx_quic_get_connection(c);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171 if (!ngx_queue_empty(&qc->free_frames)) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173 q = ngx_queue_head(&qc->free_frames);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 frame = ngx_queue_data(q, ngx_quic_frame_t, queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176 ngx_queue_remove(&frame->queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178 #ifdef NGX_QUIC_DEBUG_ALLOC
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180 "quic reuse frame n:%ui", qc->nframes);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181 #endif
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182
8645
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
183 } else if (qc->nframes < 10000) {
8504
6c213bec71c2 QUIC: fixed double memzero of new frames in ngx_quic_alloc_frame().
Sergey Kandaurov <pluknet@nginx.com>
parents: 8442
diff changeset
184 frame = ngx_palloc(c->pool, sizeof(ngx_quic_frame_t));
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 if (frame == NULL) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 return NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189 ++qc->nframes;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190
8645
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
191 #ifdef NGX_QUIC_DEBUG_ALLOC
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 "quic alloc frame n:%ui", qc->nframes);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 #endif
8645
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
195
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
196 } else {
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
197 ngx_log_error(NGX_LOG_INFO, c->log, 0, "quic flood detected");
404de224517e QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents: 8545
diff changeset
198 return NULL;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 ngx_memzero(frame, sizeof(ngx_quic_frame_t));
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203 return frame;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
207 void
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 ngx_quic_free_frame(ngx_connection_t *c, ngx_quic_frame_t *frame)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 ngx_quic_connection_t *qc;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212 qc = ngx_quic_get_connection(c);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 if (frame->data) {
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
215 ngx_quic_free_chain(c, frame->data);
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 ngx_queue_insert_head(&qc->free_frames, &frame->queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 #ifdef NGX_QUIC_DEBUG_ALLOC
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222 "quic free frame n:%ui", qc->nframes);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 #endif
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226
8439
f52a2b77d406 QUIC: generic buffering for stream input.
Roman Arutyunyan <arut@nginx.com>
parents: 8413
diff changeset
227 void
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
228 ngx_quic_trim_chain(ngx_chain_t *in, size_t size)
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
229 {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
230 size_t n;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
231 ngx_buf_t *b;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
232
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
233 while (in && size > 0) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
234 b = in->buf;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
235 n = ngx_min((size_t) (b->last - b->pos), size);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
236
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
237 b->pos += n;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
238 size -= n;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
239
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
240 if (b->pos == b->last) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
241 in = in->next;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
242 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
243 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
244 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
245
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
246
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
247 void
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
248 ngx_quic_free_chain(ngx_connection_t *c, ngx_chain_t *in)
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 {
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
250 ngx_chain_t *cl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252 while (in) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 cl = in;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 in = in->next;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
256 ngx_quic_free_buf(c, cl->buf);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
257 ngx_free_chain(c->pool, cl);
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
260
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
261
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
262 void
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 ngx_quic_free_frames(ngx_connection_t *c, ngx_queue_t *frames)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
264 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 ngx_queue_t *q;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
266 ngx_quic_frame_t *f;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
267
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
268 do {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 q = ngx_queue_head(frames);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 if (q == ngx_queue_sentinel(frames)) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
272 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275 ngx_queue_remove(q);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 f = ngx_queue_data(q, ngx_quic_frame_t, queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279 ngx_quic_free_frame(c, f);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280 } while (1);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
281 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
282
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
284 void
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
285 ngx_quic_queue_frame(ngx_quic_connection_t *qc, ngx_quic_frame_t *frame)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
286 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
287 ngx_quic_send_ctx_t *ctx;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
289 ctx = ngx_quic_get_send_ctx(qc, frame->level);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
290
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
291 ngx_queue_insert_tail(&ctx->frames, &frame->queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
292
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
293 frame->len = ngx_quic_create_frame(NULL, frame);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
294 /* always succeeds */
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
295
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
296 if (qc->closing) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
297 return;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
298 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
299
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
300 ngx_post_event(&qc->push, &ngx_posted_events);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
303
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 ngx_int_t
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
305 ngx_quic_split_frame(ngx_connection_t *c, ngx_quic_frame_t *f, size_t len)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
306 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
307 size_t shrink;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
308 ngx_quic_frame_t *nf;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
309 ngx_quic_ordered_frame_t *of, *onf;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
310
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
311 switch (f->type) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
312 case NGX_QUIC_FT_CRYPTO:
8545
4009f120cad4 QUIC: eliminated stream type from ngx_quic_stream_frame_t.
Roman Arutyunyan <arut@nginx.com>
parents: 8504
diff changeset
313 case NGX_QUIC_FT_STREAM:
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
314 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
315
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
316 default:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
317 return NGX_DECLINED;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
318 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
319
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
320 if ((size_t) f->len <= len) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
321 return NGX_OK;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
322 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
323
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
324 shrink = f->len - len;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
325
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
326 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
327 "quic split frame now:%uz need:%uz shrink:%uz",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
328 f->len, len, shrink);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
329
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
330 of = &f->u.ord;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
331
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
332 if (of->length <= shrink) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
333 return NGX_DECLINED;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
334 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
335
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
336 of->length -= shrink;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
337 f->len = ngx_quic_create_frame(NULL, f);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
338
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
339 if ((size_t) f->len > len) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
340 ngx_log_error(NGX_LOG_ERR, c->log, 0, "could not split QUIC frame");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
341 return NGX_ERROR;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
342 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
343
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
344 nf = ngx_quic_alloc_frame(c);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
345 if (nf == NULL) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
346 return NGX_ERROR;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
347 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
348
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
349 *nf = *f;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
350 onf = &nf->u.ord;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
351 onf->offset += of->length;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
352 onf->length = shrink;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
353 nf->len = ngx_quic_create_frame(NULL, nf);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
354
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
355 f->data = ngx_quic_read_chain(c, &nf->data, of->length);
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
356 if (f->data == NGX_CHAIN_ERROR) {
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
357 return NGX_ERROR;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
358 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
359
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
360 ngx_queue_insert_after(&f->queue, &nf->queue);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
361
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
362 return NGX_OK;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
363 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
364
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
365
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
366 ngx_chain_t *
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
367 ngx_quic_read_chain(ngx_connection_t *c, ngx_chain_t **chain, off_t limit)
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
368 {
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
369 off_t n;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
370 ngx_buf_t *b;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
371 ngx_chain_t *out, *cl, **ll;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
372
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
373 out = *chain;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
374
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
375 for (ll = &out; *ll; ll = &(*ll)->next) {
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
376 b = (*ll)->buf;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
377
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
378 if (b->sync) {
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
379 /* hole */
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
380 break;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
381 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
382
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
383 if (limit == 0) {
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
384 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
385 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
386
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
387 n = b->last - b->pos;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
388
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
389 if (n > limit) {
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
390 goto split;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
391 }
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
392
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
393 limit -= n;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
394 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
395
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
396 *chain = *ll;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
397 *ll = NULL;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
398
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
399 return out;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
400
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
401 split:
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
402
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
403 cl = ngx_alloc_chain_link(c->pool);
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
404 if (cl == NULL) {
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
405 return NGX_CHAIN_ERROR;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
406 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
407
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
408 cl->buf = ngx_quic_clone_buf(c, b);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
409 if (cl->buf == NULL) {
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
410 return NGX_CHAIN_ERROR;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
411 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
412
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
413 cl->buf->pos += limit;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
414 b->last = cl->buf->pos;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
415 b->last_buf = 0;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
416
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
417 ll = &(*ll)->next;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
418 cl->next = *ll;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
419 *ll = NULL;
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
420 *chain = cl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
421
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
422 return out;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
423 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
424
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
425
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
426 ngx_chain_t *
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
427 ngx_quic_alloc_chain(ngx_connection_t *c)
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
428 {
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
429 ngx_chain_t *cl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
430
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
431 cl = ngx_alloc_chain_link(c->pool);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
432 if (cl == NULL) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
433 return NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
434 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
435
8763
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
436 cl->buf = ngx_quic_alloc_buf(c);
fb811b6c76ee QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents: 8762
diff changeset
437 if (cl->buf == NULL) {
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
438 return NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
439 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
440
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
441 return cl;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
442 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
443
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
444
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
445 ngx_chain_t *
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
446 ngx_quic_copy_buf(ngx_connection_t *c, u_char *data, size_t len)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
447 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
448 size_t n;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
449 ngx_buf_t *b;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
450 ngx_chain_t *cl, *out, **ll;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
451
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
452 out = NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
453 ll = &out;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
454
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
455 while (len) {
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
456 cl = ngx_quic_alloc_chain(c);
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
457 if (cl == NULL) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
458 return NGX_CHAIN_ERROR;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
459 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
460
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
461 b = cl->buf;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
462 n = ngx_min((size_t) (b->end - b->last), len);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
463
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
464 b->last = ngx_cpymem(b->last, data, n);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
465
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
466 data += n;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
467 len -= n;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
468
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
469 *ll = cl;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
470 ll = &cl->next;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
471 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
472
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
473 *ll = NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
474
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
475 return out;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
476 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
477
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
478
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
479 ngx_chain_t *
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
480 ngx_quic_write_chain(ngx_connection_t *c, ngx_chain_t **chain, ngx_chain_t *in,
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
481 off_t limit, off_t offset)
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
482 {
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
483 off_t n;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
484 u_char *p;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
485 ngx_buf_t *b;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
486 ngx_chain_t *cl, *sl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
487
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
488 while (in && limit) {
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
489 cl = *chain;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
490
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
491 if (cl == NULL) {
8761
19e063e955bf QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents: 8760
diff changeset
492 cl = ngx_quic_alloc_chain(c);
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
493 if (cl == NULL) {
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
494 return NGX_CHAIN_ERROR;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
495 }
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
496
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
497 cl->buf->last = cl->buf->end;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
498 cl->buf->sync = 1; /* hole */
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
499 cl->next = NULL;
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
500 *chain = cl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
501 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
502
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
503 b = cl->buf;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
504 n = b->last - b->pos;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
505
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
506 if (n <= offset) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
507 offset -= n;
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
508 chain = &cl->next;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
509 continue;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
510 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
511
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
512 if (b->sync && offset > 0) {
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
513 /* split hole at offset */
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
514
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
515 b->sync = 0;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
516
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
517 sl = ngx_quic_read_chain(c, &cl, offset);
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
518 if (cl == NGX_CHAIN_ERROR) {
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
519 return NGX_CHAIN_ERROR;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
520 }
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
521
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
522 sl->buf->sync = 1;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
523 cl->buf->sync = 1;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
524
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
525 *chain = sl;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
526 sl->next = cl;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
527 continue;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
528 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
529
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
530 for (p = b->pos + offset; p != b->last && in && limit; /* void */ ) {
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
531 n = ngx_min(b->last - p, in->buf->last - in->buf->pos);
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
532 n = ngx_min(n, limit);
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
533
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
534 if (b->sync) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
535 ngx_memcpy(p, in->buf->pos, n);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
536 }
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
537
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
538 p += n;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
539 in->buf->pos += n;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
540 offset += n;
8759
56dec0d4e5b1 QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents: 8708
diff changeset
541 limit -= n;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
542
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
543 if (in->buf->pos == in->buf->last) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
544 in = in->next;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
545 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
546 }
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
547
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
548 if (b->sync && p == b->last) {
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
549 b->sync = 0;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
550 continue;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
551 }
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
552
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
553 if (b->sync && p != b->pos) {
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
554 /* split hole at p - b->pos */
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
555
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
556 b->sync = 0;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
557
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
558 sl = ngx_quic_read_chain(c, &cl, p - b->pos);
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
559 if (sl == NGX_CHAIN_ERROR) {
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
560 return NGX_CHAIN_ERROR;
8442
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8439
diff changeset
561 }
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
562
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
563 cl->buf->sync = 1;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
564
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
565 *chain = sl;
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
566 sl->next = cl;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
567 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
568 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
569
8760
6ccf3867959a QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents: 8759
diff changeset
570 return in;
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
571 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
572
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
573
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
574 #if (NGX_DEBUG)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
575
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
576 void
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
577 ngx_quic_log_frame(ngx_log_t *log, ngx_quic_frame_t *f, ngx_uint_t tx)
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
578 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
579 u_char *p, *last, *pos, *end;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
580 ssize_t n;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
581 uint64_t gap, range, largest, smallest;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
582 ngx_uint_t i;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
583 u_char buf[NGX_MAX_ERROR_STR];
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
584
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
585 p = buf;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
586 last = buf + sizeof(buf);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
587
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
588 switch (f->type) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
589
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
590 case NGX_QUIC_FT_CRYPTO:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
591 p = ngx_slprintf(p, last, "CRYPTO len:%uL off:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
592 f->u.crypto.length, f->u.crypto.offset);
8708
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
593
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
594 #ifdef NGX_QUIC_DEBUG_FRAMES
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
595 {
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
596 ngx_chain_t *cl;
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
597
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
598 p = ngx_slprintf(p, last, " data:");
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
599
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
600 for (cl = f->data; cl; cl = cl->next) {
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
601 p = ngx_slprintf(p, last, "%*xs",
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
602 cl->buf->last - cl->buf->pos, cl->buf->pos);
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
603 }
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
604 }
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
605 #endif
a6a328ebd362 QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8645
diff changeset
606
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
607 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
608
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
609 case NGX_QUIC_FT_PADDING:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
610 p = ngx_slprintf(p, last, "PADDING");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
611 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
612
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
613 case NGX_QUIC_FT_ACK:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
614 case NGX_QUIC_FT_ACK_ECN:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
615
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
616 p = ngx_slprintf(p, last, "ACK n:%ui delay:%uL ",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
617 f->u.ack.range_count, f->u.ack.delay);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
618
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
619 if (f->data) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
620 pos = f->data->buf->pos;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
621 end = f->data->buf->last;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
622
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
623 } else {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
624 pos = NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
625 end = NULL;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
626 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
627
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
628 largest = f->u.ack.largest;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
629 smallest = f->u.ack.largest - f->u.ack.first_range;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
630
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
631 if (largest == smallest) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
632 p = ngx_slprintf(p, last, "%uL", largest);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
633
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
634 } else {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
635 p = ngx_slprintf(p, last, "%uL-%uL", largest, smallest);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
636 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
637
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
638 for (i = 0; i < f->u.ack.range_count; i++) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
639 n = ngx_quic_parse_ack_range(log, pos, end, &gap, &range);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
640 if (n == NGX_ERROR) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
641 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
642 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
643
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
644 pos += n;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
645
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
646 largest = smallest - gap - 2;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
647 smallest = largest - range;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
648
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
649 if (largest == smallest) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
650 p = ngx_slprintf(p, last, " %uL", largest);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
651
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
652 } else {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
653 p = ngx_slprintf(p, last, " %uL-%uL", largest, smallest);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
654 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
655 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
656
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
657 if (f->type == NGX_QUIC_FT_ACK_ECN) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
658 p = ngx_slprintf(p, last, " ECN counters ect0:%uL ect1:%uL ce:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
659 f->u.ack.ect0, f->u.ack.ect1, f->u.ack.ce);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
660 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
661 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
662
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
663 case NGX_QUIC_FT_PING:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
664 p = ngx_slprintf(p, last, "PING");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
665 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
666
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
667 case NGX_QUIC_FT_NEW_CONNECTION_ID:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
668 p = ngx_slprintf(p, last,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
669 "NEW_CONNECTION_ID seq:%uL retire:%uL len:%ud",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
670 f->u.ncid.seqnum, f->u.ncid.retire, f->u.ncid.len);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
671 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
672
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
673 case NGX_QUIC_FT_RETIRE_CONNECTION_ID:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
674 p = ngx_slprintf(p, last, "RETIRE_CONNECTION_ID seqnum:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
675 f->u.retire_cid.sequence_number);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
676 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
677
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
678 case NGX_QUIC_FT_CONNECTION_CLOSE:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
679 case NGX_QUIC_FT_CONNECTION_CLOSE_APP:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
680 p = ngx_slprintf(p, last, "CONNECTION_CLOSE%s err:%ui",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
681 f->type == NGX_QUIC_FT_CONNECTION_CLOSE ? "" : "_APP",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
682 f->u.close.error_code);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
683
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
684 if (f->u.close.reason.len) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
685 p = ngx_slprintf(p, last, " %V", &f->u.close.reason);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
686 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
687
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
688 if (f->type == NGX_QUIC_FT_CONNECTION_CLOSE) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
689 p = ngx_slprintf(p, last, " ft:%ui", f->u.close.frame_type);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
690 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
691
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
692 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
693
8545
4009f120cad4 QUIC: eliminated stream type from ngx_quic_stream_frame_t.
Roman Arutyunyan <arut@nginx.com>
parents: 8504
diff changeset
694 case NGX_QUIC_FT_STREAM:
8409
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
695 p = ngx_slprintf(p, last, "STREAM id:0x%xL", f->u.stream.stream_id);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
696
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
697 if (f->u.stream.off) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
698 p = ngx_slprintf(p, last, " off:%uL", f->u.stream.offset);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
699 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
700
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
701 if (f->u.stream.len) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
702 p = ngx_slprintf(p, last, " len:%uL", f->u.stream.length);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
703 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
704
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
705 if (f->u.stream.fin) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
706 p = ngx_slprintf(p, last, " fin:1");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
707 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
708
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
709 #ifdef NGX_QUIC_DEBUG_FRAMES
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
710 {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
711 ngx_chain_t *cl;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
712
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
713 p = ngx_slprintf(p, last, " data:");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
714
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
715 for (cl = f->data; cl; cl = cl->next) {
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
716 p = ngx_slprintf(p, last, "%*xs",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
717 cl->buf->last - cl->buf->pos, cl->buf->pos);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
718 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
719 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
720 #endif
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
721
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
722 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
723
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
724 case NGX_QUIC_FT_MAX_DATA:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
725 p = ngx_slprintf(p, last, "MAX_DATA max_data:%uL on recv",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
726 f->u.max_data.max_data);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
727 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
728
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
729 case NGX_QUIC_FT_RESET_STREAM:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
730 p = ngx_slprintf(p, last, "RESET_STREAM"
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
731 " id:0x%xL error_code:0x%xL final_size:0x%xL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
732 f->u.reset_stream.id, f->u.reset_stream.error_code,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
733 f->u.reset_stream.final_size);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
734 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
735
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
736 case NGX_QUIC_FT_STOP_SENDING:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
737 p = ngx_slprintf(p, last, "STOP_SENDING id:0x%xL err:0x%xL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
738 f->u.stop_sending.id, f->u.stop_sending.error_code);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
739 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
740
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
741 case NGX_QUIC_FT_STREAMS_BLOCKED:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
742 case NGX_QUIC_FT_STREAMS_BLOCKED2:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
743 p = ngx_slprintf(p, last, "STREAMS_BLOCKED limit:%uL bidi:%ui",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
744 f->u.streams_blocked.limit, f->u.streams_blocked.bidi);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
745 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
746
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
747 case NGX_QUIC_FT_MAX_STREAMS:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
748 case NGX_QUIC_FT_MAX_STREAMS2:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
749 p = ngx_slprintf(p, last, "MAX_STREAMS limit:%uL bidi:%ui",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
750 f->u.max_streams.limit, f->u.max_streams.bidi);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
751 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
752
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
753 case NGX_QUIC_FT_MAX_STREAM_DATA:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
754 p = ngx_slprintf(p, last, "MAX_STREAM_DATA id:0x%xL limit:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
755 f->u.max_stream_data.id, f->u.max_stream_data.limit);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
756 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
757
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
758
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
759 case NGX_QUIC_FT_DATA_BLOCKED:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
760 p = ngx_slprintf(p, last, "DATA_BLOCKED limit:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
761 f->u.data_blocked.limit);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
762 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
763
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
764 case NGX_QUIC_FT_STREAM_DATA_BLOCKED:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
765 p = ngx_slprintf(p, last, "STREAM_DATA_BLOCKED id:0x%xL limit:%uL",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
766 f->u.stream_data_blocked.id,
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
767 f->u.stream_data_blocked.limit);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
768 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
769
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
770 case NGX_QUIC_FT_PATH_CHALLENGE:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
771 p = ngx_slprintf(p, last, "PATH_CHALLENGE data:0x%*xs",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
772 sizeof(f->u.path_challenge.data),
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
773 f->u.path_challenge.data);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
774 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
775
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
776 case NGX_QUIC_FT_PATH_RESPONSE:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
777 p = ngx_slprintf(p, last, "PATH_RESPONSE data:0x%*xs",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
778 sizeof(f->u.path_challenge.data),
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
779 f->u.path_challenge.data);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
780 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
781
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
782 case NGX_QUIC_FT_NEW_TOKEN:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
783 p = ngx_slprintf(p, last, "NEW_TOKEN");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
784 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
785
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
786 case NGX_QUIC_FT_HANDSHAKE_DONE:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
787 p = ngx_slprintf(p, last, "HANDSHAKE DONE");
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
788 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
789
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
790 default:
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
791 p = ngx_slprintf(p, last, "unknown type 0x%xi", f->type);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
792 break;
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
793 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
794
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
795 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0, "quic frame %s %s %*s",
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
796 tx ? "tx" : "rx", ngx_quic_level_name(f->level),
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
797 p - buf, buf);
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
798 }
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
799
660c4a2f95f3 QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
800 #endif