mod_http3 changes
-------------------------------------------------------------------
Changes are listed most recent first.
Security-related entries always appear at the top of their release block.

v0.0.54 (2026-08-07)
--------------------
  *) Applied the core LimitRequestFields and LimitRequestFieldSize limits to
     HTTP/3 requests, and advertised the resulting bound as the HTTP/3
     SETTINGS_MAX_FIELD_SECTION_SIZE. httpd enforces these while parsing an
     HTTP/1 message, so nothing applied them to fields that arrive already
     decoded: the server advertised nghttp3's default of (1<<62)-1 and header
     fields accumulated in the stream pool without any bound. An over-limit
     request is now answered with 431 and the connection keeps serving.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3StreamTimeout, bounding how long a response may make no progress.
     A client that opened a stream and then stopped reading left its worker
     thread blocked on the response queue with nothing to release it: the
     transport stays alive on keepalives and the idle reaper skips a session
     that still has a task running, so a handful of such clients could occupy
     every worker in the pool. Defaults to the server's Timeout, as
     mod_http2's H2StreamTimeout does, and the window is measured per chunk of
     progress so a slow but advancing transfer is unaffected.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3MaxStreamErrors, closing a connection whose client has caused more
     than that many stream errors (default 8). Answering a malformed request
     per stream keeps the connection serving, which also let a client send
     malformed requests indefinitely; the connection is now closed with
     H3_EXCESSIVE_LOAD.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Advertised a QPACK dynamic table, with H3QpackTableCapacity (default 4096)
     and H3QpackBlockedStreams (default 16). nghttp3 defaults the decoder
     capacity to 0, which tells a client it may not use the dynamic table at
     all, so every request re-sent its cookies and user-agent literally -- worse
     header compression than the same server gives over HTTP/2, whose HPACK
     table is 4096 by default. Setting the capacity to 0 keeps the old
     behaviour.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3MinWorkers, H3MaxWorkers and H3MaxWorkerIdleSeconds. The request
     worker pool was fixed at 16 threads growing to 64 with no way to tune it,
     so a large machine could not use more and a small one could not use fewer.
     The defaults are the previous fixed values, so nothing changes unless
     configured.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Resolved mod_logio once at post_config instead of walking the loaded module
     list, comparing names, on every connection and again on every request.
     [Alexander Gerasimov <codeguard gmail.com>]

v0.0.53 (2026-08-07)
--------------------
  *) Rejected malformed HTTP/3 requests (missing or duplicate pseudo-header
     fields, connection-specific fields, content-length mismatch) with a
     stream error of type H3_MESSAGE_ERROR per RFC 9114 4.1.2. Previously
     one malformed request closed the whole QUIC connection, ending every
     other request in flight on it.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added support for building against httpd 2.4.52+. Without response
     buckets the module removes the core HTTP_HEADER filter from its
     requests and snapshots status and headers itself, mirroring
     mod_http2's !AP_HAS_RESPONSE_BUCKETS path.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Made the MPM connection-count notifications optional. Stock 2.4.x
     MPMs do not provide them; the module then runs in a degraded mode
     where a graceful child stop does not wait for active QUIC
     connections to drain. The patch in .patches/httpd-2.4.66-pr699.patch
     adds the notifications to httpd 2.4.x.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Enforced H3IdleTimeout in the module's own event loop. The QUIC stacks
     keep an otherwise idle connection alive by themselves -- OpenSSL sends a
     keepalive PING at half the idle interval to hold NAT state open -- which
     resets both endpoints' idle timers, so the transport timeout never fired
     and a finished connection held its session pool and its H3MaxConnections
     slot until the client went away.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Read queued datagrams in one batch with recvmmsg() where the platform has
     it, and read the socket's local address once per event-loop pass instead
     of once per datagram, halving the syscalls the ngtcp2 engine spends on a
     busy socket. The OpenSSL engine already batches inside its own datagram
     BIO. Also dropped a per-pass walk of the connection list whose result was
     never used.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3SocketBufferSize, which asks for the QUIC socket send and receive
     buffer size. A receive buffer left at the OS default overflows once a
     single connection runs at speed, and each dropped datagram costs a
     retransmit; the OS still caps what it grants, and a capped grant is
     logged rather than fatal.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3SessionTickets, which controls whether TLS 1.3 session tickets are
     issued so a returning client can resume instead of running a full
     handshake. Tickets stay on by default, as before, and each worker process
     keeps its own ticket keys, so a client resumes only when it returns to the
     process that issued its ticket.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Added H3EarlyData, off by default, together with an engine capability bit
     saying whether 0-RTT can be accepted at all. The OpenSSL QUIC stack has no
     server-side 0-RTT, so turning early data on there now logs a warning that
     names the engine instead of silently doing nothing.
     [Alexander Gerasimov <codeguard gmail.com>]

  *) Published the mod_ssl TLS environment for HTTP/3 requests: SSL_PROTOCOL,
     SSL_CIPHER, SSL_CIPHER_USEKEYSIZE, SSL_CIPHER_ALGKEYSIZE,
     SSL_CIPHER_EXPORT and SSL_SESSION_RESUMED, under the names mod_ssl uses.
     mod_ssl does not manage these connections, so scripts and rewrite
     conditions that read them saw nothing but HTTPS=on over HTTP/3. The values
     are read from the QUIC engine through a new conn.tls_info entry and
     formatted once per connection, not per request.
     [Alexander Gerasimov <codeguard gmail.com>]

