Simone Bordet
a44984e6e4
Issue #6728 - QUIC and HTTP/3
...
- Avoid leaking stream instances.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
c8107539df
Issue #6728 - QUIC and HTTP/3
...
- Implemented stream idle timeouts.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
2b966c04ee
Issue #6728 - QUIC and HTTP/3
...
- Fixed module-info.java canonical ordering.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
d3cc08c30c
Issue #6728 - QUIC and HTTP/3
...
- Fixed computation of the last flag.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
06ffd014f9
Issue #6728 - QUIC and HTTP/3
...
- Implemented support for GREASE for unidirectional and bidirectional streams.
- Implemented UnknownBodyParser.
- Strengthened validation of frames in control and message streams.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
2115e4bf3e
Issue #6728 - QUIC and HTTP/3
...
- Added test case for blocking I/O reads.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
dc889bd7d8
Issue #6728 - QUIC and HTTP/3
...
- Initial support for closing HTTP/3 sessions and session failure events.
- Enforced HTTP/3 frame sequence.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
2e98931654
Issue #6728 - QUIC and HTTP/3
...
- Fixed module-info.java for HTTP/3 modules.
- Updated package-info.java for QUIC.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
2d4cb5abbf
Issue #6728 - QUIC and HTTP/3
...
- Avoid sending the last=true flag as a separate QUIC frame.
Apparently Quiche has problem notifying this frame to the receiving peer.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
8b3ae8a661
Issue #6728 - QUIC and HTTP/3
...
- More javadocs.
- Fixed QuicSession.fill() to also flush() to send to the remote peer the information that the data has been consumed.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
539fee7f79
Issue #6728 - QUIC and HTTP/3
...
- Fixed computation of the last flag.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
4bee790c04
Issue #6728 - QUIC and HTTP/3
...
- Added javadocs.
- Fixed race condition in processDataDemand().
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
c044400d80
Implement stream cancellation in HTTP/3 QPACK
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
7fc3faecaf
update qpack parseInstructionBuffer name
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
87edb609bd
Issue #6728 - QUIC and HTTP/3
...
- Updates to the data support after review.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
43551487ee
Issue #6728 - QUIC and HTTP/3
...
- Implemented data support.
- Implemented trailer support.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
fcdabeb933
Issue #6728 - QUIC and HTTP/3
...
- Changed the parsers to emit during parsing, rather than returning the event.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
b42bfa214a
Issue #6728 - QUIC and HTTP/3
...
- Fixed handling of the last frame, exposing a new API in QuicStreamEndPoint.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
7cb32b2d98
Issue #6728 - QUIC and HTTP/3
...
- Changed HTTP/3 parsers to return the Frame rather than notifying a listener.
- Correctly linked encoder and decoder streams to respectively QpackEncoder and QpackDecoder.
- Fixed buffer release.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
f63a7efc5a
Issue #6728 - QUIC and HTTP/3
...
- Implemented DATA frame generation and parsing.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
eb047aa8a3
Refactor QpackEncoder and QpackDecoder for simplicity.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
746d6848e3
Fix JPMS warning from QpackDecoder
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
6a825df16e
Improve javadoc and exception handling for http3-qpack
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
7b2b74045d
Add javadoc to public methods on QPACK encoder & decoder.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
b6c65404d5
Issue #6728 - QUIC and HTTP/3
...
- Simple request/response (no content) working.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
f6958de4b2
Issue #6728 - QUIC and HTTP/3
...
- Fixed control streams, must be unidirectional.
- Initial implementation of events to HTTP/3 APIs.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
7c75e9c22f
Issue #6728 - QUIC and HTTP/3
...
- Restructured code
- Split implementation of control and message parsing/generation.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
29e82ace1b
Issue #6728 - QUIC and HTTP/3
...
- Implemented handling of the control stream and SETTINGS frame/parser/generator.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
7c09800fe1
Issue #6728 - QUIC and HTTP/3
...
- Continued implementation of HTTP/3 APIs, frames and parsing, client and server.
- Figured out creation of streams, to support special HTTP/3 streams.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
63e4f1a074
Improve exceptions from QPACK
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
80d2cee238
Issue #6728 - Fixes for QPACK
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Simone Bordet
730ef449a0
Issue #6728 - QUIC and HTTP/3
...
- Started implementation of HTTP/3 APIs, frames and parsing.
- Started implementation of server-side HTTP/3.
- Reworked the threading model in QUIC to be more efficient and avoid contending on the QPACK encoder/decoder.
- Updated QPACK NBitLongEncoder to support QUIC stream IDs of type long.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
4bdcfff94c
Cleanups, bug fix and improve testing
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
a95fe3bfb8
Improvements & bug fixes from testing
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
22e513a272
Fix licence header, and checkstyle issues.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
684272e1ae
Improve QPACK testing for instruction parsers.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
b2a91fdbaf
Remove all synchronization from QpackEncoder & QpackDecoder
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
5cde0ca7c8
QpackEncoder.encode should take buffer to encode into instead of allocating.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
0ccb826532
Filter out connection specific headers for Http3Fields
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
3a6a3e094d
Use MetaData instead of HttpFields for QPACK
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
27122c2c91
Fix broken test case EncodeDecodeTest.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
ea70f599bb
Refactor QPACK to use an internal package for non API classes.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
f9606770b3
Use calculated header size for QpackEncoder buffer allocation.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
191b1af880
Qpack refactoring, testing and bug fixes.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
a4938a3f4a
Renaming and change package access.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
da50072cc8
The QpackEncoder should be able to use PreEncodedHttpFields.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
c9dfded16a
Implement the QpackFieldPreEncoder allowing it to use static table references.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
c3d69b3e60
DynamicTable should use a configurable draining index, only updated on insertions.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
1ae03a9d40
Allow extensions of QpackEncoder to override choice to huffman encode.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
f1e46c6127
Add synchronization to both Qpack Encoder and Decoder.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
7c042b5205
wip
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
f8e2831185
Implement SectionAcknowledgment and StreamCancellation
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
c271b70d29
Rewrite QpackEncoder.encode for HttpField, implement Duplicates.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
bdf44b8e22
Work through examples B.1. and B.2. from spec and fix bugs.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
5b178d16b7
Write the basic implementation for the QpackEncoder.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
ae4f33ed9e
Remove the QPACK tests which only apply to HTTP/2 HPACK.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
5958bae765
QpackDecoder should take the Stream ID to decode.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
08b612feca
Add basic implementation for the QpackDecoder.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
9d9e13cf3a
Use setPrefix API for NBitIntegerParser
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
12a64b1637
Use classes for encoder and decoder instructions.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
883e4f79c2
Implement Encoder & Decoder Streams to encode instructions.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
2916b60091
Implement insertNameWithReference and insertWithLiteralName in EncoderInstructionParser.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
b3cd2a1c27
Implement setCapacity and duplicate on the Encoder Instruction Parser.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
7c34d3c0cd
Implement a decoder instruction parser & add tests.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
96b940e35d
Add copy of the new QPACK static table from SPEC.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
f39313b1d5
Decouple the DynamicTable from the QpackContext.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
5d07842af8
Extract the StaticTable from the QpackContext.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
f8d2d9c600
Refactor names of HPACK to QPACK
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Lachlan Roberts
ee042b173a
Copy http2-hpack files into http3-qpack.
...
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
2021-12-20 09:33:38 +01:00
Ludovic Orban
4b6bcca529
get rid of promoteSession()
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
2f3587ef6d
refactor session creation
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
0d890dc1c1
minor ref change
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
9f9d022373
improve debug logs
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
b1c8a9a1b8
make close(Throwable) private
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
59fe74a598
improve debug logs
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
5424f67132
dispatch from the timer thread to iterate
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
2244be64ef
do not write directly to the endpoint
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
f860f1ca7c
improve toString
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
e10dcad826
do not write directly to the endpoint
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
624f0f1ce4
fix log
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c68d8e95cb
fix log
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
619ba7a090
todo
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c6093e9859
todos and cleanups
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c117fbc61a
todos and cleanups
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
197851257e
cleanup tests
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c96d64a04d
cleanup tests
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
0771d860df
get rid of QuicheConfig in QuicClientConnector
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
b8f39b5b2c
get rid of HttpClientTransportOverQuic and IClientConnector
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c70f49c773
improve quiche error handling
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
4455291bf9
make ClientQuicConnector extend from ClientConnector
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
9ad1c0e7a0
client quic config is kinda configurable now
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
34bf18cd8c
fix max multiplex
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
b151957a5b
more end2end tests
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
a12a2f34e5
clean up alpn protocol configuration
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
82960f417e
clean up alpn protocol configuration
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
89369b9c25
introduce char_pointer native type
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
c2335c1e77
throw a specific exception on token validation error
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
a4e4872a9a
notify and cleanup when quic connection is refused
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
29b2f8fa8a
add a way to build a connection id object from a cid array
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00
Ludovic Orban
e1ceffe25a
make onClose overridable and null-safe
...
Signed-off-by: Ludovic Orban <lorban@bitronix.be>
2021-12-20 09:33:38 +01:00