public NettyResponseHeaders(HttpHeaders responseHeaders, HttpHeaders traillingHeaders) { super(traillingHeaders != null); this.responseHeaders = responseHeaders; this.trailingHeaders = traillingHeaders; headers = computerHeaders(); }
@Override public Response prepareResponse(HttpResponseHeaders headers, List<HttpResponseBodyPart> bodyParts) { return new NettyResponse(this, headers, bodyParts); } }
@Override public String getResponseBody() throws IOException { return getResponseBody(null); }
HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response); HttpResponseHeaders responseHeaders = new NettyResponseHeaders(response.headers()); Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm(); NettyResponseBodyPart part = new NettyResponseBodyPart(null, webSocketChunk, frame.isFinalFragment()); handler.onBodyPartReceived(part);
public String getResponseBody(String charset) throws IOException { return getResponseBodyAsChannelBuffer().toString(calculateCharset(charset)); }
private void handleChunk(HttpChunk chunk,// final Channel channel,// final NettyResponseFuture<?> future,// AsyncHandler<?> handler) throws IOException, Exception { boolean last = chunk.isLast(); // we don't notify updateBodyAndInterrupt with the last chunk as it's empty if (last || updateBodyAndInterrupt(future, handler, new NettyResponseBodyPart(null, chunk, last))) { // only possible if last is true if (chunk instanceof HttpChunkTrailer) { HttpChunkTrailer chunkTrailer = (HttpChunkTrailer) chunk; if (!chunkTrailer.trailingHeaders().isEmpty()) { NettyResponseHeaders responseHeaders = new NettyResponseHeaders(future.getHttpHeaders(), chunkTrailer.trailingHeaders()); handler.onHeadersReceived(responseHeaders); } } finishUpdate(future, channel, !chunk.isLast()); } }
private boolean handleHttpResponse(final HttpResponse response,// final Channel channel,// final NettyResponseFuture<?> future,// AsyncHandler<?> handler) throws Exception { HttpRequest httpRequest = future.getNettyRequest().getHttpRequest(); ProxyServer proxyServer = future.getProxyServer(); logger.debug("\n\nRequest {}\n\nResponse {}\n", httpRequest, response); // store the original headers so we can re-send all them to // the handler in case of trailing headers future.setHttpHeaders(response.headers()); future.setKeepAlive(connectionStrategy.keepAlive(httpRequest, response)); NettyResponseStatus status = new NettyResponseStatus(future.getUri(), config, response); int statusCode = response.getStatus().getCode(); Request request = future.getRequest(); Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm(); NettyResponseHeaders responseHeaders = new NettyResponseHeaders(response.headers()); return exitAfterProcessingFilters(channel, future, handler, status, responseHeaders) || exitAfterHandling401(channel, future, response, request, statusCode, realm) || // exitAfterHandling407(channel, future, response, request, statusCode, proxyServer) || // exitAfterHandling100(channel, future, statusCode) || // exitAfterHandlingRedirect(channel, future, response, request, statusCode, realm) || // exitAfterHandlingConnect(channel, future, request, proxyServer, statusCode, httpRequest) || // exitAfterHandlingStatus(channel, future, response, handler, status) || // exitAfterHandlingHeaders(channel, future, response, handler, responseHeaders) || // exitAfterHandlingBody(channel, future, response, handler); }
public ChannelBuffer getResponseBodyAsChannelBuffer() throws IOException { ChannelBuffer b = null; switch (bodyParts.size()) { case 0: b = ChannelBuffers.EMPTY_BUFFER; break; case 1: b = NettyResponseBodyPart.class.cast(bodyParts.get(0)).getChannelBuffer(); break; default: ChannelBuffer[] channelBuffers = new ChannelBuffer[bodyParts.size()]; for (int i = 0; i < bodyParts.size(); i++) { channelBuffers[i] = NettyResponseBodyPart.class.cast(bodyParts.get(i)).getChannelBuffer(); } b = ChannelBuffers.wrappedBuffer(channelBuffers); } return b; }
@Override public byte[] getResponseBodyAsBytes() throws IOException { return channelBuffer2bytes(getResponseBodyAsChannelBuffer()); }
@Override public String getResponseBodyExcerpt(int maxLength) throws IOException { return getResponseBodyExcerpt(maxLength, null); }
private boolean updateBodyAndInterrupt(NettyResponseFuture<?> future, AsyncHandler<?> handler, NettyResponseBodyPart bodyPart) throws Exception { boolean interrupt = handler.onBodyPartReceived(bodyPart) != STATE.CONTINUE; if (bodyPart.isUnderlyingConnectionToBeClosed()) future.setKeepAlive(false); return interrupt; }
private boolean exitAfterHandlingBody(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler) throws Exception { if (!response.isChunked()) { // no chunks expected, exiting if (response.getContent().readableBytes() > 0) // FIXME no need to notify an empty bodypart? updateBodyAndInterrupt(future, handler, new NettyResponseBodyPart(response, null, true)); finishUpdate(future, channel, false); return true; } return false; }
@Override public Response prepareResponse(HttpResponseHeaders headers, List<HttpResponseBodyPart> bodyParts) { return new NettyResponse(this, headers, bodyParts); } }
public int writeTo(OutputStream outputStream) throws IOException { ChannelBuffer b = getChannelBuffer(); int read = b.readableBytes(); int index = b.readerIndex(); if (read > 0) { b.readBytes(outputStream, read); } b.readerIndex(index); return read; }
@Override public ByteBuffer getResponseBodyAsByteBuffer() throws IOException { return getResponseBodyAsChannelBuffer().toByteBuffer(); }
public NettyResponseHeaders(HttpHeaders responseHeaders, HttpHeaders traillingHeaders) { super(traillingHeaders != null); this.responseHeaders = responseHeaders; this.trailingHeaders = traillingHeaders; headers = computerHeaders(); }
public String getResponseBodyExcerpt(int maxLength, String charset) throws IOException { String response = getResponseBody(charset); return response.length() <= maxLength ? response : response.substring(0, maxLength); }
public void onBinaryFragment(HttpResponseBodyPart part) { for (WebSocketListener listener : listeners) { if (listener instanceof WebSocketByteFragmentListener) WebSocketByteFragmentListener.class.cast(listener).onFragment(part); } if (interestedInByteMessages) { ChannelBuffer fragment = NettyResponseBodyPart.class.cast(part).getChannelBuffer(); if (part.isLast()) { if (bufferSize == 0) { notifyByteListeners(fragment); } else { bufferFragment(fragment); notifyByteListeners(wrappedBuffer(fragments().toArray(new ChannelBuffer[fragments().size()]))); } reset(); } else bufferFragment(fragment); } }
@Override public InputStream getResponseBodyAsStream() throws IOException { return new ChannelBufferInputStream(getResponseBodyAsChannelBuffer()); }
public void onTextFragment(HttpResponseBodyPart part) { for (WebSocketListener listener : listeners) { if (listener instanceof WebSocketTextFragmentListener) WebSocketTextFragmentListener.class.cast(listener).onFragment(part); } if (interestedInTextMessages) { ChannelBuffer fragment = NettyResponseBodyPart.class.cast(part).getChannelBuffer(); if (part.isLast()) { if (bufferSize == 0) { notifyTextListeners(fragment); } else { bufferFragment(fragment); notifyTextListeners(wrappedBuffer(fragments().toArray(new ChannelBuffer[fragments().size()]))); } reset(); } else bufferFragment(fragment); } }