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