changeset 8212:e3c0b19a3a8a quic

Implemented ngx_quic_stream_send_chain() method. - just call send in a loop
author Roman Arutyunyan <arut@nginx.com>
date Fri, 13 Mar 2020 15:56:10 +0300
parents 6bc18966b8c1
children 33a22e74101e
files src/event/ngx_event_quic.c
diffstat 1 files changed, 35 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -1983,7 +1983,41 @@ static ngx_chain_t *
 ngx_quic_stream_send_chain(ngx_connection_t *c, ngx_chain_t *in,
     off_t limit)
 {
-    // TODO
+    size_t      len;
+    ssize_t     n;
+    ngx_buf_t  *b;
+
+    while (in) {
+        b = in->buf;
+
+        if (!ngx_buf_in_memory(b)) {
+            continue;
+        }
+
+        if (ngx_buf_size(b) == 0) {
+            continue;
+        }
+
+        len = b->last - b->pos;
+
+        n = ngx_quic_stream_send(c, b->pos, len);
+
+        if (n == NGX_ERROR) {
+            return NGX_CHAIN_ERROR;
+        }
+
+        if (n == NGX_AGAIN) {
+            return in;
+        }
+
+        if (n != (ssize_t) len) {
+            b->pos += n;
+            return in;
+        }
+
+        in = in->next;
+    }
+
     return NULL;
 }