List of usage examples for io.netty.handler.codec.http HttpHeaderValues CHUNKED
AsciiString CHUNKED
To view the source code for io.netty.handler.codec.http HttpHeaderValues CHUNKED.
Click Source Link
From source file:com.bunjlabs.fuga.network.netty.NettyHttpServerHandler.java
License:Apache License
private void writeResponse(ChannelHandlerContext ctx, Request request, Response response) { HttpResponse httpresponse = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.valueOf(response.status())); httpresponse.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); httpresponse.headers().set(HttpHeaderNames.CONTENT_TYPE, response.contentType()); // Disable cache by default httpresponse.headers().set(HttpHeaderNames.CACHE_CONTROL, "no-cache, no-store, must-revalidate, max-age=0"); httpresponse.headers().set(HttpHeaderNames.PRAGMA, "no-cache"); httpresponse.headers().set(HttpHeaderNames.EXPIRES, "0"); response.headers().entrySet().stream().forEach((e) -> httpresponse.headers().set(e.getKey(), e.getValue())); httpresponse.headers().set(HttpHeaderNames.SERVER, "Fuga Netty Web Server/" + serverVersion); // Set cookies httpresponse.headers().set(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode(NettyCookieConverter.convertListToNetty(response.cookies()))); if (response.length() >= 0) { httpresponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, response.length()); }/*from w w w . j a va2s . c o m*/ if (HttpUtil.isKeepAlive(httprequest)) { httpresponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); } else { httpresponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); } ctx.write(httpresponse); if (response.stream() != null) { ctx.write(new HttpChunkedInput(new ChunkedStream(response.stream()))); } LastHttpContent fs = new DefaultLastHttpContent(); ChannelFuture sendContentFuture = ctx.writeAndFlush(fs); if (!HttpUtil.isKeepAlive(httprequest)) { sendContentFuture.addListener(ChannelFutureListener.CLOSE); } }
From source file:com.jiabo.letty.servlet.container.HttpParser.java
License:Open Source License
/** * Parse until next Event.// w w w . j av a2 s.c o m * * @return an indication of progress <0 EOF, 0 no progress, >0 progress. */ public int parseNext() throws IOException { try { int progress = 0; if (_state == STATE_END) return 0; if (_buffer == null) _buffer = getHeaderBuffer(); if (_state == STATE_CONTENT && _contentPosition == _contentLength) { _state = STATE_END; _handler.messageComplete(_contentPosition); return 1; } int length = _buffer.length(); // Fill buffer if we can if (length == 0) { int filled = -1; IOException ex = null; try { filled = fill(); LOG.debug("filled {}/{}", filled, _buffer.length()); } catch (IOException e) { LOG.debug(this.toString(), e); ex = e; } if (filled > 0) progress++; else if (filled < 0) { _persistent = false; // do we have content to deliver? if (_state > STATE_END) { if (_buffer.length() > 0 && !_headResponse) { Buffer chunk = _buffer.get(_buffer.length()); _contentPosition += chunk.length(); _contentView.update(chunk); _handler.content(chunk); // May recurse here } } // was this unexpected? switch (_state) { case STATE_END: case STATE_SEEKING_EOF: _state = STATE_END; break; case STATE_EOF_CONTENT: _state = STATE_END; _handler.messageComplete(_contentPosition); break; default: _state = STATE_END; if (!_headResponse) _handler.earlyEOF(); _handler.messageComplete(_contentPosition); } if (ex != null) throw ex; if (!isComplete() && !isIdle()) throw new EofException(); return -1; } length = _buffer.length(); } // Handle header states byte ch; byte[] array = _buffer.array(); int last = _state; while (_state < STATE_END && length-- > 0) { if (last != _state) { progress++; last = _state; } ch = _buffer.get(); if (_eol == HttpTokens.CARRIAGE_RETURN) { if (ch == HttpTokens.LINE_FEED) { _eol = HttpTokens.LINE_FEED; continue; } throw new HttpException(HttpStatus.BAD_REQUEST_400); } _eol = 0; switch (_state) { case STATE_START: _contentLength = HttpTokens.UNKNOWN_CONTENT; _cached = null; if (ch > HttpTokens.SPACE || ch < 0) { _buffer.mark(); _state = STATE_FIELD0; } break; case STATE_FIELD0: if (ch == HttpTokens.SPACE) { _tok0.update(_buffer.markIndex(), _buffer.getIndex() - 1); _responseStatus = HttpVersions.CACHE.get(_tok0) == null ? -1 : 0; _state = STATE_SPACE1; continue; } else if (ch < HttpTokens.SPACE && ch >= 0) { throw new HttpException(HttpStatus.BAD_REQUEST_400); } break; case STATE_SPACE1: if (ch > HttpTokens.SPACE || ch < 0) { _buffer.mark(); if (_responseStatus >= 0) { _state = STATE_STATUS; _responseStatus = ch - '0'; } else _state = STATE_URI; } else if (ch < HttpTokens.SPACE) { throw new HttpException(HttpStatus.BAD_REQUEST_400); } break; case STATE_STATUS: if (ch == HttpTokens.SPACE) { _tok1.update(_buffer.markIndex(), _buffer.getIndex() - 1); _state = STATE_SPACE2; continue; } else if (ch >= '0' && ch <= '9') { _responseStatus = _responseStatus * 10 + (ch - '0'); continue; } else if (ch < HttpTokens.SPACE && ch >= 0) { _handler.startResponse(HttpMethods.CACHE.lookup(_tok0), _responseStatus, null); _eol = ch; _state = STATE_HEADER; _tok0.setPutIndex(_tok0.getIndex()); _tok1.setPutIndex(_tok1.getIndex()); _multiLineValue = null; continue; } // not a digit, so must be a URI _state = STATE_URI; _responseStatus = -1; break; case STATE_URI: if (ch == HttpTokens.SPACE) { _tok1.update(_buffer.markIndex(), _buffer.getIndex() - 1); _state = STATE_SPACE2; continue; } else if (ch < HttpTokens.SPACE && ch >= 0) { // HTTP/0.9 _handler.startRequest(HttpMethods.CACHE.lookup(_tok0), _buffer.sliceFromMark(), null); _persistent = false; _state = STATE_SEEKING_EOF; _handler.headerComplete(); _handler.messageComplete(_contentPosition); return 1; } break; case STATE_SPACE2: if (ch > HttpTokens.SPACE || ch < 0) { _buffer.mark(); _state = STATE_FIELD2; } else if (ch < HttpTokens.SPACE) { if (_responseStatus > 0) { _handler.startResponse(HttpMethods.CACHE.lookup(_tok0), _responseStatus, null); _eol = ch; _state = STATE_HEADER; _tok0.setPutIndex(_tok0.getIndex()); _tok1.setPutIndex(_tok1.getIndex()); _multiLineValue = null; } else { // HTTP/0.9 _handler.startRequest(HttpMethods.CACHE.lookup(_tok0), _tok1, null); _persistent = false; _state = STATE_SEEKING_EOF; _handler.headerComplete(); _handler.messageComplete(_contentPosition); return 1; } } break; case STATE_FIELD2: if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED) { Buffer version; if (_responseStatus > 0) _handler.startResponse(version = HttpVersions.CACHE.lookup(_tok0), _responseStatus, _buffer.sliceFromMark()); else _handler.startRequest(HttpMethods.CACHE.lookup(_tok0), _tok1, version = HttpVersions.CACHE.lookup(_buffer.sliceFromMark())); _eol = ch; _persistent = HttpVersions.CACHE.getOrdinal(version) >= HttpVersions.HTTP_1_1_ORDINAL; _state = STATE_HEADER; _tok0.setPutIndex(_tok0.getIndex()); _tok1.setPutIndex(_tok1.getIndex()); _multiLineValue = null; continue; } break; case STATE_HEADER: switch (ch) { case HttpTokens.COLON: case HttpTokens.SPACE: case HttpTokens.TAB: { // header value without name - continuation? _length = -1; _state = STATE_HEADER_VALUE; break; } default: { // handler last header if any if (_cached != null || _tok0.length() > 0 || _tok1.length() > 0 || _multiLineValue != null) { Buffer header = _cached != null ? _cached : HttpHeaders.CACHE.lookup(_tok0); _cached = null; Buffer value = _multiLineValue == null ? _tok1 : new ByteArrayBuffer(_multiLineValue); int ho = HttpHeaders.CACHE.getOrdinal(header); if (ho >= 0) { int vo; switch (ho) { case HttpHeaders.CONTENT_LENGTH_ORDINAL: if (_contentLength != HttpTokens.CHUNKED_CONTENT) { try { _contentLength = BufferUtil.toLong(value); } catch (NumberFormatException e) { LOG.ignore(e); throw new HttpException(HttpStatus.BAD_REQUEST_400); } if (_contentLength <= 0) _contentLength = HttpTokens.NO_CONTENT; } break; case HttpHeaders.TRANSFER_ENCODING_ORDINAL: value = HttpHeaderValues.CACHE.lookup(value); vo = HttpHeaderValues.CACHE.getOrdinal(value); if (HttpHeaderValues.CHUNKED_ORDINAL == vo) _contentLength = HttpTokens.CHUNKED_CONTENT; else { String c = value.toString(StringUtil.__ISO_8859_1); if (c.endsWith(HttpHeaderValues.CHUNKED)) _contentLength = HttpTokens.CHUNKED_CONTENT; else if (c.indexOf(HttpHeaderValues.CHUNKED) >= 0) throw new HttpException(400, null); } break; case HttpHeaders.CONNECTION_ORDINAL: switch (HttpHeaderValues.CACHE.getOrdinal(value)) { case HttpHeaderValues.CLOSE_ORDINAL: _persistent = false; break; case HttpHeaderValues.KEEP_ALIVE_ORDINAL: _persistent = true; break; case -1: // No match, may be multi valued { for (String v : value.toString().split(",")) { switch (HttpHeaderValues.CACHE.getOrdinal(v.trim())) { case HttpHeaderValues.CLOSE_ORDINAL: _persistent = false; break; case HttpHeaderValues.KEEP_ALIVE_ORDINAL: _persistent = true; break; } } break; } } } } _handler.parsedHeader(header, value); _tok0.setPutIndex(_tok0.getIndex()); _tok1.setPutIndex(_tok1.getIndex()); _multiLineValue = null; } _buffer.setMarkIndex(-1); // now handle ch if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED) { // is it a response that cannot have a body? if (_responseStatus > 0 && // response (_responseStatus == 304 || // not-modified // response _responseStatus == 204 || // no-content // response _responseStatus < 200)) // 1xx response _contentLength = HttpTokens.NO_CONTENT; // ignore // any // other // headers // set // else if we don't know framing else if (_contentLength == HttpTokens.UNKNOWN_CONTENT) { if (_responseStatus == 0 // request || _responseStatus == 304 // not-modified // response || _responseStatus == 204 // no-content // response || _responseStatus < 200) // 1xx // response _contentLength = HttpTokens.NO_CONTENT; else _contentLength = HttpTokens.EOF_CONTENT; } _contentPosition = 0; _eol = ch; if (_eol == HttpTokens.CARRIAGE_RETURN && _buffer.hasContent() && _buffer.peek() == HttpTokens.LINE_FEED) _eol = _buffer.get(); // We convert _contentLength to an int for this // switch statement because // we don't care about the amount of data available // just whether there is some. switch (_contentLength > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) _contentLength) { case HttpTokens.EOF_CONTENT: _state = STATE_EOF_CONTENT; _handler.headerComplete(); // May recurse here ! break; case HttpTokens.CHUNKED_CONTENT: _state = STATE_CHUNKED_CONTENT; _handler.headerComplete(); // May recurse here ! break; case HttpTokens.NO_CONTENT: _handler.headerComplete(); _state = _persistent || (_responseStatus >= 100 && _responseStatus < 200) ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentPosition); return 1; default: _state = STATE_CONTENT; _handler.headerComplete(); // May recurse here ! break; } return 1; } else { // New header _length = 1; _buffer.mark(); _state = STATE_HEADER_NAME; // try cached name! if (array != null) { _cached = HttpHeaders.CACHE.getBest(array, _buffer.markIndex(), length + 1); if (_cached != null) { _length = _cached.length(); _buffer.setGetIndex(_buffer.markIndex() + _length); length = _buffer.length(); } } } } } break; case STATE_HEADER_NAME: switch (ch) { case HttpTokens.CARRIAGE_RETURN: case HttpTokens.LINE_FEED: if (_length > 0) _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length); _eol = ch; _state = STATE_HEADER; break; case HttpTokens.COLON: if (_length > 0 && _cached == null) _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length); _length = -1; _state = STATE_HEADER_VALUE; break; case HttpTokens.SPACE: case HttpTokens.TAB: break; default: { _cached = null; if (_length == -1) _buffer.mark(); _length = _buffer.getIndex() - _buffer.markIndex(); _state = STATE_HEADER_IN_NAME; } } break; case STATE_HEADER_IN_NAME: switch (ch) { case HttpTokens.CARRIAGE_RETURN: case HttpTokens.LINE_FEED: if (_length > 0) _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length); _eol = ch; _state = STATE_HEADER; break; case HttpTokens.COLON: if (_length > 0 && _cached == null) _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length); _length = -1; _state = STATE_HEADER_VALUE; break; case HttpTokens.SPACE: case HttpTokens.TAB: _state = STATE_HEADER_NAME; break; default: { _cached = null; _length++; } } break; case STATE_HEADER_VALUE: switch (ch) { case HttpTokens.CARRIAGE_RETURN: case HttpTokens.LINE_FEED: if (_length > 0) { if (_tok1.length() == 0) _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length); else { // Continuation line! if (_multiLineValue == null) _multiLineValue = _tok1.toString(StringUtil.__ISO_8859_1); _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length); _multiLineValue += " " + _tok1.toString(StringUtil.__ISO_8859_1); } } _eol = ch; _state = STATE_HEADER; break; case HttpTokens.SPACE: case HttpTokens.TAB: break; default: { if (_length == -1) _buffer.mark(); _length = _buffer.getIndex() - _buffer.markIndex(); _state = STATE_HEADER_IN_VALUE; } } break; case STATE_HEADER_IN_VALUE: switch (ch) { case HttpTokens.CARRIAGE_RETURN: case HttpTokens.LINE_FEED: if (_length > 0) { if (_tok1.length() == 0) _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length); else { // Continuation line! if (_multiLineValue == null) _multiLineValue = _tok1.toString(StringUtil.__ISO_8859_1); _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length); _multiLineValue += " " + _tok1.toString(StringUtil.__ISO_8859_1); } } _eol = ch; _state = STATE_HEADER; break; case HttpTokens.SPACE: case HttpTokens.TAB: _state = STATE_HEADER_VALUE; break; default: _length++; } break; } } // end of HEADER states loop // ========================== // Handle HEAD response if (_responseStatus > 0 && _headResponse) { _state = _persistent || (_responseStatus >= 100 && _responseStatus < 200) ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentLength); } // ========================== // Handle _content length = _buffer.length(); Buffer chunk; last = _state; while (_state > STATE_END && length > 0) { if (last != _state) { progress++; last = _state; } if (_eol == HttpTokens.CARRIAGE_RETURN && _buffer.peek() == HttpTokens.LINE_FEED) { _eol = _buffer.get(); length = _buffer.length(); continue; } _eol = 0; switch (_state) { case STATE_EOF_CONTENT: chunk = _buffer.get(_buffer.length()); _contentPosition += chunk.length(); _contentView.update(chunk); _handler.content(chunk); // May recurse here // TODO adjust the _buffer to keep unconsumed content return 1; case STATE_CONTENT: { long remaining = _contentLength - _contentPosition; if (remaining == 0) { _state = _persistent ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentPosition); return 1; } if (length > remaining) { // We can cast reamining to an int as we know that it is // smaller than // or equal to length which is already an int. length = (int) remaining; } chunk = _buffer.get(length); _contentPosition += chunk.length(); _contentView.update(chunk); _handler.content(chunk); // May recurse here if (_contentPosition == _contentLength) { _state = _persistent ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentPosition); } // TODO adjust the _buffer to keep unconsumed content return 1; } case STATE_CHUNKED_CONTENT: { ch = _buffer.peek(); if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED) _eol = _buffer.get(); else if (ch <= HttpTokens.SPACE) _buffer.get(); else { _chunkLength = 0; _chunkPosition = 0; _state = STATE_CHUNK_SIZE; } break; } case STATE_CHUNK_SIZE: { ch = _buffer.get(); if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED) { _eol = ch; if (_chunkLength == 0) { if (_eol == HttpTokens.CARRIAGE_RETURN && _buffer.hasContent() && _buffer.peek() == HttpTokens.LINE_FEED) _eol = _buffer.get(); _state = _persistent ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentPosition); return 1; } else _state = STATE_CHUNK; } else if (ch <= HttpTokens.SPACE || ch == HttpTokens.SEMI_COLON) _state = STATE_CHUNK_PARAMS; else if (ch >= '0' && ch <= '9') _chunkLength = _chunkLength * 16 + (ch - '0'); else if (ch >= 'a' && ch <= 'f') _chunkLength = _chunkLength * 16 + (10 + ch - 'a'); else if (ch >= 'A' && ch <= 'F') _chunkLength = _chunkLength * 16 + (10 + ch - 'A'); else throw new IOException("bad chunk char: " + ch); break; } case STATE_CHUNK_PARAMS: { ch = _buffer.get(); if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED) { _eol = ch; if (_chunkLength == 0) { if (_eol == HttpTokens.CARRIAGE_RETURN && _buffer.hasContent() && _buffer.peek() == HttpTokens.LINE_FEED) _eol = _buffer.get(); _state = _persistent ? STATE_END : STATE_SEEKING_EOF; _handler.messageComplete(_contentPosition); return 1; } else _state = STATE_CHUNK; } break; } case STATE_CHUNK: { int remaining = _chunkLength - _chunkPosition; if (remaining == 0) { _state = STATE_CHUNKED_CONTENT; break; } else if (length > remaining) length = remaining; chunk = _buffer.get(length); _contentPosition += chunk.length(); _chunkPosition += chunk.length(); _contentView.update(chunk); _handler.content(chunk); // May recurse here // TODO adjust the _buffer to keep unconsumed content return 1; } case STATE_SEEKING_EOF: { // Close if there is more data than CRLF if (_buffer.length() > 2) { _state = STATE_END; _endp.close(); } else { // or if the data is not white space while (_buffer.length() > 0) if (!Character.isWhitespace(_buffer.get())) { _state = STATE_END; _endp.close(); _buffer.clear(); } } _buffer.clear(); break; } } length = _buffer.length(); } return progress; } catch (HttpException e) { _persistent = false; _state = STATE_SEEKING_EOF; throw e; } }
From source file:com.linecorp.armeria.internal.http.Http1ObjectEncoder.java
License:Apache License
private HttpObject convertClientHeaders(int streamId, HttpHeaders headers) throws Http2Exception { // Leading headers will always have :method, trailers will never have it. final HttpMethod method = headers.method(); if (method == null) { return convertTrailingHeaders(streamId, headers); }// ww w.j a v a 2 s . c om // Convert leading headers. final HttpRequest req = new DefaultHttpRequest(HttpVersion.HTTP_1_1, method.toNettyMethod(), headers.path(), false); convert(streamId, headers, req.headers(), false); if (HttpUtil.getContentLength(req, -1L) >= 0) { // Avoid the case where both 'content-length' and 'transfer-encoding' are set. req.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); } else { req.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } return req; }
From source file:com.linecorp.armeria.internal.http.Http1ObjectEncoder.java
License:Apache License
private static void setTransferEncoding(HttpMessage out) { final io.netty.handler.codec.http.HttpHeaders outHeaders = out.headers(); final long contentLength = HttpUtil.getContentLength(out, -1L); if (contentLength < 0) { // Use chunked encoding. outHeaders.set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); outHeaders.remove(HttpHeaderNames.CONTENT_LENGTH); }/* w w w. j av a 2 s. c om*/ }
From source file:com.linecorp.armeria.internal.Http1ObjectEncoder.java
License:Apache License
private HttpObject convertClientHeaders(int streamId, HttpHeaders headers, boolean endStream) throws Http2Exception { // Leading headers will always have :method, trailers will never have it. final HttpMethod method = headers.method(); if (method == null) { return convertTrailingHeaders(streamId, headers); }/*from ww w . ja v a 2 s .co m*/ // Convert leading headers. final String path = headers.path(); assert path != null; final HttpRequest req = new DefaultHttpRequest(HttpVersion.HTTP_1_1, io.netty.handler.codec.http.HttpMethod.valueOf(method.name()), path, false); convert(streamId, headers, req.headers(), false); if (endStream) { req.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); req.headers().remove(HttpHeaderNames.CONTENT_LENGTH); } else if (HttpUtil.getContentLength(req, -1L) >= 0) { // Avoid the case where both 'content-length' and 'transfer-encoding' are set. req.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); } else { req.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } return req; }
From source file:com.linkedin.r2.transport.http.client.NettyRequestAdapter.java
License:Apache License
/** * Adapts a StreamRequest to Netty's HttpRequest * @param request R2 stream request/*from w w w.j a va 2s. co m*/ * @return Adapted HttpRequest. */ static HttpRequest toNettyRequest(StreamRequest request) throws Exception { HttpMethod nettyMethod = HttpMethod.valueOf(request.getMethod()); URL url = new URL(request.getURI().toString()); String path = url.getFile(); // RFC 2616, section 5.1.2: // Note that the absolute path cannot be empty; if none is present in the original URI, // it MUST be given as "/" (the server root). if (path.isEmpty()) { path = "/"; } HttpRequest nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, nettyMethod, path); nettyRequest.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); for (Map.Entry<String, String> entry : request.getHeaders().entrySet()) { // RFC 7230, section 3.3.2 // A sender MUST NOT send a Content-Length header field in any message // that contains a Transfer-Encoding header field. if (entry.getKey().equalsIgnoreCase(HttpHeaderNames.CONTENT_LENGTH.toString())) { continue; } nettyRequest.headers().set(entry.getKey(), entry.getValue()); } nettyRequest.headers().set(HttpHeaderNames.HOST, url.getAuthority()); nettyRequest.headers().set(HttpConstants.REQUEST_COOKIE_HEADER_NAME, request.getCookies()); return nettyRequest; }
From source file:com.ociweb.pronghorn.adapter.netty.impl.HttpStaticFileServerHandler.java
License:Apache License
public static void beginHTTPResponse(ChannelHandlerContext ctx, FullHttpRequest request, long lastModified, String path, long fileLength) { HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); HttpUtil.setContentLength(response, fileLength); setContentTypeHeader(response, path); response.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); setDateAndCacheHeaders(response, lastModified); if (HttpUtil.isKeepAlive(request)) { response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); }//from w w w . java 2 s. co m // Write the initial line and the header. ctx.write(response); }
From source file:io.gatling.http.client.BasicHttpTest.java
License:Apache License
@Test void testJettyRespondsWithChunkedTransferEncoding() throws Throwable { withClient().run(client -> withServer(server).run(server -> { server.enqueueEcho();//from w ww. j a v a 2 s.c om Request request = new RequestBuilder(HttpMethod.GET, Uri.create(getTargetUrl())).build(); client.test(request, 0, new TestListener() { @Override public void onComplete0() { assertEquals(200, status.code()); assertEquals(HttpHeaderValues.CHUNKED.toString(), headers.get(TRANSFER_ENCODING)); } }).get(TIMEOUT_SECONDS, SECONDS); })); }
From source file:io.gatling.http.client.impl.request.WritableRequestBuilder.java
License:Apache License
private static WritableRequest buildRequestWithBody(String url, Uri uri, HttpMethod method, HttpHeaders headers, RequestBody<?> requestBody, ByteBufAllocator alloc, HttpClientConfig config) throws IOException { boolean zeroCopy = !uri.isSecured() && config.isEnableZeroCopy(); WritableContent writableContent = requestBody.build(zeroCopy, alloc); Object content = writableContent.getContent(); if (content instanceof ByteBuf) { ByteBuf bb = (ByteBuf) content;//from w w w. j ava 2 s . c o m if (!headers.contains(CONTENT_LENGTH)) { headers.set(CONTENT_LENGTH, bb.readableBytes()); } FullHttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, method, url, bb, headers, EmptyHttpHeaders.INSTANCE); return new WritableRequest(nettyRequest, null); } else { if (!headers.contains(CONTENT_LENGTH) && !headers.contains(TRANSFER_ENCODING)) { if (writableContent.getContentLength() >= 0) { headers.set(CONTENT_LENGTH, writableContent.getContentLength()); } else { headers.set(TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } } HttpRequest nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, method, url, headers); return new WritableRequest(nettyRequest, content); } }
From source file:org.apache.hyracks.http.server.ChunkedResponse.java
License:Apache License
public ChunkedResponse(ChannelHandlerContext ctx, FullHttpRequest request, int chunkSize) { this.ctx = ctx; outputStream = new ChunkedNettyOutputStream(ctx, chunkSize, this); writer = new PrintWriter(outputStream); response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR); response.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); keepAlive = HttpUtil.isKeepAlive(request); if (keepAlive) { response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); }/*from ww w .j av a2 s . co m*/ }