@Override public void flushCacheEntriesInvalidatedByRequest(final HttpHost host, final HttpRequest request) { if (log.isDebugEnabled()) { log.debug("Flush cache entries invalidated by request: " + host + "; " + new RequestLine(request)); } cacheInvalidator.flushCacheEntriesInvalidatedByRequest(host, request, cacheKeyGenerator, storage); }
@Override protected T createMessage(final CharArrayBuffer buffer) throws HttpException { final RequestLine requestLine = getLineParser().parseRequestLine(buffer); final T request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri()); request.setVersion(requestLine.getProtocolVersion()); return request; }
@Test public void testRLParse() throws Exception { final CharArrayBuffer buf = new CharArrayBuffer(64); //typical request line buf.clear(); buf.append("GET /stuff HTTP/1.1"); RequestLine requestline = this.parser.parseRequestLine(buf); Assert.assertEquals("GET /stuff HTTP/1.1", requestline.toString()); Assert.assertEquals("GET", requestline.getMethod()); Assert.assertEquals("/stuff", requestline.getUri()); Assert.assertEquals(HttpVersion.HTTP_1_1, requestline.getProtocolVersion()); //Lots of blanks buf.clear(); buf.append(" GET /stuff HTTP/1.1 "); requestline = this.parser.parseRequestLine(buf); Assert.assertEquals("GET /stuff HTTP/1.1", requestline.toString()); Assert.assertEquals("GET", requestline.getMethod()); Assert.assertEquals("/stuff", requestline.getUri()); Assert.assertEquals(HttpVersion.HTTP_1_1, requestline.getProtocolVersion()); //this is not strictly valid, but is lenient buf.clear(); buf.append("\rGET /stuff HTTP/1.1"); requestline = this.parser.parseRequestLine(buf); Assert.assertEquals("GET", requestline.getMethod()); Assert.assertEquals("/stuff", requestline.getUri()); Assert.assertEquals(HttpVersion.HTTP_1_1, requestline.getProtocolVersion()); }
@Override protected ClassicHttpRequest createMessage(final CharArrayBuffer buffer) throws IOException, HttpException { final RequestLine requestLine = getLineParser().parseRequestLine(buffer); final ClassicHttpRequest request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri()); request.setVersion(requestLine.getProtocolVersion()); return request; }
@Override public Cancellable flushCacheEntriesInvalidatedByRequest( final HttpHost host, final HttpRequest request, final FutureCallback<Boolean> callback) { if (log.isDebugEnabled()) { log.debug("Flush cache entries invalidated by request: " + host + "; " + new RequestLine(request)); } return cacheInvalidator.flushCacheEntriesInvalidatedByRequest(host, request, cacheKeyGenerator, storage, callback); }
@Override protected T createMessage(final CharArrayBuffer buffer) throws HttpException { final RequestLine requestLine = getLineParser().parseRequestLine(buffer); final T request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri()); request.setVersion(requestLine.getProtocolVersion()); return request; }
@Override public void flushCacheEntriesFor(final HttpHost host, final HttpRequest request) { if (log.isDebugEnabled()) { log.debug("Flush cache entries: " + host + "; " + new RequestLine(request)); } if (!StandardMethods.isSafe(request.getMethod())) { final String cacheKey = cacheKeyGenerator.generateKey(host, request); try { storage.removeEntry(cacheKey); } catch (final ResourceIOException ex) { if (log.isWarnEnabled()) { log.warn("I/O error removing cache entry with key " + cacheKey); } } } }
@Override protected ClassicHttpRequest createMessage(final CharArrayBuffer buffer) throws IOException, HttpException { final RequestLine requestLine = getLineParser().parseRequestLine(buffer); final ClassicHttpRequest request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri()); request.setVersion(requestLine.getProtocolVersion()); return request; }
@Override public void flushCacheEntriesInvalidatedByExchange(final HttpHost host, final HttpRequest request, final HttpResponse response) { if (log.isDebugEnabled()) { log.debug("Flush cache entries invalidated by exchange: " + host + "; " + new RequestLine(request) + " -> " + new StatusLine(response)); } if (!StandardMethods.isSafe(request.getMethod())) { cacheInvalidator.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyGenerator, storage); } }
@Override public void formatRequestLine(final CharArrayBuffer buffer, final RequestLine reqline) { Args.notNull(buffer, "Char array buffer"); Args.notNull(reqline, "Request line"); buffer.append(reqline.getMethod()); buffer.append(' '); buffer.append(reqline.getUri()); buffer.append(' '); formatProtocolVersion(buffer, reqline.getProtocolVersion()); }
@Override public void reuseVariantEntryFor( final HttpHost host, final HttpRequest request, final Variant variant) { if (log.isDebugEnabled()) { log.debug("Re-use variant entry: " + host + "; " + new RequestLine(request) + " / " + variant); } final String cacheKey = cacheKeyGenerator.generateKey(host, request); final HttpCacheEntry entry = variant.getEntry(); final String variantKey = cacheKeyGenerator.generateVariantKey(request, entry); final String variantCacheKey = variant.getCacheKey(); try { storage.updateEntry(cacheKey, new HttpCacheCASOperation() { @Override public HttpCacheEntry execute(final HttpCacheEntry existing) throws ResourceIOException { return cacheUpdateHandler.updateParentCacheEntry(request.getRequestUri(), existing, entry, variantKey, variantCacheKey); } }); } catch (final HttpCacheUpdateException ex) { if (log.isWarnEnabled()) { log.warn("Cannot update cache entry with key " + cacheKey); } } catch (final ResourceIOException ex) { if (log.isWarnEnabled()) { log.warn("I/O error updating cache entry with key " + cacheKey); } } }
@Override public void formatRequestLine(final CharArrayBuffer buffer, final RequestLine reqline) { Args.notNull(buffer, "Char array buffer"); Args.notNull(reqline, "Request line"); buffer.append(reqline.getMethod()); buffer.append(' '); buffer.append(reqline.getUri()); buffer.append(' '); formatProtocolVersion(buffer, reqline.getProtocolVersion()); }
@Override public HttpCacheEntry updateCacheEntry( final HttpHost host, final HttpRequest request, final HttpCacheEntry stale, final HttpResponse originResponse, final Date requestSent, final Date responseReceived) { if (log.isDebugEnabled()) { log.debug("Update cache entry: " + host + "; " + new RequestLine(request)); } final String cacheKey = cacheKeyGenerator.generateKey(host, request); try { final HttpCacheEntry updatedEntry = cacheUpdateHandler.updateCacheEntry( request.getRequestUri(), stale, requestSent, responseReceived, originResponse); storeInCache(cacheKey, host, request, updatedEntry); return updatedEntry; } catch (final ResourceIOException ex) { if (log.isWarnEnabled()) { log.warn("I/O error updating cache entry with key " + cacheKey); } return stale; } }
@Override public Cancellable flushCacheEntriesInvalidatedByExchange( final HttpHost host, final HttpRequest request, final HttpResponse response, final FutureCallback<Boolean> callback) { if (log.isDebugEnabled()) { log.debug("Flush cache entries invalidated by exchange: " + host + "; " + new RequestLine(request) + " -> " + new StatusLine(response)); } if (!StandardMethods.isSafe(request.getMethod())) { return cacheInvalidator.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyGenerator, storage, callback); } callback.completed(Boolean.TRUE); return Operations.nonCancellable(); }
@Override public HttpCacheEntry updateVariantCacheEntry( final HttpHost host, final HttpRequest request, final HttpResponse originResponse, final Variant variant, final Date requestSent, final Date responseReceived) { if (log.isDebugEnabled()) { log.debug("Update variant cache entry: " + host + "; " + new RequestLine(request) + " / " + variant); } final HttpCacheEntry entry = variant.getEntry(); final String cacheKey = variant.getCacheKey(); try { final HttpCacheEntry updatedEntry = cacheUpdateHandler.updateCacheEntry( request.getRequestUri(), entry, requestSent, responseReceived, originResponse); storeEntry(cacheKey, updatedEntry); return updatedEntry; } catch (final ResourceIOException ex) { if (log.isWarnEnabled()) { log.warn("I/O error updating cache entry with key " + cacheKey); } return entry; } }
@Override public HttpCacheEntry getCacheEntry(final HttpHost host, final HttpRequest request) { if (log.isDebugEnabled()) { log.debug("Get cache entry: " + host + "; " + new RequestLine(request));
@Override public Map<String, Variant> getVariantCacheEntriesWithEtags(final HttpHost host, final HttpRequest request) { if (log.isDebugEnabled()) { log.debug("Get variant cache entries: " + host + "; " + new RequestLine(request));
final HttpHost host, final HttpRequest request, final FutureCallback<Map<String, Variant>> callback) { if (log.isDebugEnabled()) { log.debug("Get variant cache entries: " + host + "; " + new RequestLine(request));
final FutureCallback<HttpCacheEntry> callback) { if (log.isDebugEnabled()) { log.debug("Update cache entry: " + host + "; " + new RequestLine(request));
@Override public Cancellable getCacheEntry(final HttpHost host, final HttpRequest request, final FutureCallback<HttpCacheEntry> callback) { if (log.isDebugEnabled()) { log.debug("Get cache entry: " + host + "; " + new RequestLine(request));