public boolean hasCacheControlDirective(final HttpCacheEntry entry, final String directive) { final Iterator<HeaderElement> it = MessageSupport.iterate(entry, HeaderConstants.CACHE_CONTROL); while (it.hasNext()) { final HeaderElement elt = it.next(); if (directive.equalsIgnoreCase(elt.getName())) { return true; } } return false; }
final StringBuilder buf = new StringBuilder(); boolean first = true; for (final HeaderElement elt : MessageSupport.parse(h)) { if ("identity".equalsIgnoreCase(elt.getName())) { modified = true;
@Override public void process( final HttpResponse response, final EntityDetails entity, final HttpContext context) throws HttpException, IOException { Args.notNull(context, "HTTP context"); final ProtocolVersion ver = context.getProtocolVersion(); if (ver.getMajor() < 2) { super.process(response, entity, context); } else if (entity != null) { MessageSupport.addContentTypeHeader(response, entity); MessageSupport.addContentEncodingHeader(response, entity); MessageSupport.addTrailerHeader(response, entity); } }
@Test public void testAddContentHeaders() throws Exception { final HttpEntityWithTrailers entity = new HttpEntityWithTrailers( new StringEntity("some stuff with trailers", StandardCharsets.US_ASCII), new BasicHeader("z", "this"), new BasicHeader("b", "that"), new BasicHeader("a", "this and that")); final HttpMessage message = new BasicHttpResponse(200); MessageSupport.addTrailerHeader(message, entity); MessageSupport.addContentTypeHeader(message, entity); final Header h1 = message.getFirstHeader(HttpHeaders.TRAILER); final Header h2 = message.getFirstHeader(HttpHeaders.CONTENT_TYPE); Assert.assertNotNull(h1); Assert.assertEquals("a, b, z", h1.getValue()); Assert.assertNotNull(h2); Assert.assertEquals("text/plain; charset=US-ASCII", h2.getValue()); }
public static void addTrailerHeader(final HttpMessage message, final EntityDetails entity) { if (entity != null && !message.containsHeader(HttpHeaders.TRAILER)) { final Set<String> trailerNames = entity.getTrailerNames(); if (trailerNames != null && !trailerNames.isEmpty()) { message.setHeader(MessageSupport.format(HttpHeaders.TRAILER, trailerNames)); } } }
@Override public Set<String> getTrailerNames() { final Header h = message.getFirstHeader(HttpHeaders.TRAILER); if (h == null) { return Collections.emptySet(); } return MessageSupport.parseTokens(h); }
@Override public void process( final HttpRequest request, final EntityDetails entity, final HttpContext context) throws HttpException, IOException { Args.notNull(context, "HTTP context"); final ProtocolVersion ver = context.getProtocolVersion(); if (ver.getMajor() < 2) { super.process(request, entity, context); } else if (entity != null) { MessageSupport.addContentTypeHeader(request, entity); MessageSupport.addContentEncodingHeader(request, entity); MessageSupport.addTrailerHeader(request, entity); } } }
@Test public void testContentHeadersAlreadyPresent() throws Exception { final HttpEntityWithTrailers entity = new HttpEntityWithTrailers( new StringEntity("some stuff with trailers", StandardCharsets.US_ASCII), new BasicHeader("z", "this"), new BasicHeader("b", "that"), new BasicHeader("a", "this and that")); final HttpMessage message = new BasicHttpResponse(200); message.addHeader(HttpHeaders.TRAILER, "a, a, a"); message.addHeader(HttpHeaders.CONTENT_TYPE, "text/plain; charset=ascii"); MessageSupport.addTrailerHeader(message, entity); MessageSupport.addContentTypeHeader(message, entity); final Header h1 = message.getFirstHeader(HttpHeaders.TRAILER); final Header h2 = message.getFirstHeader(HttpHeaders.CONTENT_TYPE); Assert.assertNotNull(h1); Assert.assertEquals("a, a, a", h1.getValue()); Assert.assertNotNull(h2); Assert.assertEquals("text/plain; charset=ascii", h2.getValue()); }
public static void addTrailerHeader(final HttpMessage message, final EntityDetails entity) { if (entity != null && !message.containsHeader(HttpHeaders.TRAILER)) { final Set<String> trailerNames = entity.getTrailerNames(); if (trailerNames != null && !trailerNames.isEmpty()) { message.setHeader(MessageSupport.format(HttpHeaders.TRAILER, trailerNames)); } } }
@Override public Set<String> getTrailerNames() { final Header h = message.getFirstHeader(HttpHeaders.TRAILER); if (h == null) { return Collections.emptySet(); } return MessageSupport.parseTokens(h); }
boolean mayCallBackend(final HttpRequest request) { final Iterator<HeaderElement> it = MessageSupport.iterate(request, HeaderConstants.CACHE_CONTROL); while (it.hasNext()) { final HeaderElement elt = it.next(); if ("only-if-cached".equals(elt.getName())) { log.debug("Request marked only-if-cached"); return false; } } return true; }
MessageSupport.addTrailerHeader(request, entity); } else { request.addHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(entity.getContentLength())); MessageSupport.addContentTypeHeader(request, entity); MessageSupport.addContentEncodingHeader(request, entity);
@Test public void testTrailerNoTrailers() throws Exception { final Header header = MessageSupport.format(HttpHeaders.TRAILER); Assert.assertNull(header); }
public static Set<String> parseTokens(final Header header) { Args.notNull(header, "Header"); if (header instanceof FormattedHeader) { final CharArrayBuffer buf = ((FormattedHeader) header).getBuffer(); final ParserCursor cursor = new ParserCursor(0, buf.length()); cursor.updatePos(((FormattedHeader) header).getValuePos()); return parseTokens(buf, cursor); } final String value = header.getValue(); final ParserCursor cursor = new ParserCursor(0, value.length()); return parseTokens(value, cursor); }
@Test public void test206ResponseGeneratedFromCacheMustHaveContentRangeOrMultipartByteRangesContentType() throws Exception { final ClassicHttpRequest req1 = new BasicClassicHttpRequest("GET", "/"); final ClassicHttpResponse resp1 = HttpTestUtils.make200Response(); resp1.setHeader("ETag", "\"etag\""); resp1.setHeader("Cache-Control", "max-age=3600"); final ClassicHttpRequest req2 = new BasicClassicHttpRequest("GET", "/"); req2.setHeader("Range", "bytes=0-50"); backendExpectsAnyRequestAndReturn(resp1).times(1, 2); replayMocks(); execute(req1); final ClassicHttpResponse result = execute(req2); verifyMocks(); if (HttpStatus.SC_PARTIAL_CONTENT == result.getCode()) { if (result.getFirstHeader("Content-Range") == null) { final HeaderElement elt = MessageSupport.parse(result.getFirstHeader("Content-Type"))[0]; Assert.assertTrue("multipart/byteranges".equalsIgnoreCase(elt.getName())); Assert.assertNotNull(elt.getParameterByName("boundary")); Assert.assertNotNull(elt.getParameterByName("boundary").getValue()); Assert.assertFalse("".equals(elt.getParameterByName("boundary").getValue().trim())); } } }
protected boolean hasCacheControlParameterFrom(final HttpMessage msg, final String[] params) { final Iterator<HeaderElement> it = MessageSupport.iterate(msg, HeaderConstants.CACHE_CONTROL); while (it.hasNext()) { final HeaderElement elem = it.next(); for (final String param : params) { if (param.equalsIgnoreCase(elem.getName())) { return true; } } } return false; }
MessageSupport.addTrailerHeader(request, entity); } else { request.addHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(entity.getContentLength())); MessageSupport.addContentTypeHeader(request, entity); MessageSupport.addContentEncodingHeader(request, entity);
@Test public void testTokensFormattingSameName() throws Exception { final Header header = MessageSupport.format(HttpHeaders.TRAILER, "a", "a", "a"); Assert.assertNotNull(header); Assert.assertEquals("a, a, a", header.getValue()); }
public static Set<String> parseTokens(final Header header) { Args.notNull(header, "Header"); if (header instanceof FormattedHeader) { final CharArrayBuffer buf = ((FormattedHeader) header).getBuffer(); final ParserCursor cursor = new ParserCursor(0, buf.length()); cursor.updatePos(((FormattedHeader) header).getValuePos()); return parseTokens(buf, cursor); } final String value = header.getValue(); final ParserCursor cursor = new ParserCursor(0, value.length()); return parseTokens(value, cursor); }
final StringBuilder buf = new StringBuilder(); boolean first = true; for (final HeaderElement elt : MessageSupport.parse(h)) { if ("identity".equalsIgnoreCase(elt.getName())) { modified = true;