# HG changeset patch # User Sergey Kandaurov # Date 1618303792 -10800 # Node ID 915c2f7092ed351999336a912f3067e416b1d079 # Parent 46161c610919845c8fedaa0c579dcbeee9646fb2 QUIC: ngx_quic_frames_stream_t made opaque. diff --git a/src/event/quic/ngx_event_quic.h b/src/event/quic/ngx_event_quic.h --- a/src/event/quic/ngx_event_quic.h +++ b/src/event/quic/ngx_event_quic.h @@ -70,13 +70,7 @@ typedef struct { } ngx_quic_conf_t; -typedef struct { - uint64_t sent; - uint64_t received; - ngx_queue_t frames; /* reorder queue */ - size_t total; /* size of buffered data */ -} ngx_quic_frames_stream_t; - +typedef struct ngx_quic_frames_stream_s ngx_quic_frames_stream_t; struct ngx_quic_stream_s { ngx_rbtree_node_t node; @@ -86,7 +80,7 @@ struct ngx_quic_stream_s { uint64_t acked; uint64_t send_max_data; ngx_buf_t *b; - ngx_quic_frames_stream_t fs; + ngx_quic_frames_stream_t *fs; ngx_uint_t cancelable; /* unsigned cancelable:1; */ }; diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c --- a/src/event/quic/ngx_event_quic_ack.c +++ b/src/event/quic/ngx_event_quic_ack.c @@ -498,7 +498,7 @@ ngx_quic_resend_frames(ngx_connection_t } b = sn->b; - n = sn->fs.received + (b->pos - b->start) + (b->end - b->last); + n = sn->fs->received + (b->pos - b->start) + (b->end - b->last); if (f->u.max_stream_data.limit < n) { f->u.max_stream_data.limit = n; diff --git a/src/event/quic/ngx_event_quic_connection.h b/src/event/quic/ngx_event_quic_connection.h --- a/src/event/quic/ngx_event_quic_connection.h +++ b/src/event/quic/ngx_event_quic_connection.h @@ -98,6 +98,14 @@ typedef struct { } ngx_quic_congestion_t; +struct ngx_quic_frames_stream_s { + uint64_t sent; + uint64_t received; + ngx_queue_t frames; /* reorder queue */ + size_t total; /* size of buffered data */ +}; + + /* * 12.3. Packet Numbers * diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c --- a/src/event/quic/ngx_event_quic_streams.c +++ b/src/event/quic/ngx_event_quic_streams.c @@ -367,7 +367,13 @@ ngx_quic_create_stream(ngx_connection_t return NULL; } - ngx_queue_init(&sn->fs.frames); + sn->fs = ngx_pcalloc(pool, sizeof(ngx_quic_frames_stream_t)); + if (sn->fs == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + + ngx_queue_init(&sn->fs->frames); log = ngx_palloc(pool, sizeof(ngx_log_t)); if (log == NULL) { @@ -503,7 +509,7 @@ ngx_quic_stream_recv(ngx_connection_t *c frame->level = ssl_encryption_application; frame->type = NGX_QUIC_FT_MAX_STREAM_DATA; frame->u.max_stream_data.id = qs->id; - frame->u.max_stream_data.limit = qs->fs.received + (b->pos - b->start) + frame->u.max_stream_data.limit = qs->fs->received + (b->pos - b->start) + (b->end - b->last); ngx_quic_queue_frame(qc, frame); @@ -706,7 +712,7 @@ ngx_quic_stream_cleanup_handler(void *da "quic stream id:0x%xL cleanup", qs->id); ngx_rbtree_delete(&qc->streams.tree, &qs->node); - ngx_quic_free_frames(pc, &qs->fs.frames); + ngx_quic_free_frames(pc, &qs->fs->frames); if (qc->closing) { /* schedule handler call to continue ngx_quic_close_connection() */ @@ -834,7 +840,7 @@ ngx_quic_handle_stream_frame(ngx_connect } sc = sn->c; - fs = &sn->fs; + fs = sn->fs; b = sn->b; window = b->end - b->last; @@ -855,7 +861,7 @@ ngx_quic_handle_stream_frame(ngx_connect return NGX_OK; } - fs = &sn->fs; + fs = sn->fs; b = sn->b; window = (b->pos - b->start) + (b->end - b->last); @@ -1019,7 +1025,7 @@ ngx_quic_handle_stream_data_blocked_fram } else { b = sn->b; - n = sn->fs.received + (b->pos - b->start) + (b->end - b->last); + n = sn->fs->received + (b->pos - b->start) + (b->end - b->last); } frame = ngx_quic_alloc_frame(c);