comparison src/event/quic/ngx_event_quic_ssl.c @ 9018: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 bf2267887014
children 5dcea9f91482
comparison
equal deleted inserted replaced
9013:a954b551dc3f 9018:3c98fa8fef6f
158 ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn, 158 ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn,
159 enum ssl_encryption_level_t level, const uint8_t *data, size_t len) 159 enum ssl_encryption_level_t level, const uint8_t *data, size_t len)
160 { 160 {
161 u_char *p, *end; 161 u_char *p, *end;
162 size_t client_params_len; 162 size_t client_params_len;
163 ngx_buf_t buf; 163 ngx_chain_t *out;
164 ngx_chain_t *out, cl;
165 const uint8_t *client_params; 164 const uint8_t *client_params;
166 ngx_quic_tp_t ctp; 165 ngx_quic_tp_t ctp;
167 ngx_quic_frame_t *frame; 166 ngx_quic_frame_t *frame;
168 ngx_connection_t *c; 167 ngx_connection_t *c;
169 ngx_quic_buffer_t qb;
170 ngx_quic_send_ctx_t *ctx; 168 ngx_quic_send_ctx_t *ctx;
171 ngx_quic_connection_t *qc; 169 ngx_quic_connection_t *qc;
172 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation) 170 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
173 unsigned int alpn_len; 171 unsigned int alpn_len;
174 const unsigned char *alpn_data; 172 const unsigned char *alpn_data;
241 qc->client_tp_done = 1; 239 qc->client_tp_done = 1;
242 } 240 }
243 241
244 ctx = ngx_quic_get_send_ctx(qc, level); 242 ctx = ngx_quic_get_send_ctx(qc, level);
245 243
246 ngx_memzero(&buf, sizeof(ngx_buf_t)); 244 out = ngx_quic_copy_buffer(c, (u_char *) data, len);
247
248 buf.pos = (u_char *) data;
249 buf.last = buf.pos + len;
250 buf.temporary = 1;
251
252 cl.buf = &buf;
253 cl.next = NULL;
254
255 ngx_memzero(&qb, sizeof(ngx_quic_buffer_t));
256
257 if (ngx_quic_write_buffer(c, &qb, &cl, len, 0) == NGX_CHAIN_ERROR) {
258 return 0;
259 }
260
261 out = ngx_quic_read_buffer(c, &qb, len);
262 if (out == NGX_CHAIN_ERROR) { 245 if (out == NGX_CHAIN_ERROR) {
263 return 0; 246 return 0;
264 } 247 }
265
266 ngx_quic_free_buffer(c, &qb);
267 248
268 frame = ngx_quic_alloc_frame(c); 249 frame = ngx_quic_alloc_frame(c);
269 if (frame == NULL) { 250 if (frame == NULL) {
270 return 0; 251 return 0;
271 } 252 }