quic-0.3.16: ChangeLog.md
# ChangeLog
## 0.3.16
* Stop waiting for a socket to be readable, and run on Windows.
[#161](https://github.com/kazu-yamamoto/quic/pull/161)
* Count what arrives after the application has closed a stream.
[#163](https://github.com/kazu-yamamoto/quic/pull/163)
* Say that Windows needs the native I/O manager.
[#164](https://github.com/kazu-yamamoto/quic/pull/164)
* Stop forking a thread for every datagram a server receives.
[#165](https://github.com/kazu-yamamoto/quic/pull/165)
## 0.3.15
* Add `scInstallShutdownHandler` to stop a server.
[#159](https://github.com/kazu-yamamoto/quic/pull/159)
* Tell the peers when the server stops.
[#159](https://github.com/kazu-yamamoto/quic/pull/159)
* Send the first CONNECTION_CLOSE before leaving the connection.
[#159](https://github.com/kazu-yamamoto/quic/pull/159)
* Set `SO_REUSEPORT` on macOS and the BSDs.
[#159](https://github.com/kazu-yamamoto/quic/pull/159)
## 0.3.14
* Count the frame headers when packing many streams into one packet.
[#153](https://github.com/kazu-yamamoto/quic/pull/153)
* Hold a client sending 0-RTT to the limits of the previous connection.
[#156](https://github.com/kazu-yamamoto/quic/pull/156)
* Refuse a NEW_CONNECTION_ID that contradicts an earlier one.
[#157](https://github.com/kazu-yamamoto/quic/pull/157)
* Refuse a RETIRE_CONNECTION_ID for the connection ID it arrived on.
[#158](https://github.com/kazu-yamamoto/quic/pull/158)
## 0.3.13
* A debug write can no longer end the connection it describes.
[#148](https://github.com/kazu-yamamoto/quic/pull/148)
* A qlog write can no longer end the connection either.
[#150](https://github.com/kazu-yamamoto/quic/pull/150)
* Free what a failed setup took.
[#149](https://github.com/kazu-yamamoto/quic/pull/149)
* The header protection mask no longer leaks a buffer for every coder.
[#151](https://github.com/kazu-yamamoto/quic/pull/151)
## 0.3.12
* Tell the peer before waiting for the application.
[#141](https://github.com/kazu-yamamoto/quic/pull/141)
* Set the QUIC Bit in a Stateless Reset.
[#137](https://github.com/kazu-yamamoto/quic/pull/137)
* Send INTERNAL_ERROR when a connection ends of an unexpected exception.
[#140](https://github.com/kazu-yamamoto/quic/pull/140)
* Count what the application never reads against the connection's window.
[#142](https://github.com/kazu-yamamoto/quic/pull/142)
* Keep the AEAD limits of RFC 9001 Sec 6.6.
[#145](https://github.com/kazu-yamamoto/quic/pull/145)
[#147](https://github.com/kazu-yamamoto/quic/pull/147)
* Refuse a RETIRE_CONNECTION_ID we never issued.
[#144](https://github.com/kazu-yamamoto/quic/pull/144)
* Say which thread ended a server connection.
[#138](https://github.com/kazu-yamamoto/quic/pull/138)
[#139](https://github.com/kazu-yamamoto/quic/pull/139)
## 0.3.11
* Bind an address validation token to the address it was issued to.
[#133](https://github.com/kazu-yamamoto/quic/pull/133)
* Hold a peer to the final size it gave for a stream.
[#136](https://github.com/kazu-yamamoto/quic/pull/136)
* Open the stream a STREAM_DATA_BLOCKED arrives for.
[#134](https://github.com/kazu-yamamoto/quic/pull/134)
* The default `initial_max_streams_uni` is 10, where it was 3.
[#135](https://github.com/kazu-yamamoto/quic/pull/135)
* Say why a server connection ended.
[#138](https://github.com/kazu-yamamoto/quic/pull/138)
## 0.3.10
* Hand the application a stream only once its first frame is read.
[#131](https://github.com/kazu-yamamoto/quic/pull/131)
* Keep the Initial keys of the version the client addressed us in.
[#132](https://github.com/kazu-yamamoto/quic/pull/132)
* Build without warnings.
## 0.3.9
* Keep the peer's open streams within `initial_max_streams`.
[#124](https://github.com/kazu-yamamoto/quic/pull/124)
* Count what cannot be read against the anti-amplification limit.
[#128](https://github.com/kazu-yamamoto/quic/pull/128)
* Open the stream a RESET_STREAM arrives for.
[#129](https://github.com/kazu-yamamoto/quic/pull/129)
* Set the sending part closed on STOP_SENDING, not on RESET_STREAM.
[#125](https://github.com/kazu-yamamoto/quic/pull/125)
* Tests only.
[#126](https://github.com/kazu-yamamoto/quic/pull/126)
[#127](https://github.com/kazu-yamamoto/quic/pull/127)
## 0.3.8
* Tell a stream that was reset from one that ended.
[#123](https://github.com/kazu-yamamoto/quic/pull/123)
## 0.3.7
* Don't open a closed stream again for a late copy of its data.
[#118](https://github.com/kazu-yamamoto/quic/pull/118)
* Report a server that could not be started.
[#119](https://github.com/kazu-yamamoto/quic/pull/119)
* Don't let one datagram take the server's dispatcher down for good.
[#120](https://github.com/kazu-yamamoto/quic/pull/120)
* Tests only.
[#117](https://github.com/kazu-yamamoto/quic/pull/117)
[#121](https://github.com/kazu-yamamoto/quic/pull/121)
## 0.3.6
* Stop treating an undecryptable token as a validated address.
[#114](https://github.com/kazu-yamamoto/quic/pull/114)
* Let the PTO probe reach a retransmission waiting for the window.
[#115](https://github.com/kazu-yamamoto/quic/pull/115)
* Spend the PTO probe on data being held back rather than on a PING.
[#113](https://github.com/kazu-yamamoto/quic/pull/113)
* Count only what is in flight into bytes in flight.
[#116](https://github.com/kazu-yamamoto/quic/pull/116)
* Use crypton's one-call AES-GCM interface and remove the bundled picotls
`fusion` engine and its cabal flag.
* ChaCha20-Poly1305 is in `defaultCiphers` on x86-64 again.
[#111](https://github.com/kazu-yamamoto/quic/pull/111)
* Tests and CI: fix the IOSpec relay and keep qlog for a failed job.
[#112](https://github.com/kazu-yamamoto/quic/pull/112)
## 0.3.5
* Drop a packet whose header protection sample is not whole.
[#95](https://github.com/kazu-yamamoto/quic/pull/95)
* Bound the CRYPTO data held out of order.
[#96](https://github.com/kazu-yamamoto/quic/pull/96)
* Decode the peer's transport parameters without raising BufferOverrun.
[#97](https://github.com/kazu-yamamoto/quic/pull/97)
* Refuse a transport parameter sent twice, and stream limits past 2^60.
[#105](https://github.com/kazu-yamamoto/quic/pull/105)
* Stop the sender deadlocking on a congestion window it cannot free.
[#103](https://github.com/kazu-yamamoto/quic/pull/103)
* Leave the peer a whole header protection sample when encoding.
[#104](https://github.com/kazu-yamamoto/quic/pull/104)
* Bound a connection id and a Retry packet in the long header decoder.
[#106](https://github.com/kazu-yamamoto/quic/pull/106)
* Bound how many pieces a stream may be held in.
[#108](https://github.com/kazu-yamamoto/quic/pull/108)
* Check the ranges of an ACK frame, and refuse an ACK for a packet never
sent.
[#109](https://github.com/kazu-yamamoto/quic/pull/109)
* Give the two ends of a connection their own qlog file.
[#100](https://github.com/kazu-yamamoto/quic/pull/100)
* Remove the partial functions that were worth removing.
[#107](https://github.com/kazu-yamamoto/quic/pull/107)
* Require crypton 2.0.1.
* `Network.QUIC.Internal` changed.
## 0.3.4
* Add a server option to request client certificates.
[#94](https://github.com/kazu-yamamoto/quic/pull/94)
## 0.3.3
* RST_STREAM now contains a proper final size.
[#93](https://github.com/kazu-yamamoto/quic/pull/93)
## 0.3.2
* Support Unreliable Datagrams extension (RFC9221)
[#92](https://github.com/kazu-yamamoto/quic/pull/92)
## 0.3.1
* Using tls v2.4.0.
* rateLimit is now 32.
## 0.3.0
* Using "ram" instead of "memory".
## 0.2.23
* Supporting ChaCha20Poly1305 for crypton (not for Fusion)
[#89](https://github.com/kazu-yamamoto/quic/pull/89)
## 0.2.22
* Using tls v2.2 and crypton-x509* v1.8.
## 0.2.21
* Terminating threads properly with event-poll model.
## 0.2.20
* Fix recvStream overflow on pending data.
[#84](https://github.com/kazu-yamamoto/quic/pull/84)
## 0.2.19
* Compare the minimum packet size on packet size determination.
[#81](https://github.com/kazu-yamamoto/quic/pull/81)
## 0.2.18
* Don't print debug information on stdout as a daemon has already
closed it.
## 0.2.17
* Using waitReadSocketSTM properly.
## 0.2.16
* Fixing build on Windows.
[#80](https://github.com/kazu-yamamoto/quic/pull/80)
## 0.2.15
* Defining `ccUseServerNameIndication`.
* Defining `ccOnServerCertificate`.
## 0.2.14
* Supporting SSLKEYLOGFILE.
* Supporting zer-length CID in the server side.
[#78](https://github.com/kazu-yamamoto/quic/pull/78)
## 0.2.13
* Necessary transport parameters are now stored in ResumptionInfo.
[#76](https://github.com/kazu-yamamoto/quic/pull/76)
## 0.2.12
* Dont' send UDP packets of size 0. (Cloudfare)
* Retransmitted NewConnectionID does not reach the limit. (AdGuard)
## 0.2.11
* `ConnectionIsClosed` now takes reason.
* `ConnectionClose NoError` is treated as an error if level is not RTT1.
* Defining `ccServerNameOverride`.
* Removing data-default.
## 0.2.10
* Fix a bug of ACK on retransmission.
* New scheme to pack ACK on handshake.
* Fix a race condition in closure. CC is broken sometime.
* Using Rate instead of TBQueue against DOS.
* Enhancing qlog.
* Cleaning up the code for migration.
* Anti-amplification for migration.
* Respecting active_connection_id_limit.
* If `ccWatchDog` is `True`, a watch dog thread is spawn to call
`migration` when network configuration changes.
* Connected sockets again for clients. Set `ccSockConnected` to `True`
to use connected sockets.
* Fixing time representation of qlog.
## 0.2.9
* Don't send Fin if connection is already closed.
* Using clientWantSessionResumeList for multiple tickets.
## 0.2.8
* Proper handling for stateless reset. Servers generate SRTs based on
their CIDs. Clients check SRTs before dispatching to a Connection.
Note that the CID of stateless reset is random.
Test: `quic-server -o 5` and `quic-client -i`/`p`.
## 0.2.7
* Introducing `forkManaged` to manage readers of clients properly.
## 0.2.6
* Using `ServerState` instead of `killThread`.
* Don't catch asynchronous exceptions.
## 0.2.5
* Re-throwing asynchronous exceptions.
## 0.2.4
* Putting `#if` for `threadLabel`.
* Revert Timeout.hs which is accidentally committed.
## 0.2.3
* Supporting tls v2.1.3.
* Labeling threads.
* Using data-default.
* Removing `unliftio`.
## 0.2.2
# Introducing streamNotCreatedYet for STOP_SENDING.
## 0.2.1
* Using recvMsg and sendBufMsg.
## 0.2.0
* A new server architecture: only wildcard (unconnected) sockets are used.
[#66](https://github.com/kazu-yamamoto/quic/pull/66)
* Breaking change: `ccAutoMigration` is removed. Clients always use
unconnected sockets.
## 0.1.28
* Fixing a bug of quic bit.
## 0.1.27
* New API: `runWithSockets` for servers.
## 0.1.26
* fix syntax error, for GHC 9.2
[#64](https://github.com/kazu-yamamoto/quic/pull/64)
## 0.1.25 (Obsoleted)
* Accidentally release on a wrong branch.
## 0.1.24
* Introducing `onConnectionEstablished` into `Hooks`.
* Preparing for tls v2.1.
## 0.1.23
* Accidentally released using a wrong branch. Deprecated on Hackage.
## 0.1.22
* Incresing activeConnectionIdLimit and fix a bug
## 0.1.21
* Workaround for 0s paddings.
* Another bug fix for packing Fin.
## 0.1.20
* Bug fix for packing Fin.
* Proper handling for MAX_STREAM_DATA
* util/{client,server} are now called util/{quic-client, quic-server}.
* Renaming two command options for util/quic-client.
* Supporting multiple targets in util/quic-client.
## 0.1.19
* Using network-control v0.1.
## 0.1.18
* Fixing a buf of 0-RTT where unidirectionalStream waits for SH.
* Introducing ccVersion to start with Version1.
## 0.1.17
* Garding the new_connection_id attack.
## 0.1.16
* Using tls v2.0.
## 0.1.15
* Support customizing ClientHooks and ServerHooks config from tls
## 0.1.14
* Using crypto-token v0.1
## 0.1.13
* Garding the path_request attack.
## 0.1.12
* Fixing build.
## 0.1.11
* Rescuing GHC 8.10, 9.0 and 9.2.
## 0.1.11
* Adding possibleMyStreams.
## 0.1.10
* Setting proper upper boundaries for the dependencies
## 0.1.9
* Using the network-control package.
* Rate control for some frames.
* Announcing MaxStreams correctly.
## 0.1.8
* Announcing MaxStreams properly.
* Terminating a connection if the peer violates flow controls.
## 0.1.7
* Using System.Timeout.timeout.
## 0.1.6
* Fixing the race condition of `timeout`.
## 0.1.5
* Catching up "tls" v1.9.0.
* Fixing the timing to set resumption tokens.
## 0.1.4
* Fixing the race of socket closure.
## 0.1.3
* Supporting `tls` v1.8.0.
## 0.1.2
* Using "crypton" instead of "cryptonite".
## 0.1.1
* Fix recvStream hanging
[#54](https://github.com/kazu-yamamoto/quic/pull/54)
* Don't use the fusion crypto on Intel if the CPU does not
provides enough features.
* Add cabal flag for fusion support
[#53](https://github.com/kazu-yamamoto/quic/pull/53)
## 0.1.0
* Supporting QUICv2 and version negotiation.
* Supporting CPUs other than Intel.
* Supporting Windows.
* Using the network-udp package
## 0.0.1
* Making Haskell servers friendly with Chrome
[#20](https://github.com/kazu-yamamoto/quic/pull/20)
## 0.0.0
* Initial version.