v0.0.52 (2026-08-05)
--------------------
  *) Updated the dependency submodules to their current upstream revisions,
     nghttp3 moves to v1.18.0.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.51 (2026-08-04)
--------------------
  *) Updated QUIC library to generalize easier. 
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added the null QUIC engine, which implements the whole contract and
     carries nothing as a template.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Rejected an unknown H3QuicEngine when the config is parsed,
     so httpd -t catches it.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.50 (2026-08-03)
--------------------
  *) Split the CI test and interop matrices per QUIC engine.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated interop container by copying from the published module image
     instead of recompiling from scratch, saves a lot of ci minutes.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.49 (2026-08-02)
--------------------
  *) Added an ngtcp2 QUIC engine behind the QUIC abstraction, with OpenSSL for TLS.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Chose a QUIC backend at run time with H3QuicEngine directive, refuses to start
     when the build does not contain the engine named.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.48 (2026-08-01)
--------------------
  *) Abstracted to an in house QUIC provider.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.47 (2026-07-31)
--------------------
  *) Added a QUIC Interop Runner endpoint and client matrix in CI.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated the container image to serve HTTP/3 on its own.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Reviewed GitHub Actions workflows.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.46 (2026-07-30)
--------------------
  *) Fixed pytest to use -DCURL if provided.
     curl the build was configured with.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Reworked scripts/release.sh.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.45 (2026-07-29)
--------------------
  *) Stopped sending a body on HEAD responses.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Fixed response truncation at 8000 bytes.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.44 (2026-07-28)
--------------------
  *) Added the H3AddressValidation directive to turn QUIC Retry address
     validation off for handshakes that must complete in one round trip.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Reworked the Retry tests to exercise both settings of the directive.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.43 (2026-07-24)
--------------------
  *) Fixed apu/apr linking on debian systems.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated release workflow docs, systems, automation.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.42 (2026-07-22)
--------------------
  *) Added the static documentation site.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.41 (2026-07-21)
--------------------
  *) Streamed response bodies through a bounded per-stream queue.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Made stream draining fair so one busy stream cannot starve the others.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Preserved QUIC client addresses instead of reporting 0.0.0.0.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.40 (2026-07-20)
--------------------
  *) Resolved name-based virtual hosts from the :authority pseudo-header.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Replaced select() with poll() in the connection event loop.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Eliminated event-thread head-of-line blocking between sessions.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Supported the worker and prefork MPMs in addition to event.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Logged the active MPM at startup and in the unsupported-MPM error.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.39 (2026-07-19)
--------------------
  *) Offloaded HTTP/3 request processing to a thread pool.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Made the send path event-driven.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Named the failing nghttp3 call in session teardown errors.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.38 (2026-07-19)
--------------------
  *) Added proper stream ACK tracking to resolve QPACK dynamic table stalls
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.37 (2026-07-18)
--------------------
  *) Added an http3-status handler exposing per-child HTTP/3 metrics as JSON.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Treated HTTP/3 requests as TLS so scheme, default port, and HTTPS
     env vars resolve correctly.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Stripped connection-specific headers from HTTP/3 responses.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added QUIC Retry regression tests
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.36 (2026-07-18)
--------------------
  *) Replaced O(n^2) body buffering with a doubling-capacity strategy.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.35 (2026-07-17)
