Mercurial > hg > nginx
annotate src/event/quic/ngx_event_quic_frames.c @ 9010:a5aebd51e4c7 quic
QUIC: stream lingering.
Now ngx_quic_stream_t is decoupled from ngx_connection_t in a way that it
can persist after connection is closed by application. During this period,
server is expecting stream final size from client for correct flow control.
Also, buffered output is sent to client as more flow control credit is granted.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Sat, 05 Feb 2022 12:54:54 +0300 |
parents | 740e8b99519d |
children | f9c788f3f5cc |
rev | line source |
---|---|
8749
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 |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
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:
8949
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:
8949
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:
8949
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:
8949
diff
changeset
|
19 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
20 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
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:
8949
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:
8949
diff
changeset
|
23 static ngx_buf_t *ngx_quic_clone_buf(ngx_connection_t *c, ngx_buf_t *b); |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
24 static ngx_int_t ngx_quic_split_chain(ngx_connection_t *c, ngx_chain_t *cl, |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
25 off_t offset); |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
26 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
27 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
28 static ngx_buf_t * |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
29 ngx_quic_alloc_buf(ngx_connection_t *c) |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
30 { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
31 u_char *p; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
32 ngx_buf_t *b; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
33 ngx_quic_connection_t *qc; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
34 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
35 qc = ngx_quic_get_connection(c); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
36 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
37 b = qc->free_bufs; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
38 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
39 if (b) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
40 qc->free_bufs = b->shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
41 p = b->start; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
42 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
43 } else { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
44 b = qc->free_shadow_bufs; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
45 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
46 if (b) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
47 qc->free_shadow_bufs = b->shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
48 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
49 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
50 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
51 "quic use shadow buffer n:%ui %ui", |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
52 ++qc->nbufs, --qc->nshadowbufs); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
53 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
54 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
55 } else { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
56 b = ngx_palloc(c->pool, sizeof(ngx_buf_t)); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
57 if (b == NULL) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
58 return NULL; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
59 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
60 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
61 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
62 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
63 "quic new buffer n:%ui", ++qc->nbufs); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
64 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
65 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
66 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
67 p = ngx_pnalloc(c->pool, NGX_QUIC_BUFFER_SIZE); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
68 if (p == NULL) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
69 return NULL; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
70 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
71 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
72 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
73 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
74 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:
8949
diff
changeset
|
75 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
76 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
77 ngx_memzero(b, sizeof(ngx_buf_t)); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
78 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
79 b->tag = (ngx_buf_tag_t) &ngx_quic_alloc_buf; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
80 b->temporary = 1; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
81 b->shadow = b; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
82 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
83 b->start = p; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
84 b->pos = p; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
85 b->last = p; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
86 b->end = p + NGX_QUIC_BUFFER_SIZE; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
87 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
88 ngx_quic_buf_set_refs(b, 1); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
89 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
90 return b; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
91 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
92 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
93 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
94 static void |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
95 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:
8949
diff
changeset
|
96 { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
97 ngx_buf_t *shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
98 ngx_quic_connection_t *qc; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
99 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
100 qc = ngx_quic_get_connection(c); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
101 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
102 ngx_quic_buf_dec_refs(b); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
103 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
104 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
105 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
106 "quic free buffer %p r:%ui", |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
107 b, (ngx_uint_t) ngx_quic_buf_refs(b)); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
108 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
109 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
110 shadow = b->shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
111 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
112 if (ngx_quic_buf_refs(b) == 0) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
113 shadow->shadow = qc->free_bufs; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
114 qc->free_bufs = shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
115 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
116 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
117 if (b != shadow) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
118 b->shadow = qc->free_shadow_bufs; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
119 qc->free_shadow_bufs = b; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
120 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
121 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
122 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
123 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
124 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
125 static ngx_buf_t * |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
126 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:
8949
diff
changeset
|
127 { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
128 ngx_buf_t *nb; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
129 ngx_quic_connection_t *qc; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
130 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
131 qc = ngx_quic_get_connection(c); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
132 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
133 nb = qc->free_shadow_bufs; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
134 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
135 if (nb) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
136 qc->free_shadow_bufs = nb->shadow; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
137 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
138 } else { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
139 nb = ngx_palloc(c->pool, sizeof(ngx_buf_t)); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
140 if (nb == NULL) { |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
141 return NULL; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
142 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
143 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
144 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
145 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
146 "quic new shadow buffer n:%ui", ++qc->nshadowbufs); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
147 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
148 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
149 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
150 *nb = *b; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
151 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
152 ngx_quic_buf_inc_refs(b); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
153 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
154 #ifdef NGX_QUIC_DEBUG_ALLOC |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
155 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
156 "quic clone buffer %p %p r:%ui", |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
157 b, nb, (ngx_uint_t) ngx_quic_buf_refs(b)); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
158 #endif |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
159 |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
160 return nb; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
161 } |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
162 |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
163 |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
164 static ngx_int_t |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
165 ngx_quic_split_chain(ngx_connection_t *c, ngx_chain_t *cl, off_t offset) |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
166 { |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
167 ngx_buf_t *b, *tb; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
168 ngx_chain_t *tail; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
169 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
170 b = cl->buf; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
171 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
172 tail = ngx_alloc_chain_link(c->pool); |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
173 if (tail == NULL) { |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
174 return NGX_ERROR; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
175 } |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
176 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
177 tb = ngx_quic_clone_buf(c, b); |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
178 if (tb == NULL) { |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
179 return NGX_ERROR; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
180 } |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
181 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
182 tail->buf = tb; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
183 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
184 tb->pos += offset; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
185 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
186 b->last = tb->pos; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
187 b->last_buf = 0; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
188 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
189 tail->next = cl->next; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
190 cl->next = tail; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
191 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
192 return NGX_OK; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
193 } |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
194 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
195 |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
196 ngx_quic_frame_t * |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
197 ngx_quic_alloc_frame(ngx_connection_t *c) |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
198 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
199 ngx_queue_t *q; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
200 ngx_quic_frame_t *frame; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
201 ngx_quic_connection_t *qc; |
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 qc = ngx_quic_get_connection(c); |
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 if (!ngx_queue_empty(&qc->free_frames)) { |
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 q = ngx_queue_head(&qc->free_frames); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
208 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
|
209 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
210 ngx_queue_remove(&frame->queue); |
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 #ifdef NGX_QUIC_DEBUG_ALLOC |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
213 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
|
214 "quic reuse frame n:%ui", qc->nframes); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
215 #endif |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
216 |
8883
404de224517e
QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents:
8820
diff
changeset
|
217 } else if (qc->nframes < 10000) { |
8803
6c213bec71c2
QUIC: fixed double memzero of new frames in ngx_quic_alloc_frame().
Sergey Kandaurov <pluknet@nginx.com>
parents:
8782
diff
changeset
|
218 frame = ngx_palloc(c->pool, sizeof(ngx_quic_frame_t)); |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
219 if (frame == NULL) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
220 return NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
221 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
222 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
223 ++qc->nframes; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
224 |
8883
404de224517e
QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents:
8820
diff
changeset
|
225 #ifdef NGX_QUIC_DEBUG_ALLOC |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
226 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
|
227 "quic alloc frame n:%ui", qc->nframes); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
228 #endif |
8883
404de224517e
QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents:
8820
diff
changeset
|
229 |
404de224517e
QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents:
8820
diff
changeset
|
230 } else { |
404de224517e
QUIC: limited the total number of frames.
Roman Arutyunyan <arut@nginx.com>
parents:
8820
diff
changeset
|
231 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:
8820
diff
changeset
|
232 return NULL; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
233 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
234 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
235 ngx_memzero(frame, sizeof(ngx_quic_frame_t)); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
236 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
237 return frame; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
238 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
239 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
240 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
241 void |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
242 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
|
243 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
244 ngx_quic_connection_t *qc; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
245 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
246 qc = ngx_quic_get_connection(c); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
247 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
248 if (frame->data) { |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
249 ngx_quic_free_chain(c, frame->data); |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
250 } |
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 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
|
253 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
254 #ifdef NGX_QUIC_DEBUG_ALLOC |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
255 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
|
256 "quic free frame n:%ui", qc->nframes); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
257 #endif |
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 |
8779
f52a2b77d406
QUIC: generic buffering for stream input.
Roman Arutyunyan <arut@nginx.com>
parents:
8753
diff
changeset
|
261 void |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
262 ngx_quic_trim_chain(ngx_chain_t *in, size_t size) |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
263 { |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
264 size_t n; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
265 ngx_buf_t *b; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
266 |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
267 while (in && size > 0) { |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
268 b = in->buf; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
269 n = ngx_min((size_t) (b->last - b->pos), size); |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
270 |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
271 b->pos += n; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
272 size -= n; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
273 |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
274 if (b->pos == b->last) { |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
275 in = in->next; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
276 } |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
277 } |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
278 } |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
279 |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
280 |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
281 void |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
282 ngx_quic_free_chain(ngx_connection_t *c, ngx_chain_t *in) |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
283 { |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
284 ngx_chain_t *cl; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
285 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
286 while (in) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
287 cl = in; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
288 in = in->next; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
289 |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
290 ngx_quic_free_buf(c, cl->buf); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
291 ngx_free_chain(c->pool, cl); |
8749
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 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
294 |
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 void |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
297 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
|
298 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
299 ngx_queue_t *q; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
300 ngx_quic_frame_t *f; |
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 do { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
303 q = ngx_queue_head(frames); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
304 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
305 if (q == ngx_queue_sentinel(frames)) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
306 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
307 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
308 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
309 ngx_queue_remove(q); |
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 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
|
312 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
313 ngx_quic_free_frame(c, f); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
314 } while (1); |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
317 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
318 void |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
319 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
|
320 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
321 ngx_quic_send_ctx_t *ctx; |
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 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
|
324 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
325 ngx_queue_insert_tail(&ctx->frames, &frame->queue); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
326 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
327 frame->len = ngx_quic_create_frame(NULL, frame); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
328 /* always succeeds */ |
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 if (qc->closing) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
331 return; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
332 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
333 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
334 ngx_post_event(&qc->push, &ngx_posted_events); |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
337 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
338 ngx_int_t |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
339 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
|
340 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
341 size_t shrink; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
342 ngx_quic_frame_t *nf; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
343 ngx_quic_ordered_frame_t *of, *onf; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
344 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
345 switch (f->type) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
346 case NGX_QUIC_FT_CRYPTO: |
8820
4009f120cad4
QUIC: eliminated stream type from ngx_quic_stream_frame_t.
Roman Arutyunyan <arut@nginx.com>
parents:
8803
diff
changeset
|
347 case NGX_QUIC_FT_STREAM: |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
348 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
349 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
350 default: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
351 return NGX_DECLINED; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
352 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
353 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
354 if ((size_t) f->len <= len) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
355 return NGX_OK; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
356 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
357 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
358 shrink = f->len - len; |
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_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
|
361 "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
|
362 f->len, len, shrink); |
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 of = &f->u.ord; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
365 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
366 if (of->length <= shrink) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
367 return NGX_DECLINED; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
368 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
369 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
370 of->length -= shrink; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
371 f->len = ngx_quic_create_frame(NULL, f); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
372 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
373 if ((size_t) f->len > len) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
374 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
|
375 return NGX_ERROR; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
376 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
377 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
378 nf = ngx_quic_alloc_frame(c); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
379 if (nf == NULL) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
380 return NGX_ERROR; |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
383 *nf = *f; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
384 onf = &nf->u.ord; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
385 onf->offset += of->length; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
386 onf->length = shrink; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
387 nf->len = ngx_quic_create_frame(NULL, nf); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
388 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
389 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:
8946
diff
changeset
|
390 if (f->data == NGX_CHAIN_ERROR) { |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
391 return NGX_ERROR; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
392 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
393 |
9010 | 394 if (f->type == NGX_QUIC_FT_STREAM) { |
395 f->u.stream.fin = 0; | |
396 } | |
397 | |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
398 ngx_queue_insert_after(&f->queue, &nf->queue); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
399 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
400 return NGX_OK; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
401 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
402 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
403 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
404 ngx_chain_t * |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
405 ngx_quic_read_chain(ngx_connection_t *c, ngx_chain_t **chain, off_t limit) |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
406 { |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
407 off_t n; |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
408 ngx_buf_t *b; |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
409 ngx_chain_t *out, **ll; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
410 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
411 out = *chain; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
412 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
413 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:
8946
diff
changeset
|
414 b = (*ll)->buf; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
415 |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
416 if (b->sync) { |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
417 /* hole */ |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
418 break; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
419 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
420 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
421 if (limit == 0) { |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
422 break; |
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 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
425 n = b->last - b->pos; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
426 |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
427 if (n > limit) { |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
428 if (ngx_quic_split_chain(c, *ll, limit) != NGX_OK) { |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
429 return NGX_CHAIN_ERROR; |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
430 } |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
431 |
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
432 n = limit; |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
433 } |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
434 |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
435 limit -= n; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
436 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
437 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
438 *chain = *ll; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
439 *ll = NULL; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
440 |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
441 return out; |
8749
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 * |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
446 ngx_quic_alloc_chain(ngx_connection_t *c) |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
447 { |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
448 ngx_chain_t *cl; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
449 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
450 cl = ngx_alloc_chain_link(c->pool); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
451 if (cl == NULL) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
452 return NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
453 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
454 |
8950
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
455 cl->buf = ngx_quic_alloc_buf(c); |
fb811b6c76ee
QUIC: refactored buffer allocation, spliting and freeing.
Roman Arutyunyan <arut@nginx.com>
parents:
8949
diff
changeset
|
456 if (cl->buf == NULL) { |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
457 return NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
458 } |
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 return cl; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
461 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
462 |
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 ngx_chain_t * |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
465 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
|
466 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
467 size_t n; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
468 ngx_buf_t *b; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
469 ngx_chain_t *cl, *out, **ll; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
470 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
471 out = NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
472 ll = &out; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
473 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
474 while (len) { |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
475 cl = ngx_quic_alloc_chain(c); |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
476 if (cl == NULL) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
477 return NGX_CHAIN_ERROR; |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
480 b = cl->buf; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
481 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
|
482 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
483 b->last = ngx_cpymem(b->last, data, n); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
484 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
485 data += n; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
486 len -= n; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
487 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
488 *ll = cl; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
489 ll = &cl->next; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
490 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
491 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
492 *ll = NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
493 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
494 return out; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
495 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
496 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
497 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
498 ngx_chain_t * |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
499 ngx_quic_write_chain(ngx_connection_t *c, ngx_chain_t **chain, ngx_chain_t *in, |
8967
3789f4a56d65
QUIC: return written size from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8963
diff
changeset
|
500 off_t limit, off_t offset, size_t *size) |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
501 { |
8946
56dec0d4e5b1
QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents:
8919
diff
changeset
|
502 off_t n; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
503 u_char *p; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
504 ngx_buf_t *b; |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
505 ngx_chain_t *cl; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
506 |
8967
3789f4a56d65
QUIC: return written size from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8963
diff
changeset
|
507 if (size) { |
3789f4a56d65
QUIC: return written size from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8963
diff
changeset
|
508 *size = 0; |
3789f4a56d65
QUIC: return written size from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8963
diff
changeset
|
509 } |
3789f4a56d65
QUIC: return written size from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8963
diff
changeset
|
510 |
8946
56dec0d4e5b1
QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents:
8919
diff
changeset
|
511 while (in && limit) { |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
512 cl = *chain; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
513 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
514 if (cl == NULL) { |
8948
19e063e955bf
QUIC: renamed buffer-related functions.
Roman Arutyunyan <arut@nginx.com>
parents:
8947
diff
changeset
|
515 cl = ngx_quic_alloc_chain(c); |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
516 if (cl == NULL) { |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
517 return NGX_CHAIN_ERROR; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
518 } |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
519 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
520 cl->buf->last = cl->buf->end; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
521 cl->buf->sync = 1; /* hole */ |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
522 cl->next = NULL; |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
523 *chain = cl; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
524 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
525 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
526 b = cl->buf; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
527 n = b->last - b->pos; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
528 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
529 if (n <= offset) { |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
530 offset -= n; |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
531 chain = &cl->next; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
532 continue; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
533 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
534 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
535 if (b->sync && offset > 0) { |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
536 if (ngx_quic_split_chain(c, cl, offset) != NGX_OK) { |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
537 return NGX_CHAIN_ERROR; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
538 } |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
539 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
540 continue; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
541 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
542 |
8975
000b9b048e0c
QUIC: fixed chain returned from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8969
diff
changeset
|
543 p = b->pos + offset; |
000b9b048e0c
QUIC: fixed chain returned from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8969
diff
changeset
|
544 |
000b9b048e0c
QUIC: fixed chain returned from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8969
diff
changeset
|
545 while (in) { |
8963
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
546 |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
547 if (!ngx_buf_in_memory(in->buf) || in->buf->pos == in->buf->last) { |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
548 in = in->next; |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
549 continue; |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
550 } |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
551 |
8975
000b9b048e0c
QUIC: fixed chain returned from ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8969
diff
changeset
|
552 if (p == b->last || limit == 0) { |
8963
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
553 break; |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
554 } |
5acd0d89d8c2
QUIC: fixed handling stream input buffers.
Roman Arutyunyan <arut@nginx.com>
parents:
8950
diff
changeset
|
555 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
556 n = ngx_min(b->last - p, in->buf->last - in->buf->pos); |
8946
56dec0d4e5b1
QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents:
8919
diff
changeset
|
557 n = ngx_min(n, limit); |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
558 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
559 if (b->sync) { |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
560 ngx_memcpy(p, in->buf->pos, n); |
9002
740e8b99519d
QUIC: improved size calculation in ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8975
diff
changeset
|
561 |
740e8b99519d
QUIC: improved size calculation in ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8975
diff
changeset
|
562 if (size) { |
740e8b99519d
QUIC: improved size calculation in ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8975
diff
changeset
|
563 *size += n; |
740e8b99519d
QUIC: improved size calculation in ngx_quic_write_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8975
diff
changeset
|
564 } |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
565 } |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
566 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
567 p += n; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
568 in->buf->pos += n; |
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
569 offset += n; |
8946
56dec0d4e5b1
QUIC: avoid excessive buffer allocations in stream output.
Roman Arutyunyan <arut@nginx.com>
parents:
8919
diff
changeset
|
570 limit -= n; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
571 } |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
572 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
573 if (b->sync && p == b->last) { |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
574 b->sync = 0; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
575 continue; |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
576 } |
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
577 |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
578 if (b->sync && p != b->pos) { |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
579 if (ngx_quic_split_chain(c, cl, p - b->pos) != NGX_OK) { |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
580 return NGX_CHAIN_ERROR; |
8782
b3f6ad181df4
QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents:
8779
diff
changeset
|
581 } |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
582 |
8969
065c73221b7b
QUIC: introduced function ngx_quic_split_chain().
Roman Arutyunyan <arut@nginx.com>
parents:
8967
diff
changeset
|
583 b->sync = 0; |
8749
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 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
586 |
8947
6ccf3867959a
QUIC: refactored ngx_quic_order_bufs() and ngx_quic_split_bufs().
Roman Arutyunyan <arut@nginx.com>
parents:
8946
diff
changeset
|
587 return in; |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
588 } |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
591 #if (NGX_DEBUG) |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
592 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
593 void |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
594 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
|
595 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
596 u_char *p, *last, *pos, *end; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
597 ssize_t n; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
598 uint64_t gap, range, largest, smallest; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
599 ngx_uint_t i; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
600 u_char buf[NGX_MAX_ERROR_STR]; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
601 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
602 p = buf; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
603 last = buf + sizeof(buf); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
604 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
605 switch (f->type) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
606 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
607 case NGX_QUIC_FT_CRYPTO: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
608 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
|
609 f->u.crypto.length, f->u.crypto.offset); |
8919
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
610 |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
611 #ifdef NGX_QUIC_DEBUG_FRAMES |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
612 { |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
613 ngx_chain_t *cl; |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
614 |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
615 p = ngx_slprintf(p, last, " data:"); |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
616 |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
617 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:
8883
diff
changeset
|
618 p = ngx_slprintf(p, last, "%*xs", |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
619 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:
8883
diff
changeset
|
620 } |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
621 } |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
622 #endif |
a6a328ebd362
QUIC: logging of CRYPTO frame payload under NGX_QUIC_DEBUG_FRAMES.
Sergey Kandaurov <pluknet@nginx.com>
parents:
8883
diff
changeset
|
623 |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
624 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
625 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
626 case NGX_QUIC_FT_PADDING: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
627 p = ngx_slprintf(p, last, "PADDING"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
628 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
629 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
630 case NGX_QUIC_FT_ACK: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
631 case NGX_QUIC_FT_ACK_ECN: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
632 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
633 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
|
634 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
|
635 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
636 if (f->data) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
637 pos = f->data->buf->pos; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
638 end = f->data->buf->last; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
639 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
640 } else { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
641 pos = NULL; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
642 end = NULL; |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
645 largest = f->u.ack.largest; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
646 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
|
647 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
648 if (largest == smallest) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
649 p = ngx_slprintf(p, last, "%uL", largest); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
650 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
651 } else { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
652 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
|
653 } |
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 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
|
656 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
|
657 if (n == NGX_ERROR) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
658 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
659 } |
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 pos += n; |
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 largest = smallest - gap - 2; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
664 smallest = largest - range; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
665 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
666 if (largest == smallest) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
667 p = ngx_slprintf(p, last, " %uL", largest); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
668 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
669 } else { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
670 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
|
671 } |
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 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
674 if (f->type == NGX_QUIC_FT_ACK_ECN) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
675 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
|
676 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
|
677 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
678 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
679 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
680 case NGX_QUIC_FT_PING: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
681 p = ngx_slprintf(p, last, "PING"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
682 break; |
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 case NGX_QUIC_FT_NEW_CONNECTION_ID: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
685 p = ngx_slprintf(p, last, |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
686 "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
|
687 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
|
688 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
689 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
690 case NGX_QUIC_FT_RETIRE_CONNECTION_ID: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
691 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
|
692 f->u.retire_cid.sequence_number); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
693 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
694 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
695 case NGX_QUIC_FT_CONNECTION_CLOSE: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
696 case NGX_QUIC_FT_CONNECTION_CLOSE_APP: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
697 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
|
698 f->type == NGX_QUIC_FT_CONNECTION_CLOSE ? "" : "_APP", |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
699 f->u.close.error_code); |
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.close.reason.len) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
702 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
|
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->type == NGX_QUIC_FT_CONNECTION_CLOSE) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
706 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
|
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 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
710 |
8820
4009f120cad4
QUIC: eliminated stream type from ngx_quic_stream_frame_t.
Roman Arutyunyan <arut@nginx.com>
parents:
8803
diff
changeset
|
711 case NGX_QUIC_FT_STREAM: |
8749
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
712 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
|
713 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
714 if (f->u.stream.off) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
715 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
|
716 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
717 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
718 if (f->u.stream.len) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
719 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
|
720 } |
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 if (f->u.stream.fin) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
723 p = ngx_slprintf(p, last, " fin:1"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
724 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
725 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
726 #ifdef NGX_QUIC_DEBUG_FRAMES |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
727 { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
728 ngx_chain_t *cl; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
729 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
730 p = ngx_slprintf(p, last, " data:"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
731 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
732 for (cl = f->data; cl; cl = cl->next) { |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
733 p = ngx_slprintf(p, last, "%*xs", |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
734 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
|
735 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
736 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
737 #endif |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
738 |
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_MAX_DATA: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
742 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
|
743 f->u.max_data.max_data); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
744 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
745 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
746 case NGX_QUIC_FT_RESET_STREAM: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
747 p = ngx_slprintf(p, last, "RESET_STREAM" |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
748 " 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
|
749 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
|
750 f->u.reset_stream.final_size); |
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_STOP_SENDING: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
754 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
|
755 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
|
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 case NGX_QUIC_FT_STREAMS_BLOCKED: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
759 case NGX_QUIC_FT_STREAMS_BLOCKED2: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
760 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
|
761 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
|
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_MAX_STREAMS: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
765 case NGX_QUIC_FT_MAX_STREAMS2: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
766 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
|
767 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
|
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_MAX_STREAM_DATA: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
771 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
|
772 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
|
773 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
774 |
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_DATA_BLOCKED: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
777 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
|
778 f->u.data_blocked.limit); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
779 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
780 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
781 case NGX_QUIC_FT_STREAM_DATA_BLOCKED: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
782 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
|
783 f->u.stream_data_blocked.id, |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
784 f->u.stream_data_blocked.limit); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
785 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
786 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
787 case NGX_QUIC_FT_PATH_CHALLENGE: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
788 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
|
789 sizeof(f->u.path_challenge.data), |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
790 f->u.path_challenge.data); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
791 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
792 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
793 case NGX_QUIC_FT_PATH_RESPONSE: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
794 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
|
795 sizeof(f->u.path_challenge.data), |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
796 f->u.path_challenge.data); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
797 break; |
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 case NGX_QUIC_FT_NEW_TOKEN: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
800 p = ngx_slprintf(p, last, "NEW_TOKEN"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
801 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
802 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
803 case NGX_QUIC_FT_HANDSHAKE_DONE: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
804 p = ngx_slprintf(p, last, "HANDSHAKE DONE"); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
805 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
806 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
807 default: |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
808 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
|
809 break; |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
810 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
811 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
812 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
|
813 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
|
814 p - buf, buf); |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
815 } |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
816 |
660c4a2f95f3
QUIC: separate files for frames related processing.
Vladimir Homutov <vl@nginx.com>
parents:
diff
changeset
|
817 #endif |