Mercurial > hg > nginx
comparison src/event/quic/ngx_event_quic_streams.c @ 8760:baf9551b4a5b quic
QUIC: renamed stream field from c to connection.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 19 Apr 2021 17:21:07 +0300 |
parents | e29b7508b8b3 |
children | 225e9f1dfe7c |
comparison
equal
deleted
inserted
replaced
8759:515ac3c8435c | 8760:baf9551b4a5b |
---|---|
87 sn = ngx_quic_create_stream(qs->parent, id, rcvbuf_size); | 87 sn = ngx_quic_create_stream(qs->parent, id, rcvbuf_size); |
88 if (sn == NULL) { | 88 if (sn == NULL) { |
89 return NULL; | 89 return NULL; |
90 } | 90 } |
91 | 91 |
92 return sn->c; | 92 return sn->connection; |
93 } | 93 } |
94 | 94 |
95 | 95 |
96 void | 96 void |
97 ngx_quic_rbtree_insert_stream(ngx_rbtree_node_t *temp, | 97 ngx_quic_rbtree_insert_stream(ngx_rbtree_node_t *temp, |
170 node; | 170 node; |
171 node = ngx_rbtree_next(tree, node)) | 171 node = ngx_rbtree_next(tree, node)) |
172 { | 172 { |
173 qs = (ngx_quic_stream_t *) node; | 173 qs = (ngx_quic_stream_t *) node; |
174 | 174 |
175 rev = qs->c->read; | 175 rev = qs->connection->read; |
176 rev->error = 1; | 176 rev->error = 1; |
177 rev->ready = 1; | 177 rev->ready = 1; |
178 | 178 |
179 wev = qs->c->write; | 179 wev = qs->connection->write; |
180 wev->error = 1; | 180 wev->error = 1; |
181 wev->ready = 1; | 181 wev->ready = 1; |
182 | 182 |
183 ngx_post_event(rev, &ngx_posted_events); | 183 ngx_post_event(rev, &ngx_posted_events); |
184 | 184 |
317 sn = ngx_quic_create_stream(c, min_id, n); | 317 sn = ngx_quic_create_stream(c, min_id, n); |
318 if (sn == NULL) { | 318 if (sn == NULL) { |
319 return NULL; | 319 return NULL; |
320 } | 320 } |
321 | 321 |
322 sn->c->listening->handler(sn->c); | 322 sn->connection->listening->handler(sn->connection); |
323 | 323 |
324 if (qc->shutdown) { | 324 if (qc->shutdown) { |
325 return NGX_QUIC_STREAM_GONE; | 325 return NGX_QUIC_STREAM_GONE; |
326 } | 326 } |
327 } | 327 } |
333 static ngx_quic_stream_t * | 333 static ngx_quic_stream_t * |
334 ngx_quic_create_stream(ngx_connection_t *c, uint64_t id, size_t rcvbuf_size) | 334 ngx_quic_create_stream(ngx_connection_t *c, uint64_t id, size_t rcvbuf_size) |
335 { | 335 { |
336 ngx_log_t *log; | 336 ngx_log_t *log; |
337 ngx_pool_t *pool; | 337 ngx_pool_t *pool; |
338 ngx_connection_t *sc; | |
338 ngx_quic_stream_t *sn; | 339 ngx_quic_stream_t *sn; |
339 ngx_pool_cleanup_t *cln; | 340 ngx_pool_cleanup_t *cln; |
340 ngx_quic_connection_t *qc; | 341 ngx_quic_connection_t *qc; |
341 | 342 |
342 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, | 343 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, |
380 } | 381 } |
381 | 382 |
382 *log = *c->log; | 383 *log = *c->log; |
383 pool->log = log; | 384 pool->log = log; |
384 | 385 |
385 sn->c = ngx_get_connection(-1, log); | 386 sc = ngx_get_connection(-1, log); |
386 if (sn->c == NULL) { | 387 if (sc == NULL) { |
387 ngx_destroy_pool(pool); | 388 ngx_destroy_pool(pool); |
388 return NULL; | 389 return NULL; |
389 } | 390 } |
390 | 391 |
391 sn->c->quic = sn; | 392 sn->connection = sc; |
392 sn->c->type = SOCK_STREAM; | 393 |
393 sn->c->pool = pool; | 394 sc->quic = sn; |
394 sn->c->ssl = c->ssl; | 395 sc->type = SOCK_STREAM; |
395 sn->c->sockaddr = c->sockaddr; | 396 sc->pool = pool; |
396 sn->c->listening = c->listening; | 397 sc->ssl = c->ssl; |
397 sn->c->addr_text = c->addr_text; | 398 sc->sockaddr = c->sockaddr; |
398 sn->c->local_sockaddr = c->local_sockaddr; | 399 sc->listening = c->listening; |
399 sn->c->local_socklen = c->local_socklen; | 400 sc->addr_text = c->addr_text; |
400 sn->c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); | 401 sc->local_sockaddr = c->local_sockaddr; |
401 | 402 sc->local_socklen = c->local_socklen; |
402 sn->c->recv = ngx_quic_stream_recv; | 403 sc->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); |
403 sn->c->send = ngx_quic_stream_send; | 404 |
404 sn->c->send_chain = ngx_quic_stream_send_chain; | 405 sc->recv = ngx_quic_stream_recv; |
405 | 406 sc->send = ngx_quic_stream_send; |
406 sn->c->read->log = log; | 407 sc->send_chain = ngx_quic_stream_send_chain; |
407 sn->c->write->log = log; | 408 |
408 | 409 sc->read->log = log; |
409 log->connection = sn->c->number; | 410 sc->write->log = log; |
411 | |
412 log->connection = sc->number; | |
410 | 413 |
411 if ((id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0 | 414 if ((id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0 |
412 || (id & NGX_QUIC_STREAM_SERVER_INITIATED)) | 415 || (id & NGX_QUIC_STREAM_SERVER_INITIATED)) |
413 { | 416 { |
414 sn->c->write->ready = 1; | 417 sc->write->ready = 1; |
415 } | 418 } |
416 | 419 |
417 if (id & NGX_QUIC_STREAM_UNIDIRECTIONAL) { | 420 if (id & NGX_QUIC_STREAM_UNIDIRECTIONAL) { |
418 if (id & NGX_QUIC_STREAM_SERVER_INITIATED) { | 421 if (id & NGX_QUIC_STREAM_SERVER_INITIATED) { |
419 sn->send_max_data = qc->ctp.initial_max_stream_data_uni; | 422 sn->send_max_data = qc->ctp.initial_max_stream_data_uni; |
427 } | 430 } |
428 } | 431 } |
429 | 432 |
430 cln = ngx_pool_cleanup_add(pool, 0); | 433 cln = ngx_pool_cleanup_add(pool, 0); |
431 if (cln == NULL) { | 434 if (cln == NULL) { |
432 ngx_close_connection(sn->c); | 435 ngx_close_connection(sc); |
433 ngx_destroy_pool(pool); | 436 ngx_destroy_pool(pool); |
434 return NULL; | 437 return NULL; |
435 } | 438 } |
436 | 439 |
437 cln->handler = ngx_quic_stream_cleanup_handler; | 440 cln->handler = ngx_quic_stream_cleanup_handler; |
438 cln->data = sn->c; | 441 cln->data = sc; |
439 | 442 |
440 ngx_rbtree_insert(&qc->streams.tree, &sn->node); | 443 ngx_rbtree_insert(&qc->streams.tree, &sn->node); |
441 | 444 |
442 return sn; | 445 return sn; |
443 } | 446 } |
839 | 842 |
840 if (sn == NGX_QUIC_STREAM_GONE) { | 843 if (sn == NGX_QUIC_STREAM_GONE) { |
841 return NGX_OK; | 844 return NGX_OK; |
842 } | 845 } |
843 | 846 |
844 sc = sn->c; | 847 sc = sn->connection; |
845 fs = sn->fs; | 848 fs = sn->fs; |
846 b = sn->b; | 849 b = sn->b; |
847 window = b->end - b->last; | 850 window = b->end - b->last; |
848 | 851 |
849 if (last > window) { | 852 if (last > window) { |
919 for (cl = frame->data; cl; cl = cl->next) { | 922 for (cl = frame->data; cl; cl = cl->next) { |
920 b->last = ngx_cpymem(b->last, cl->buf->pos, | 923 b->last = ngx_cpymem(b->last, cl->buf->pos, |
921 cl->buf->last - cl->buf->pos); | 924 cl->buf->last - cl->buf->pos); |
922 } | 925 } |
923 | 926 |
924 rev = sn->c->read; | 927 rev = sn->connection->read; |
925 rev->ready = 1; | 928 rev->ready = 1; |
926 | 929 |
927 if (f->fin) { | 930 if (f->fin) { |
928 rev->pending_eof = 1; | 931 rev->pending_eof = 1; |
929 } | 932 } |
963 for (node = ngx_rbtree_min(tree->root, tree->sentinel); | 966 for (node = ngx_rbtree_min(tree->root, tree->sentinel); |
964 node; | 967 node; |
965 node = ngx_rbtree_next(tree, node)) | 968 node = ngx_rbtree_next(tree, node)) |
966 { | 969 { |
967 qs = (ngx_quic_stream_t *) node; | 970 qs = (ngx_quic_stream_t *) node; |
968 wev = qs->c->write; | 971 wev = qs->connection->write; |
969 | 972 |
970 if (wev->active) { | 973 if (wev->active) { |
971 wev->ready = 1; | 974 wev->ready = 1; |
972 ngx_post_event(wev, &ngx_posted_events); | 975 ngx_post_event(wev, &ngx_posted_events); |
973 } | 976 } |
1021 } | 1024 } |
1022 | 1025 |
1023 b = sn->b; | 1026 b = sn->b; |
1024 n = b->end - b->last; | 1027 n = b->end - b->last; |
1025 | 1028 |
1026 sn->c->listening->handler(sn->c); | 1029 sn->connection->listening->handler(sn->connection); |
1027 | 1030 |
1028 } else { | 1031 } else { |
1029 b = sn->b; | 1032 b = sn->b; |
1030 n = sn->fs->received + (b->pos - b->start) + (b->end - b->last); | 1033 n = sn->fs->received + (b->pos - b->start) + (b->end - b->last); |
1031 } | 1034 } |
1079 | 1082 |
1080 if (f->limit > sn->send_max_data) { | 1083 if (f->limit > sn->send_max_data) { |
1081 sn->send_max_data = f->limit; | 1084 sn->send_max_data = f->limit; |
1082 } | 1085 } |
1083 | 1086 |
1084 sn->c->listening->handler(sn->c); | 1087 sn->connection->listening->handler(sn->connection); |
1085 | 1088 |
1086 return NGX_OK; | 1089 return NGX_OK; |
1087 } | 1090 } |
1088 | 1091 |
1089 if (f->limit <= sn->send_max_data) { | 1092 if (f->limit <= sn->send_max_data) { |
1090 return NGX_OK; | 1093 return NGX_OK; |
1091 } | 1094 } |
1092 | 1095 |
1093 sent = sn->c->sent; | 1096 sent = sn->connection->sent; |
1094 | 1097 |
1095 if (sent >= sn->send_max_data) { | 1098 if (sent >= sn->send_max_data) { |
1096 wev = sn->c->write; | 1099 wev = sn->connection->write; |
1097 | 1100 |
1098 if (wev->active) { | 1101 if (wev->active) { |
1099 wev->ready = 1; | 1102 wev->ready = 1; |
1100 ngx_post_event(wev, &ngx_posted_events); | 1103 ngx_post_event(wev, &ngx_posted_events); |
1101 } | 1104 } |
1136 | 1139 |
1137 if (sn == NGX_QUIC_STREAM_GONE) { | 1140 if (sn == NGX_QUIC_STREAM_GONE) { |
1138 return NGX_OK; | 1141 return NGX_OK; |
1139 } | 1142 } |
1140 | 1143 |
1141 sc = sn->c; | 1144 sc = sn->connection; |
1142 | 1145 |
1143 rev = sc->read; | 1146 rev = sc->read; |
1144 rev->error = 1; | 1147 rev->error = 1; |
1145 rev->ready = 1; | 1148 rev->ready = 1; |
1146 | 1149 |
1147 sc->listening->handler(sc); | 1150 sc->listening->handler(sc); |
1148 | 1151 |
1149 return NGX_OK; | 1152 return NGX_OK; |
1150 } | 1153 } |
1151 | 1154 |
1152 rev = sn->c->read; | 1155 rev = sn->connection->read; |
1153 rev->error = 1; | 1156 rev->error = 1; |
1154 rev->ready = 1; | 1157 rev->ready = 1; |
1155 | 1158 |
1156 if (rev->active) { | 1159 if (rev->active) { |
1157 rev->handler(rev); | 1160 rev->handler(rev); |
1190 | 1193 |
1191 if (sn == NGX_QUIC_STREAM_GONE) { | 1194 if (sn == NGX_QUIC_STREAM_GONE) { |
1192 return NGX_OK; | 1195 return NGX_OK; |
1193 } | 1196 } |
1194 | 1197 |
1195 sc = sn->c; | 1198 sc = sn->connection; |
1196 | 1199 |
1197 wev = sc->write; | 1200 wev = sc->write; |
1198 wev->error = 1; | 1201 wev->error = 1; |
1199 wev->ready = 1; | 1202 wev->ready = 1; |
1200 | 1203 |
1201 sc->listening->handler(sc); | 1204 sc->listening->handler(sc); |
1202 | 1205 |
1203 return NGX_OK; | 1206 return NGX_OK; |
1204 } | 1207 } |
1205 | 1208 |
1206 wev = sn->c->write; | 1209 wev = sn->connection->write; |
1207 wev->error = 1; | 1210 wev->error = 1; |
1208 wev->ready = 1; | 1211 wev->ready = 1; |
1209 | 1212 |
1210 if (wev->active) { | 1213 if (wev->active) { |
1211 wev->handler(wev); | 1214 wev->handler(wev); |
1257 sn = ngx_quic_find_stream(&qc->streams.tree, f->u.stream.stream_id); | 1260 sn = ngx_quic_find_stream(&qc->streams.tree, f->u.stream.stream_id); |
1258 if (sn == NULL) { | 1261 if (sn == NULL) { |
1259 return; | 1262 return; |
1260 } | 1263 } |
1261 | 1264 |
1262 wev = sn->c->write; | 1265 wev = sn->connection->write; |
1263 sent = sn->c->sent; | 1266 sent = sn->connection->sent; |
1264 unacked = sent - sn->acked; | 1267 unacked = sent - sn->acked; |
1265 | 1268 |
1266 if (unacked >= NGX_QUIC_STREAM_BUFSIZE && wev->active) { | 1269 if (unacked >= NGX_QUIC_STREAM_BUFSIZE && wev->active) { |
1267 wev->ready = 1; | 1270 wev->ready = 1; |
1268 ngx_post_event(wev, &ngx_posted_events); | 1271 ngx_post_event(wev, &ngx_posted_events); |
1269 } | 1272 } |
1270 | 1273 |
1271 sn->acked += f->u.stream.length; | 1274 sn->acked += f->u.stream.length; |
1272 | 1275 |
1273 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, sn->c->log, 0, | 1276 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, sn->connection->log, 0, |
1274 "quic stream ack len:%uL acked:%uL unacked:%uL", | 1277 "quic stream ack len:%uL acked:%uL unacked:%uL", |
1275 f->u.stream.length, sn->acked, sent - sn->acked); | 1278 f->u.stream.length, sn->acked, sent - sn->acked); |
1276 } | 1279 } |