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 }