--------------------
  *) Added initial firefox support.
     [Jean-Frederic Clere <jfclere apache.org> <jfclere gmail.com>]

  *) Added mpm prefork and worker support.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Honor SSLKEYLOGFILE like mod_ssl so QUIC sessions can be decrypted in
     wireshark when debugging browser interop.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.34 (2026-07-16)
--------------------
  *) Added H3MaxResponseBodySize directive for HTTP/3 responses
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added H3IdleTimeout directive for QUIC connections
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added H3HandshakeTimeout directive and connection timer logic
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.33 (2026-07-12)
--------------------
  *) Added QoL and standard OSS files to improve the contributor experience.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.32 (2026-07-11)
--------------------
  *) Added source and binary distributions for generic Linux ZIP/TAR.GZ,
     RPM, DEB, and they all come with SHA256 checksums.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added release-process documentation, including the release script.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.31 (2026-07-09)
--------------------
  *) Dropped ap_pre_connection on synthetic connections and use mod_logio's
     zero'd config directly.
     [Jean-Frederic Clere <jfclere apache.org> <jfclere gmail.com>]

  *) Fixed WITH_HTTPD test config.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Require the MPM extra-connection optional functions; fail listener
     startup with an error if the MPM lacks them.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Bumped the nghttp3 submodule to v1.17.0.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.30 (2026-07-07)
--------------------
  *) Completed docs/coding-standards.md.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Documented all new directives and updated stale docs.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.29 (2026-07-06)
--------------------
  *) Added contribution documentation with coding-standard and
     release-process as future work.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.28 (2026-07-05)
--------------------
  *) Added browser support! Updated debugger.sh and added browser.sh. 
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Moved threads (worker and event loop) to a h3_threads to declutter h3_io.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Improved teardown and connection cleanup handling in h3_io.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added H3MaxConnections directive.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.27 (2026-07-04)
--------------------
  *) Added more pytests for new features.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.26 (2026-07-03)
--------------------
  *) Gave each h3_session its own pool.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added H3MaxRequestBodySize, Alt-Svc, and H3AltSvcMaxAge directives.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added automatic Alt-Svc response header injection via ap_hook_fixups
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Improved connection handling and teardowns.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Allow for port acquisition with background thread.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.25 (2026-07-02)
--------------------
  *) Fix data corruption on graceful restart by waiting for workers to
     finish before tearing down shared states.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Notify the MPM about connections so it keeps children alive 
     while QUIC traffic is still active.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.24 (2026-07-01)
--------------------
  *) Fixed requests never reaching worker threads.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Un-xfail the two HTTP/3 GET tests now that pass.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated httpd submodule with matching optional function exports.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.23 (2026-06-30)
--------------------
  *) Gave each h3_stream its own pool
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added cert/key file read permission checks.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Cleaned up unused parameter casts.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated how h3_stream_find lookup to O(1) via apr_hash_get.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.22 (2026-06-29)
--------------------
  *) Added H3MaxConcurrentStreams and H3StreamBufferSize directives.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Made some minor improvement to configuration mangement 
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.21 (2026-06-27)
--------------------
  *) Fixed log format to use APR portable format specifiers.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added version string and number logging at startup.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Fixed OpenSSL attribution in license headers of h3_callbacks.h/c
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Extended container healthcheck timing to declutter while debugging.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated httpd upsteam to local fork for development.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.20 (2026-06-26)
--------------------
  *) Fixed container builds.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Bumped openssl, apr, apr-util on LTS branches. Updated httpd
     due to openssl change, and updated nghttp3 to 1.16.0 release.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.19 (2026-06-25)
--------------------
  *) Added 13 tests under test/http3/
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.18 (2026-06-24)
--------------------
  *) Fixed WITH_NGHTTP3 to work with both cmake --install and
     configure/make install layouts using agnostic find_path/find_library.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.17 (2026-06-22)
--------------------
  *) Split the listener and QUIC engine into h3_io, the per-connection
     state into h3_session, and the per-stream helpers into h3_stream.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Replaced the MPM integrations with instead managing our own
     portable raw UDP socket into h3_socket.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added the CHECK macro for invariant and runtime-error checking.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Fixed segfaults from double-free's of QUIC stream SSLs
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added a H3Port directive to httpd.conf.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added doxygen comments to all headers.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Made Debug the default CMake build type.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Bumped OpenSSL submodule for upstream QUIC engine fixes.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.16 (2026-06-12)
--------------------
  *) Split large monolithic files into h3_*.c/h units and renamed
     version.h to h3_version.h.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Hidden all non-module symbols by default through CMake, only
     the http3_module data symbol is exported.
     [Tarek Ibrahim <tarek@pulsarxtech.com>]

  *) Reviewed and applied per-file license headers with attribution.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) AP_MODULE_DECLARE_DATA in ap_config.h has been a no-op since
     before GCC added visibility support. h3_private.h works around
     it to actually export http3_module.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.15 (2026-06-11)
