]> git.kaiwu.me - nginx.git/commitdiff
QUIC: eliminated ngx_quic_copy_buf().
authorRoman Arutyunyan <arut@nginx.com>
Mon, 14 Feb 2022 11:53:46 +0000 (14:53 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Mon, 14 Feb 2022 11:53:46 +0000 (14:53 +0300)
Its only call is substituted with QUIC buffer write/read pair.

src/event/quic/ngx_event_quic_frames.c
src/event/quic/ngx_event_quic_frames.h
src/event/quic/ngx_event_quic_ssl.c

index 4a39141ebbfb805e3d7088577bdcf956edb3efd5..c6d8de74e04f3d1f0dc62bce23378190c55923b6 100644 (file)
@@ -484,40 +484,6 @@ ngx_quic_alloc_chain(ngx_connection_t *c)
 }
 
 
-ngx_chain_t *
-ngx_quic_copy_buf(ngx_connection_t *c, u_char *data, size_t len)
-{
-    size_t        n;
-    ngx_buf_t    *b;
-    ngx_chain_t  *cl, *out, **ll;
-
-    out = NULL;
-    ll = &out;
-
-    while (len) {
-        cl = ngx_quic_alloc_chain(c);
-        if (cl == NULL) {
-            return NGX_CHAIN_ERROR;
-        }
-
-        b = cl->buf;
-        n = ngx_min((size_t) (b->end - b->last), len);
-
-        b->last = ngx_cpymem(b->last, data, n);
-
-        data += n;
-        len -= n;
-
-        *ll = cl;
-        ll = &cl->next;
-    }
-
-    *ll = NULL;
-
-    return out;
-}
-
-
 ngx_chain_t *
 ngx_quic_write_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb,
     ngx_chain_t *in, uint64_t limit, uint64_t offset)
index 48cb22e917eba8220ec2f2bd43f6dcf9c1f4a4ef..fbff68e5d5f37c81e8b97dacb63278699b0df079 100644 (file)
@@ -24,8 +24,6 @@ ngx_int_t ngx_quic_split_frame(ngx_connection_t *c, ngx_quic_frame_t *f,
     size_t len);
 
 ngx_chain_t *ngx_quic_alloc_chain(ngx_connection_t *c);
-ngx_chain_t *ngx_quic_copy_buf(ngx_connection_t *c, u_char *data,
-    size_t len);
 void ngx_quic_free_chain(ngx_connection_t *c, ngx_chain_t *in);
 
 ngx_chain_t *ngx_quic_read_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb,
index 8e01a87429b057c6f1cb3d70e104ed1aca664c13..0065661412d731f22932c09c3bfaec955f3b5b46 100644 (file)
@@ -183,10 +183,13 @@ ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn,
 {
     u_char                 *p, *end;
     size_t                  client_params_len;
+    ngx_buf_t               buf;
+    ngx_chain_t            *out, cl;
     const uint8_t          *client_params;
     ngx_quic_tp_t           ctp;
     ngx_quic_frame_t       *frame;
     ngx_connection_t       *c;
+    ngx_quic_buffer_t       qb;
     ngx_quic_send_ctx_t    *ctx;
     ngx_quic_connection_t  *qc;
 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
@@ -263,16 +266,34 @@ ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn,
 
     ctx = ngx_quic_get_send_ctx(qc, level);
 
-    frame = ngx_quic_alloc_frame(c);
-    if (frame == NULL) {
+    ngx_memzero(&buf, sizeof(ngx_buf_t));
+
+    buf.pos = (u_char *) 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 0;
     }
 
-    frame->data = ngx_quic_copy_buf(c, (u_char *) data, len);
-    if (frame->data == NGX_CHAIN_ERROR) {
+    out = ngx_quic_read_buffer(c, &qb, len);
+    if (out == NGX_CHAIN_ERROR) {
+        return 0;
+    }
+
+    ngx_quic_free_buffer(c, &qb);
+
+    frame = ngx_quic_alloc_frame(c);
+    if (frame == NULL) {
         return 0;
     }
 
+    frame->data = out;
     frame->level = level;
     frame->type = NGX_QUIC_FT_CRYPTO;
     frame->u.crypto.offset = ctx->crypto_sent;