/** * Indicates if the response should be chunked because its length is * unknown. * * @param response * The response to analyze. * @return True if the response should be chunked. */ public boolean shouldResponseBeChunked(Response response) { return (response.getEntity() != null) && !response.getEntity().hasKnownSize(); }
/** * Indicates if the request entity should be chunked. * * @return True if the request should be chunked */ protected boolean shouldRequestBeChunked(Request request) { return request.isEntityAvailable() && (request.getEntity() != null) && !request.getEntity().hasKnownSize(); } }
/** * Returns the size effectively available. This returns the same value as {@link Representation#getSize()} if no * range is defined, otherwise it * returns the size of the range using {@link Range#getSize()}. * * @param representation * The representation to evaluate. * @return The available size. */ public static long getAvailableSize(Representation representation) { Range range = representation.getRange(); if (range == null || !isBytesRange(range)) { return representation.getSize(); } else if (range.getSize() != Range.SIZE_MAX) { if (representation.hasKnownSize()) { return Math.min(range.getIndex() + range.getSize(), representation.getSize()) - range.getIndex(); } else { return Representation.UNKNOWN_SIZE; } } else if (representation.hasKnownSize()) { if (range.getIndex() != Range.INDEX_LAST) { return representation.getSize() - range.getIndex(); } return representation.getSize(); } return Representation.UNKNOWN_SIZE; }
Range requestedRange = request.getRanges().get(0); if ((!response.getEntity().hasKnownSize()) && ((requestedRange.getIndex() == Range.INDEX_LAST || requestedRange.getSize() == Range.SIZE_MAX) if (response.getEntity().hasKnownSize() && requestedRange.getSize() > response.getEntity().getAvailableSize()) { requestedRange.setSize(Range.SIZE_MAX);