Mercurial > hg > nginx-quic
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 } |