docs(core): document HTTP/2 operation and architecture

This commit is contained in:
Zakaria El Orche
2026-08-13 21:39:37 +00:00
parent 3679eed74a
commit 825bdfc942
18 changed files with 272 additions and 98 deletions
@@ -24,7 +24,7 @@ import dev.relism.fpr.core.ByteView;
* to be copied.</li>
* </ul>
* Code that only has a bare {@link ByteView} (e.g. because it received one across the
* {@link SegmentedByteView} boundary, from a future HPACK CONTINUATION-spanning block) keeps the
* {@link SegmentedByteView} boundary) keeps the
* byte-at-a-time fallback — this interface is an opportunistic fast path, never a requirement.
*/
public interface ArrayBackedByteView extends ByteView {
@@ -7,7 +7,7 @@ import java.util.List;
/**
* Inspects a handler class at registration time and returns zero or more
* {@link Middleware middlewares} to inject automatically.
* {@link MiddlewareNode middleware nodes} to inject automatically.
*
* <p>Processors are called once per register call, before
* the handler is compiled into the router. Returning an empty list is always
@@ -2,8 +2,9 @@ package dev.relism.flash.extension;
import dev.relism.flash.exceptions.InitializationException;
import dev.relism.flash.models.RequestHandler;
import dev.relism.flash.routing.Ws;
import dev.relism.flash.routing.Route;
import dev.relism.flash.routing.Routes;
import dev.relism.flash.routing.Ws;
import dev.relism.flash.websocket.WebSocketEndpoint;
import java.io.File;
@@ -7,7 +7,7 @@ import java.util.Arrays;
import lombok.Getter;
/**
* Pre-compiled byte representations of common HTTP {@code Content-Type} values. {@link #getBytes()}
* Pre-compiled byte representations of common HTTP {@code Content-Type} values. {@code getBytes()}
* returns the pre-computed array directly, never allocates.
*/
@Getter
@@ -200,7 +200,7 @@ public final class Http2Limits {
/**
* Maximum time, in milliseconds, {@code Http2FrameReader} may wait for a single frame's
* header and payload to fully arrive. Bounds the same slowloris-shaped hazard {@code
* header and payload to fully arrive. Bounds the same slowloris-shaped hazard:
* without it, a peer that sends 9 header bytes and then never sends the declared payload
* would hold this connection's frame reader waiting forever.
*/
@@ -11,7 +11,7 @@ import java.io.*;
* bodies larger than 2 GB.</li>
* <li>{@link #stream()} — returns a bounded {@link InputStream} without upfront allocation.
* into the already-buffered header bytes stitched to the socket; for chunked bodies it is
* the raw {@link dev.relism.ChunkedInputStream} that de-chunks on the fly.</li>
* the raw {@link dev.relism.flash.ChunkedInputStream} that de-chunks on the fly.</li>
* </ul>
*
* <p><b>Mutual exclusivity:</b> calling both {@code bytes()} and {@code stream()} on the same
@@ -134,7 +134,7 @@ public class RequestBody {
* <p>For fixed-length bodies: a reused {@link BoundedBufferedInputStream} (see the class
* view of the socket stream — zero allocation on a warm connection.
*
* <p>For chunked bodies: the raw {@link dev.relism.ChunkedInputStream} that de-chunks on
* <p>For chunked bodies: the raw {@link dev.relism.flash.ChunkedInputStream} that de-chunks on
* the fly; EOF signals the end of the logical body and leaves the socket positioned for
* the next keep-alive request.
*