Issue #2711 - TLS 1.3 compliance.
Disabled few tests that are TLS 1.2 specific.
Renegotiation in SslConnection is now skipped for TLS 1.3.
Replaced SNI keystore DSA certificate with RSA certificate.
First full build achieved with JDK 11+28.
Small changes after review.
Modified the test case to pass in JDK 8, where the implementation
throws SSLException, while in later JDKs throws SSLHandshakeException.
Minor cleanup
Signed-off-by: Greg Wilkins <gregw@webtide.com>
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
* Issue #2468 - Remove SoLinger.
For non-blocking sockets, StandardSocketOptions#SO_LINGER javadocs
report that the behavior is undefined. In JDK 11 setting SoLinger
for non-blocking sockets will be ignored.
As such, there is no point in allowing SoLinger to be configured
in Jetty that only uses non-blocking sockets.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
Tests in SaveOptimizeTest were checking if the last time the SessionData had been saved was greater than it was before
if the second save occured on the same millisecond as the first it failed the assertion
now counting how many times the SessionData has been saved instead of when it was saved
Added memory barriers to TestContextScopeListener and TestSessionDataStore as they are being accessed from multiple different threads in the test
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
* Fixes#2616 - Trailers preventing client from processing all the data.
Trailer handling was erroneously firing the response success event
before all the response content events happened.
Now the trailer handling uses a poison-pill DATA frame to make sure that
all response content events happen before the response success event.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
HttpClient was confused by servers that responded
with two 100 Continue in the same HTTP conversation.
Now, whether the 100 Continue response has been handled
already is stored per-request, not per-conversation.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
* Support root base or home for quickstart #2446
Signed-off-by: Greg Wilkins <gregw@webtide.com>
* Issue #2446 - Root as base for quickstart
+ Adding more tests for differences we have to resolve
with windows vs linux root path differences.
and URI's that have an authority vs those without an authority.
without authority examples:
file:/code/
file:/C:/code/
with authority examples:
file:///code/
file:///C:/code/
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
* Using the canonical URI passes all the tests on linux, but I still have some concerns with the whole approach
Signed-off-by: Greg Wilkins <gregw@webtide.com>
* minor cleanups
Signed-off-by: Greg Wilkins <gregw@webtide.com>
* Handle windows URIs
Because a windows like `file:///F:/` has a path of `/F:/`, then it is OK to strip the trailing `/`, so the
expected normalized value can be `file:///F:`.
Signed-off-by: Greg Wilkins <gregw@webtide.com>
## SearchPattern
New class which does a fast search for patterns within strings and arrays of bytes using an implementation of the Boyer–Moore–Horspool algorithm. This was written to be used in the new MultiPartParser class to search for delimeter boundaries.
## MultiPartParser
New class which uses the SearchPattern to parse a MultiPart Mime given a ByteBuffer. Written in a non-blocking style so can be used asynchronously (although not currently be being used this way).
## MultiPartFormInputStream
New class which uses the MultiPartParser to parse a MultiPart Mime input stream into a Collection of Parts. This class is in org/eclipse/jetty/http and is designed to replace org/eclipse/jetty/util/MultiPartInputStreamParser.
## MultiPartInputStreamParser and Non Compliances
This class has been deprecated and replaced by org.eclipse.jetty.http.MultiPartFormInputStream. It accepts formats non compliant with the RFC that the new MultiPartFormInputStream does not accept. When this occurs violations are recorded by the method getNonComplianceWarnings().
## MultiParts
New interface to allow switching between the different implementations. This allows MultiParts to function in two different modes. The LEGACY implementation using the UTIL parser which may parse forms containing non compliances with the RFC, and the RFC7578 implementation using the new and faster HTTP parser. This file contains the implementations of MultiParts for HTTP and UTIL parsers as nested classes which are used by Request.
## Request
Changed to use the new MultiParts interface instead of the MultiPartInputStreamParser class. with a method called newMultiParts which will construct a MultiPart using one of the HTTP or UTIL implementations depending on what compliance mode is set.
## Jetty Test Webapp Dump Servlet
Code added to display parts while running the dump test webapp if MuliPart form is submitted.
## MultiPartBenchMark
JMH Benchmark of the HTTP multipart parser vs the UTIL multipart parser.
testLargeGenerated parses a 10MB file of random binary data.
testParser parses a series of small multipart forms captured by a browser.
```
# Run complete. Total time: 00:02:09
Benchmark (parserType) Mode Cnt Score Error Units
MultiPartBenchmark.testLargeGenerated UTIL avgt 10 0.252 ± 0.025 s/op
MultiPartBenchmark.testLargeGenerated HTTP avgt 10 0.035 ± 0.004 s/op
MultiPartBenchmark.testParser UTIL avgt 10 0.028 ± 0.005 s/op
MultiPartBenchmark.testParser HTTP avgt 10 0.015 ± 0.006 s/op
```