summaryrefslogtreecommitdiffstats
path: root/doc/designs
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2022-11-10 17:13:36 +0100
committerHugo Landau <hlandau@openssl.org>2022-11-14 08:01:58 +0000
commit6f3072212c2d56cae598bc1d180b2673b3df9be0 (patch)
tree4d39222cffc310ffa1ad9b49ec31e27fa04f5e7f /doc/designs
parenta17c713a7ad394b08646bbb0f0ba1a16e1cc8799 (diff)
Update Stream Receive Buffers design document with implementation details
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Hugo Landau <hlandau@openssl.org> (Merged from https://github.com/openssl/openssl/pull/19351)
Diffstat (limited to 'doc/designs')
-rw-r--r--doc/designs/quic-design/stream-receive-buffers.md16
1 files changed, 15 insertions, 1 deletions
diff --git a/doc/designs/quic-design/stream-receive-buffers.md b/doc/designs/quic-design/stream-receive-buffers.md
index 2de8cd02e2..a1ce4a37eb 100644
--- a/doc/designs/quic-design/stream-receive-buffers.md
+++ b/doc/designs/quic-design/stream-receive-buffers.md
@@ -96,7 +96,21 @@ below. Details TBD.
Implementation details
----------------------
-TBD
+The QUIC_RSTREAM object holds the received stream data in the SFRAME_LIST
+structure. This is a sorted list of partially (never fully) overlapping
+data frames. Each list item holds a pointer to the received packet
+wrapper for refcounting and proper release of the received packet
+data once the stream data is read by the application.
+
+Each SFRAME_LIST item has range.start and range.end values greater
+than the range.start and range.end values of the previous item in the list.
+This invariant is ensured on the insertion of overlapping stream frames.
+Any redundant frames are released. Insertion at the end of the list
+is optimised as in the ideal situation when no packets are lost we
+always just append new frames.
+
+See `include/internal/quic_stream.h` and `include/internal/quic_sf_list.h`
+for internal API details.
Other considerations
--------------------