Mercurial > hg > nginx
comparison src/event/quic/ngx_event_quic_ssl.c @ 9013:b5656025ddb5 quic
QUIC: eliminated ngx_quic_copy_buf().
Its only call is substituted with QUIC buffer write/read pair.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 14 Feb 2022 14:53:46 +0300 |
parents | f9c788f3f5cc |
children | a2fbae359828 |
comparison
equal
deleted
inserted
replaced
9012:489c2dcb3180 | 9013:b5656025ddb5 |
---|---|
181 ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn, | 181 ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn, |
182 enum ssl_encryption_level_t level, const uint8_t *data, size_t len) | 182 enum ssl_encryption_level_t level, const uint8_t *data, size_t len) |
183 { | 183 { |
184 u_char *p, *end; | 184 u_char *p, *end; |
185 size_t client_params_len; | 185 size_t client_params_len; |
186 ngx_buf_t buf; | |
187 ngx_chain_t *out, cl; | |
186 const uint8_t *client_params; | 188 const uint8_t *client_params; |
187 ngx_quic_tp_t ctp; | 189 ngx_quic_tp_t ctp; |
188 ngx_quic_frame_t *frame; | 190 ngx_quic_frame_t *frame; |
189 ngx_connection_t *c; | 191 ngx_connection_t *c; |
192 ngx_quic_buffer_t qb; | |
190 ngx_quic_send_ctx_t *ctx; | 193 ngx_quic_send_ctx_t *ctx; |
191 ngx_quic_connection_t *qc; | 194 ngx_quic_connection_t *qc; |
192 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation) | 195 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation) |
193 unsigned int alpn_len; | 196 unsigned int alpn_len; |
194 const unsigned char *alpn_data; | 197 const unsigned char *alpn_data; |
261 qc->client_tp_done = 1; | 264 qc->client_tp_done = 1; |
262 } | 265 } |
263 | 266 |
264 ctx = ngx_quic_get_send_ctx(qc, level); | 267 ctx = ngx_quic_get_send_ctx(qc, level); |
265 | 268 |
269 ngx_memzero(&buf, sizeof(ngx_buf_t)); | |
270 | |
271 buf.pos = (u_char *) data; | |
272 buf.last = buf.pos + len; | |
273 buf.temporary = 1; | |
274 | |
275 cl.buf = &buf; | |
276 cl.next = NULL; | |
277 | |
278 ngx_memzero(&qb, sizeof(ngx_quic_buffer_t)); | |
279 | |
280 if (ngx_quic_write_buffer(c, &qb, &cl, len, 0) == NGX_CHAIN_ERROR) { | |
281 return 0; | |
282 } | |
283 | |
284 out = ngx_quic_read_buffer(c, &qb, len); | |
285 if (out == NGX_CHAIN_ERROR) { | |
286 return 0; | |
287 } | |
288 | |
289 ngx_quic_free_buffer(c, &qb); | |
290 | |
266 frame = ngx_quic_alloc_frame(c); | 291 frame = ngx_quic_alloc_frame(c); |
267 if (frame == NULL) { | 292 if (frame == NULL) { |
268 return 0; | 293 return 0; |
269 } | 294 } |
270 | 295 |
271 frame->data = ngx_quic_copy_buf(c, (u_char *) data, len); | 296 frame->data = out; |
272 if (frame->data == NGX_CHAIN_ERROR) { | |
273 return 0; | |
274 } | |
275 | |
276 frame->level = level; | 297 frame->level = level; |
277 frame->type = NGX_QUIC_FT_CRYPTO; | 298 frame->type = NGX_QUIC_FT_CRYPTO; |
278 frame->u.crypto.offset = ctx->crypto_sent; | 299 frame->u.crypto.offset = ctx->crypto_sent; |
279 frame->u.crypto.length = len; | 300 frame->u.crypto.length = len; |
280 | 301 |