--------------------
  *) Renamed .vscode config files to *.example.json and updated .gitignore
     to track examples while ignoring user-specific configs.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Replaced GoogleTest with sput.h, a Simple, Portable Unit Testing
     framework (v1.4.0).
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Flattened cmake/modules directory structure for simpler organization,
     moved mod_http3/tests to test/unit, moved examples/ to top-level.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added preliminary py testing support in test/
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.14 (2026-06-10)
--------------------
  *) Rewrote nghttp3 module to use out-of-process build+install, making
     WITH_NGHTTP3 consistent with the other WITH_* overrides. Includes
     full prefix, find_package, version check, and static lib support.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Removed dead print_config_summary macro, cleaned summary output.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.13 (2026-06-10)
--------------------
  *) Updated documentation for implicit build model and WITH_* overrides.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Changed dependency resolution to implicit source build, removed
     BUILD_SSL/BUILD_HTTPD options, aggregated module output paths for
     CMake summary. Dependencies overridden by WITH_SSL/WITH_HTTPD/
     WITH_APR/WITH_APU/WITH_NGHTTP3 when provided.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added WITH_NGHTTP3, detect APR/APR-util from apxs, and allow OpenSSL >= 3.5.0.
     [Jean-Frederic Clere <jfclere apache.org> <jfclere gmail.com>]

v0.0.12 (2026-06-08)
--------------------
  *) Added WITH_APR and WITH_APU CMake variables for independent
     APR/APR-util prefix resolution.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated OpenSSL detection: internal/crypto header checks
     separated from static library checks.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.11 (2026-06-06)
--------------------
  *) Added container support for running mod_http3 in a containerized environment.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.10 (2026-06-04)
--------------------
  *) Fixed missing request line by reconstructing it from method, uri,
     and protocol if unset before ap_process_request() is called.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated INSTALL and README documentation to cover deployment
     steps, build requirements, and curl3 integration notes.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>] 

v0.0.9 (2026-06-03)
--------------------
  *) Replaced VENDOR_SYSTEM with BUILD_SSL/BUILD_HTTPD and added 
     WITH_SSL/WITH_HTTPD variables for more dependency control.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Updated CMake module logging format across all dependencies.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.8 (2026-06-01)
--------------------
  *) Updated installation paths to follow conventions for module,
     documentation, license, and configuration file placement.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Removed unused helper scripts and test assets.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.7 (2026-04-10)
--------------------
  *) Added configuration and dependency documentation and updated README.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.6 (2026-04-07)
--------------------
  *) Added license header blocks to source files.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.5 (2026-04-06)
--------------------
  *) Resolved all compiler warnings and linker errors.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.4 (2026-04-05)
--------------------
  *) Added clang-format tooling support and reformatted the codebase.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.3 (2026-04-04)
--------------------
  *) Split into examples, include, and src directories.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added tests directory wih unit tests.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Removed references to mod_h3 in favor of mod_http3.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Removed autotools.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.2 (2026-04-03)
--------------------
  *) Added a modular CMake build system with structured support for
     external and system dependencies, toolchains, packaging, and
     shared build utilities.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added CMake modules for APR, APR-util, httpd, OpenSSL, nghttp3,
     and GoogleTest integration.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Introduced initial cross-compilation and platform build support
     for Linux x86_64, Linux aarch64, and Windows x86_64 via MinGW
     toolchains (experimental).
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]
  
  *) Refactored Makefile and configuration.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]
  
  *) Integrated VS Code tasks and debugger configuration.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

v0.0.1 (2026-04-02)
--------------------

  *) Pinned apr (1.7.x), apr-utils (1.6.x), googletest (1.17.x), httpd (latest),
     nghttp3 (latest), openssl 3.5.x as git submodules.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Added standard OSS project files (AUTHORS, CHANGES, COPYING, NOTICE).
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) Moved loose files to a seperate directory.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]

  *) imported and squashed github.com/jfclere/openssl-h3-examples.
     [Tarek Ibrahim <tareki pulsarxtech.com> <t1br4h1m gmail.com>]
