Mercurial > hg > nginx
diff src/event/quic/ngx_event_quic_frames.c @ 9071:3c98fa8fef6f quic
QUIC: ngx_quic_copy_buffer() function.
The function copies passed data to QUIC buffer chain and returns it.
The chain can be used in ngx_quic_frame_t data field.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 31 Jan 2023 14:12:18 +0400 |
parents | 55b38514729b |
children | def8e398d7c5 |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_frames.c Tue Jan 24 02:57:42 2023 +0300 +++ b/src/event/quic/ngx_event_quic_frames.c Tue Jan 31 14:12:18 2023 +0400 @@ -387,6 +387,39 @@ ngx_chain_t * +ngx_quic_copy_buffer(ngx_connection_t *c, u_char *data, size_t len) +{ + ngx_buf_t buf; + ngx_chain_t cl, *out; + ngx_quic_buffer_t qb; + + ngx_memzero(&buf, sizeof(ngx_buf_t)); + + buf.pos = data; + buf.last = buf.pos + len; + buf.temporary = 1; + + cl.buf = &buf; + cl.next = NULL; + + ngx_memzero(&qb, sizeof(ngx_quic_buffer_t)); + + if (ngx_quic_write_buffer(c, &qb, &cl, len, 0) == NGX_CHAIN_ERROR) { + return NGX_CHAIN_ERROR; + } + + out = ngx_quic_read_buffer(c, &qb, len); + if (out == NGX_CHAIN_ERROR) { + return NGX_CHAIN_ERROR; + } + + ngx_quic_free_buffer(c, &qb); + + return out; +} + + +ngx_chain_t * ngx_quic_read_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb, uint64_t limit) { uint64_t n;