This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
The following commit(s) were added to refs/heads/geoapi-4.0 by this push: new 4220566418 Get "HTTP range" to work with Nginx in addition of Apache httpd. 4220566418 is described below commit 422056641844b1ec8c73c28d44ab1e13b2891c6e Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Thu Feb 9 16:09:35 2023 +0100 Get "HTTP range" to work with Nginx in addition of Apache httpd. --- .../internal/storage/io/FileCacheByteChannel.java | 30 +++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/FileCacheByteChannel.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/FileCacheByteChannel.java index 544532dedb..15fe5a29e6 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/FileCacheByteChannel.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/FileCacheByteChannel.java @@ -16,6 +16,7 @@ */ package org.apache.sis.internal.storage.io; +import java.util.Collection; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -126,15 +127,15 @@ public abstract class FileCacheByteChannel implements SeekableByteChannel { * * @param input the input stream for reading the bytes. * @param contentLength length of the response content, or -1 if unknown. - * @param acceptRanges value of "Accept-Ranges" in HTTP header. + * @param rangeUnits value of "Accept-Ranges" in HTTP header, which lists the accepted units. * @throws IllegalArgumentException if the start, end or length cannot be parsed. */ - public Connection(final InputStream input, final long contentLength, final Iterable<String> acceptRanges) { - this.input = input; - this.start = 0; - this.end = (contentLength > 0) ? contentLength - 1 : Long.MAX_VALUE; - this.length = contentLength; - this.acceptRanges = acceptRanges(acceptRanges); + public Connection(final InputStream input, final long contentLength, final Iterable<String> rangeUnits) { + this.input = input; + this.start = 0; + this.end = (contentLength > 0) ? contentLength - 1 : Long.MAX_VALUE; + this.length = contentLength; + acceptRanges = acceptRanges(rangeUnits); } /** @@ -144,12 +145,12 @@ public abstract class FileCacheByteChannel implements SeekableByteChannel { * * <p>Example of content range value: {@code "Content-Range: bytes 25000-75000/100000"}.</p> * - * @param input the input stream for reading the bytes. - * @param contentRange value of "Content-Range" in HTTP header, or {@code null} if none. - * @param acceptRanges value of "Accept-Ranges" in HTTP header. + * @param input the input stream for reading the bytes. + * @param contentRange value of "Content-Range" in HTTP header. + * @param rangeUnits value of "Accept-Ranges" in HTTP header, which lists the accepted units. * @throws IllegalArgumentException if the start, end or length cannot be parsed. */ - public Connection(final InputStream input, String contentRange, final Iterable<String> acceptRanges) { + public Connection(final InputStream input, String contentRange, final Collection<String> rangeUnits) { this.input = input; long contentLength = -1; contentRange = contentRange.trim(); @@ -168,7 +169,12 @@ public abstract class FileCacheByteChannel implements SeekableByteChannel { if (rs < 0) rs = ls; start = Long.parseLong(contentRange.substring(s, rs).trim()); end = (rs < ls) ? Long.parseLong(contentRange.substring(rs+1, ls).trim()) : length; - this.acceptRanges = acceptRanges(acceptRanges); + /* + * By default Apache server repeats the information about accepted range units, + * while Nginx does not. If that information is not provided, assume that the + * supported units did not changed. + */ + acceptRanges = rangeUnits.isEmpty() || acceptRanges(rangeUnits); } /**