Mercurial > hg > nginx
annotate src/http/v3/ngx_http_v3.c @ 9056:be39ffdf9208 quic
QUIC: removed cancelable flag from QUIC and HTTP/3 events.
All these events are created in context of a client connection and are deleted
when the connection is closed. Setting ev->cancelable could trigger premature
connection closure and a socket leak alert.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Wed, 30 Nov 2022 14:09:08 +0400 |
parents | 6546c2ae1c7b |
children | b0c2234aaa9f |
rev | line source |
---|---|
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
1 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
2 /* |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
3 * Copyright (C) Roman Arutyunyan |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
4 * Copyright (C) Nginx, Inc. |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
5 */ |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
6 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
7 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
8 #include <ngx_config.h> |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
9 #include <ngx_core.h> |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
10 #include <ngx_http.h> |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
11 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
12 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
13 static void ngx_http_v3_keepalive_handler(ngx_event_t *ev); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
14 static void ngx_http_v3_cleanup_session(void *data); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
15 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
16 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
17 ngx_int_t |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
18 ngx_http_v3_init_session(ngx_connection_t *c) |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
19 { |
9054
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
20 ngx_connection_t *pc; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
21 ngx_pool_cleanup_t *cln; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
22 ngx_http_connection_t *hc; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
23 ngx_http_v3_session_t *h3c; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
24 #if (NGX_HTTP_V3_HQ) |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
25 ngx_http_v3_srv_conf_t *h3scf; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
26 #endif |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
27 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
28 pc = c->quic->parent; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
29 hc = pc->data; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
30 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
31 if (hc->v3_session) { |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
32 return NGX_OK; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
33 } |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
34 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
35 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 init session"); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
36 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
37 h3c = ngx_pcalloc(pc->pool, sizeof(ngx_http_v3_session_t)); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
38 if (h3c == NULL) { |
8902
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
39 goto failed; |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
40 } |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
41 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
42 h3c->max_push_id = (uint64_t) -1; |
8796
1fec68e322d0
HTTP/3: client GOAWAY support.
Roman Arutyunyan <arut@nginx.com>
parents:
8775
diff
changeset
|
43 h3c->goaway_push_id = (uint64_t) -1; |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
44 |
9054
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
45 #if (NGX_HTTP_V3_HQ) |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
46 h3scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module); |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
47 if (h3scf->hq) { |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
48 h3c->hq = 1; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
49 } |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
50 #endif |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
51 |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
52 ngx_queue_init(&h3c->blocked); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
53 ngx_queue_init(&h3c->pushing); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
54 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
55 h3c->keepalive.log = pc->log; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
56 h3c->keepalive.data = pc; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
57 h3c->keepalive.handler = ngx_http_v3_keepalive_handler; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
58 |
8989
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
59 h3c->table.send_insert_count.log = pc->log; |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
60 h3c->table.send_insert_count.data = pc; |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
61 h3c->table.send_insert_count.handler = ngx_http_v3_inc_insert_count_handler; |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
62 |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
63 cln = ngx_pool_cleanup_add(pc->pool, 0); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
64 if (cln == NULL) { |
8902
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
65 goto failed; |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
66 } |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
67 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
68 cln->handler = ngx_http_v3_cleanup_session; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
69 cln->data = h3c; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
70 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
71 hc->v3_session = h3c; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
72 |
9054
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
73 #if (NGX_HTTP_V3_HQ) |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
74 if (h3c->hq) { |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
75 return NGX_OK; |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
76 } |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
77 #endif |
6546c2ae1c7b
HTTP/3: unified hq code with regular HTTP/3 code.
Roman Arutyunyan <arut@nginx.com>
parents:
8989
diff
changeset
|
78 |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
79 return ngx_http_v3_send_settings(c); |
8902
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
80 |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
81 failed: |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
82 |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
83 ngx_log_error(NGX_LOG_ERR, c->log, 0, "failed to create http3 session"); |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
84 |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
85 ngx_http_v3_finalize_connection(c, NGX_HTTP_V3_ERR_INTERNAL_ERROR, |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
86 "failed to create http3 session"); |
925572184d4a
HTTP/3: adjusted QUIC connection finalization.
Roman Arutyunyan <arut@nginx.com>
parents:
8881
diff
changeset
|
87 return NGX_ERROR; |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
88 } |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
89 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
90 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
91 static void |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
92 ngx_http_v3_keepalive_handler(ngx_event_t *ev) |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
93 { |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
94 ngx_connection_t *c; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
95 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
96 c = ev->data; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
97 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
98 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http3 keepalive handler"); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
99 |
8988
6434160b4b78
QUIC: allowed main QUIC connection for some operations.
Roman Arutyunyan <arut@nginx.com>
parents:
8902
diff
changeset
|
100 ngx_http_v3_finalize_connection(c, NGX_HTTP_V3_ERR_NO_ERROR, |
6434160b4b78
QUIC: allowed main QUIC connection for some operations.
Roman Arutyunyan <arut@nginx.com>
parents:
8902
diff
changeset
|
101 "keepalive timeout"); |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
102 } |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
103 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
104 |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
105 static void |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
106 ngx_http_v3_cleanup_session(void *data) |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
107 { |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
108 ngx_http_v3_session_t *h3c = data; |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
109 |
8775
6e2c23481abb
HTTP/3: clean up table from session cleanup handler.
Roman Arutyunyan <arut@nginx.com>
parents:
8774
diff
changeset
|
110 ngx_http_v3_cleanup_table(h3c); |
6e2c23481abb
HTTP/3: clean up table from session cleanup handler.
Roman Arutyunyan <arut@nginx.com>
parents:
8774
diff
changeset
|
111 |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
112 if (h3c->keepalive.timer_set) { |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
113 ngx_del_timer(&h3c->keepalive); |
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
114 } |
8989
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
115 |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
116 if (h3c->table.send_insert_count.posted) { |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
117 ngx_delete_posted_event(&h3c->table.send_insert_count); |
81a3429db8b0
HTTP/3: delayed Insert Count Increment instruction.
Roman Arutyunyan <arut@nginx.com>
parents:
8988
diff
changeset
|
118 } |
8774
f4d3f5d93a82
HTTP/3: moved session initialization to a separate file.
Roman Arutyunyan <arut@nginx.com>
parents:
diff
changeset
|
119 } |
8881
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
120 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
121 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
122 ngx_int_t |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
123 ngx_http_v3_check_flood(ngx_connection_t *c) |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
124 { |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
125 ngx_http_v3_session_t *h3c; |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
126 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
127 h3c = ngx_http_v3_get_session(c); |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
128 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
129 if (h3c->total_bytes / 8 > h3c->payload_bytes + 1048576) { |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
130 ngx_log_error(NGX_LOG_INFO, c->log, 0, "http3 flood detected"); |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
131 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
132 ngx_http_v3_finalize_connection(c, NGX_HTTP_V3_ERR_NO_ERROR, |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
133 "HTTP/3 flood detected"); |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
134 return NGX_ERROR; |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
135 } |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
136 |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
137 return NGX_OK; |
72b304f6207c
HTTP/3: traffic-based flood detection.
Roman Arutyunyan <arut@nginx.com>
parents:
8796
diff
changeset
|
138 } |