summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/event/quic/ngx_event_quic_frames.c36
-rw-r--r--src/event/quic/ngx_event_quic_frames.h1
-rw-r--r--src/event/quic/ngx_event_quic_streams.c5
3 files changed, 16 insertions, 26 deletions
diff --git a/src/event/quic/ngx_event_quic_frames.c b/src/event/quic/ngx_event_quic_frames.c
index b89072ea2..4a39141eb 100644
--- a/src/event/quic/ngx_event_quic_frames.c
+++ b/src/event/quic/ngx_event_quic_frames.c
@@ -259,26 +259,6 @@ ngx_quic_free_frame(ngx_connection_t *c, ngx_quic_frame_t *frame)
void
-ngx_quic_trim_chain(ngx_chain_t *in, size_t size)
-{
- size_t n;
- ngx_buf_t *b;
-
- while (in && size > 0) {
- b = in->buf;
- n = ngx_min((size_t) (b->last - b->pos), size);
-
- b->pos += n;
- size -= n;
-
- if (b->pos == b->last) {
- in = in->next;
- }
- }
-}
-
-
-void
ngx_quic_free_chain(ngx_connection_t *c, ngx_chain_t *in)
{
ngx_chain_t *cl;
@@ -551,6 +531,22 @@ ngx_quic_write_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb,
chain = &qb->chain;
while (in && limit) {
+
+ if (offset < base) {
+ n = ngx_min((uint64_t) (in->buf->last - in->buf->pos),
+ ngx_min(base - offset, limit));
+
+ in->buf->pos += n;
+ offset += n;
+ limit -= n;
+
+ if (in->buf->pos == in->buf->last) {
+ in = in->next;
+ }
+
+ continue;
+ }
+
cl = *chain;
if (cl == NULL) {
diff --git a/src/event/quic/ngx_event_quic_frames.h b/src/event/quic/ngx_event_quic_frames.h
index 853e36ca1..48cb22e91 100644
--- a/src/event/quic/ngx_event_quic_frames.h
+++ b/src/event/quic/ngx_event_quic_frames.h
@@ -26,7 +26,6 @@ ngx_int_t ngx_quic_split_frame(ngx_connection_t *c, ngx_quic_frame_t *f,
ngx_chain_t *ngx_quic_alloc_chain(ngx_connection_t *c);
ngx_chain_t *ngx_quic_copy_buf(ngx_connection_t *c, u_char *data,
size_t len);
-void ngx_quic_trim_chain(ngx_chain_t *in, size_t size);
void ngx_quic_free_chain(ngx_connection_t *c, ngx_chain_t *in);
ngx_chain_t *ngx_quic_read_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb,
diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c
index 1906bc695..78650b04f 100644
--- a/src/event/quic/ngx_event_quic_streams.c
+++ b/src/event/quic/ngx_event_quic_streams.c
@@ -1115,11 +1115,6 @@ ngx_quic_handle_stream_frame(ngx_connection_t *c, ngx_quic_header_t *pkt,
return NGX_OK;
}
- if (f->offset < qs->recv_offset) {
- ngx_quic_trim_chain(frame->data, qs->recv_offset - f->offset);
- f->offset = qs->recv_offset;
- }
-
if (f->fin) {
if (qs->recv_final_size != (uint64_t) -1 && qs->recv_final_size != last)
{