List of usage examples for io.netty.handler.codec.http FullHttpResponse setStatus
@Override
FullHttpResponse setStatus(HttpResponseStatus status);
From source file:errorcode.DaumStatusServerHandler.java
License:Apache License
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) { FullHttpResponse response = null; if (msg instanceof HttpRequest) { HttpRequest req = (HttpRequest) msg; QueryStringDecoder queryDecoder = new QueryStringDecoder(req.getUri()); if (is100ContinueExpected(req)) { ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE)); }/* ww w .jav a 2 s. co m*/ boolean keepAlive = isKeepAlive(req); if (queryDecoder.path().startsWith("/503.html")) { response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(E503)); response.setStatus(SERVICE_UNAVAILABLE); } else { response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(E404)); response.setStatus(NOT_FOUND); } response.headers().set(CONTENT_TYPE, "text/html"); response.headers().set(CONTENT_LENGTH, response.content().readableBytes()); if (!keepAlive) { ctx.write(response).addListener(ChannelFutureListener.CLOSE); } else { response.headers().set(CONNECTION, Values.KEEP_ALIVE); ctx.write(response); } } }
From source file:org.ebayopensource.scc.cache.CacheResultVerifierTest.java
License:Apache License
@Test public void testFetchResult() { FullHttpResponse cache = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, ByteBufAllocator.DEFAULT.buffer()); FullHttpResponse actual = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, ByteBufAllocator.DEFAULT.buffer()); CacheResultVerifier crv = new CacheResultVerifier("key", null, cache); HttpHeaders.setHeader(cache, "ETag", "etagvalue"); HttpHeaders.setHeader(actual, "ETag", "etagvalue"); CacheVerifiedResult result = crv.fetchResult(actual); Assert.assertTrue(result.result);//w w w . j a va 2 s. c o m HttpHeaders.setHeader(actual, "ETag", "etagvalue2"); result = crv.fetchResult(actual); Assert.assertFalse(result.result); cache = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, ByteBufAllocator.DEFAULT.buffer()); actual = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, ByteBufAllocator.DEFAULT.buffer()); crv = new CacheResultVerifier("key", null, cache); actual.setStatus(HttpResponseStatus.SERVICE_UNAVAILABLE); result = crv.fetchResult(actual); Assert.assertFalse(result.result); actual.setStatus(HttpResponseStatus.OK); HttpHeaders.setHeader(cache, "h1", "value"); HttpHeaders.setHeader(actual, "h1", "value"); result = crv.fetchResult(actual); Assert.assertTrue(result.result); HttpHeaders.setHeader(cache, "h2", "value"); HttpHeaders.setHeader(actual, "h2", "value2"); result = crv.fetchResult(actual); Assert.assertFalse(result.result); HttpHeaders.setHeader(actual, "h2", "value"); ByteBuf cc = cache.content(); ByteBuf ac = actual.content(); cc.writeBytes("abc".getBytes()); result = crv.fetchResult(actual); Assert.assertFalse(result.result); ac.writeBytes("abc".getBytes()); result = crv.fetchResult(actual); Assert.assertTrue(result.result); cc.writeBytes("eft".getBytes()); ac.writeBytes("xyz".getBytes()); result = crv.fetchResult(actual); Assert.assertFalse(result.result); }
From source file:org.elasticsearch.hadoop.http.netty4.Netty4HttpChannel.java
License:Apache License
@Override public void sendResponse(RestResponse response) { // if the response object was created upstream, then use it; // otherwise, create a new one ByteBuf buffer = Netty4Utils.toByteBuf(response.content()); FullHttpResponse resp = newResponse(buffer); resp.setStatus(getStatus(response.status())); Netty4CorsHandler.setCorsResponseHeaders(nettyRequest, resp, transport.getCorsConfig()); String opaque = nettyRequest.headers().get("X-Opaque-Id"); if (opaque != null) { setHeaderField(resp, "X-Opaque-Id", opaque); }// w ww. j a v a2 s. c om // Add all custom headers addCustomHeaders(resp, response.getHeaders()); addCustomHeaders(resp, threadContext.getResponseHeaders()); BytesReference content = response.content(); boolean release = content instanceof Releasable; try { // If our response doesn't specify a content-type header, set one setHeaderField(resp, HttpHeaderNames.CONTENT_TYPE.toString(), response.contentType(), false); // If our response has no content-length, calculate and set one setHeaderField(resp, HttpHeaderNames.CONTENT_LENGTH.toString(), String.valueOf(buffer.readableBytes()), false); addCookies(resp); final ChannelPromise promise = channel.newPromise(); if (release) { promise.addListener(f -> ((Releasable) content).close()); release = false; } if (isCloseConnection()) { promise.addListener(ChannelFutureListener.CLOSE); } if (pipelinedRequest != null) { channel.writeAndFlush(pipelinedRequest.createHttpResponse(resp, promise)); } else { channel.writeAndFlush(resp, promise); } } finally { if (release) { ((Releasable) content).close(); } if (pipelinedRequest != null) { pipelinedRequest.release(); } } }
From source file:org.elasticsearch.http.nio.NioHttpChannel.java
License:Apache License
@Override public void sendResponse(RestResponse response) { // if the response object was created upstream, then use it; // otherwise, create a new one ByteBuf buffer = ByteBufUtils.toByteBuf(response.content()); final FullHttpResponse resp; if (HttpMethod.HEAD.equals(nettyRequest.method())) { resp = newResponse(Unpooled.EMPTY_BUFFER); } else {//w w w.j a v a 2s . c o m resp = newResponse(buffer); } resp.setStatus(getStatus(response.status())); String opaque = nettyRequest.headers().get("X-Opaque-Id"); if (opaque != null) { setHeaderField(resp, "X-Opaque-Id", opaque); } // Add all custom headers addCustomHeaders(resp, response.getHeaders()); addCustomHeaders(resp, threadContext.getResponseHeaders()); ArrayList<Releasable> toClose = new ArrayList<>(3); boolean success = false; try { // If our response doesn't specify a content-type header, set one setHeaderField(resp, HttpHeaderNames.CONTENT_TYPE.toString(), response.contentType(), false); // If our response has no content-length, calculate and set one setHeaderField(resp, HttpHeaderNames.CONTENT_LENGTH.toString(), String.valueOf(buffer.readableBytes()), false); addCookies(resp); BytesReference content = response.content(); if (content instanceof Releasable) { toClose.add((Releasable) content); } BytesStreamOutput bytesStreamOutput = bytesOutputOrNull(); if (bytesStreamOutput instanceof ReleasableBytesStreamOutput) { toClose.add((Releasable) bytesStreamOutput); } if (isCloseConnection()) { toClose.add(nioChannel::close); } BiConsumer<Void, Exception> listener = (aVoid, ex) -> Releasables.close(toClose); nioChannel.getContext().sendMessage(new NioHttpResponse(sequence, resp), listener); success = true; } finally { if (success == false) { Releasables.close(toClose); } } }
From source file:org.ireland.jnetty.http.HttpServletResponseImpl.java
License:Open Source License
/** * ??//ww w . j av a 2 s . c o m * * @param ctx * @param request * @param response */ private void writeResponse(ChannelHandlerContext ctx, FullHttpRequest request, FullHttpResponse response) { // Set the Status Code response.setStatus( _reason == null ? HttpResponseStatus.valueOf(_status) : new HttpResponseStatus(_status, _reason)); // set the Servlet Header :) response.headers().set(HttpHeaders.Names.SERVER, "JNetty"); // Set the "Content-Length" Header response.headers().set(CONTENT_LENGTH, response.content().readableBytes()); boolean keepAlive = true; if (headers.get(HttpHeaders.Names.CONNECTION) != null) { keepAlive = HttpHeaders.isKeepAlive(response); // ?KeepAlive } else // CONNECTION? { // Decide whether to close the connection or not. keepAlive = HttpHeaders.isKeepAlive(request); // CONNECTION,??CONNECTION // TODO:think about how to decide keepAlive or not if (keepAlive) { // Add keep alive header as per: // http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE); } else { response.headers().set(CONNECTION, HttpHeaders.Values.CLOSE); } } // Write the response. ctx.nextOutboundMessageBuffer().add(response); if (keepAlive) { ctx.flush(); } else { //CONNECTION == "close" Close the non-keep-alive connection after the write operation is done. ctx.flush().addListener(ChannelFutureListener.CLOSE); } }
From source file:org.nexxy.http.reverseproxy.HttpReverseProxyServerHandler.java
License:Apache License
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws InterruptedException, ExecutionException, IOException { if (msg instanceof HttpRequest) { HttpRequest req = (HttpRequest) msg; if (HttpHeaderUtil.is100ContinueExpected(req)) { ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE)); }//from ww w. j a v a 2 s . c o m boolean keepAlive = HttpHeaderUtil.isKeepAlive(req); String hostName = req.headers().get(HttpHeaders.Names.HOST); hostName = hostName.substring(0, hostName.indexOf(":")); Route route = Route.findBySource(hostName); final String url = "http://" + route.destination + req.uri(); FullHttpResponse response = null; if (route.cache > 0) { executeGetAndPopulateCache(url); response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(Cache.getAsByteArray("body:" + url))); response.setStatus(new HttpResponseStatus(Cache.getAsInt("status:" + url), Cache.getAsString("statusText:" + url))); response.headers().set(CONTENT_TYPE, Cache.getAsString("type:" + url)); } else { final Response upstreamResponse = executeGet(url); response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(upstreamResponse.getResponseBodyAsBytes())); response.setStatus( new HttpResponseStatus(upstreamResponse.getStatusCode(), upstreamResponse.getStatusText())); response.headers().set(CONTENT_TYPE, upstreamResponse.getContentType()); } response.headers().set(CONTENT_LENGTH, response.content().readableBytes()); System.out.println(" ***** " + url + " served"); if (!keepAlive) { ctx.write(response).addListener(ChannelFutureListener.CLOSE); } else { response.headers().set(CONNECTION, Values.KEEP_ALIVE); ctx.write(response); } } }
From source file:org.ratpackframework.server.internal.NettyHandlerAdapter.java
License:Apache License
public void channelRead0(final ChannelHandlerContext ctx, final FullHttpRequest nettyRequest) throws Exception { if (!nettyRequest.getDecoderResult().isSuccess()) { sendError(ctx, HttpResponseStatus.BAD_REQUEST); return;//w w w. j a v a 2s. c o m } final FullHttpResponse nettyResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); Request request = new DefaultRequest(new NettyHeadersBackedHeaders(nettyRequest.headers()), nettyRequest.getMethod().name(), nettyRequest.getUri(), nettyRequest.content()); final Channel channel = ctx.channel(); final DefaultStatus responseStatus = new DefaultStatus(); final MutableHeaders responseHeaders = new NettyHeadersBackedMutableHeaders(nettyResponse.headers()); final ByteBuf responseBody = nettyResponse.content(); FileHttpTransmitter fileHttpTransmitter = new DefaultFileHttpTransmitter(nettyRequest, nettyResponse, channel); Response response = new DefaultResponse(responseStatus, responseHeaders, responseBody, fileHttpTransmitter, new Runnable() { @Override public void run() { nettyResponse.setStatus(responseStatus.getResponseStatus()); responseHeaders.set(HttpHeaders.Names.CONTENT_LENGTH, responseBody.writerIndex()); boolean shouldClose = true; if (channel.isOpen()) { if (isKeepAlive(nettyRequest)) { responseHeaders.set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE); shouldClose = false; } ChannelFuture future = channel.writeAndFlush(nettyResponse); if (shouldClose) { future.addListener(ChannelFutureListener.CLOSE); } } } }); if (registry == null) { throw new IllegalStateException("Registry is not set, channel is not registered"); } final Context context = new DefaultContext(request, response, registry, ctx.executor(), blockingExecutorService, return404); handler.handle(context); }
From source file:org.restlet.engine.netty.HttpServerHelper.java
License:Open Source License
@Override public void onNext(HttpRequest nettyRequest) { System.out.println("onNext: " + nettyRequest); HttpServerRequest request = null;/* w w w. ja v a 2s . c o m*/ Response response = null; try { request = new HttpServerRequest(getContext(), getServerChannel(), nettyRequest); response = new Response(request); // Effectively handle the request getHelped().handle(request, response); if (!response.isCommitted() && response.isAutoCommitting()) { response.setCommitted(true); } if (response.isCommitted()) { FullHttpResponse nettyResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); Series<Header> headers = new Series<>(Header.class); try { // Add all the necessary headers HeaderUtils.addGeneralHeaders(response, headers); HeaderUtils.addResponseHeaders(response, headers); // Set the status code in the response if (response.getStatus() != null) { nettyResponse.setStatus(new HttpResponseStatus(response.getStatus().getCode(), response.getStatus().getReasonPhrase())); } if ((response.getRequest().getMethod() != null) && response.getRequest().getMethod().equals(Method.HEAD)) { HeaderUtils.addEntityHeaders(response, headers); response.setEntity(null); } else if (Method.GET.equals(response.getRequest().getMethod()) && Status.SUCCESS_OK.equals(response.getStatus()) && (!response.isEntityAvailable())) { HeaderUtils.addEntityHeaders(response, headers); getLogger().warn( "A response with a 200 (Ok) status should have an entity. Make sure that resource \"" + response.getRequest().getResourceRef() + "\" returns one or sets the status to 204 (No content)."); } else if (response.getStatus().equals(Status.SUCCESS_NO_CONTENT)) { HeaderUtils.addEntityHeaders(response, headers); if (response.isEntityAvailable()) { getLogger().debug( "Responses with a 204 (No content) status generally don't have an entity. Only adding entity headers for resource \"" + response.getRequest().getResourceRef() + "\"."); response.setEntity(null); } } else if (response.getStatus().equals(Status.SUCCESS_RESET_CONTENT)) { if (response.isEntityAvailable()) { getLogger().warn( "Responses with a 205 (Reset content) status can't have an entity. Ignoring the entity for resource \"" + response.getRequest().getResourceRef() + "\"."); response.setEntity(null); } } else if (response.getStatus().equals(Status.REDIRECTION_NOT_MODIFIED)) { if (response.getEntity() != null) { HeaderUtils.addNotModifiedEntityHeaders(response.getEntity(), headers); response.setEntity(null); } } else if (response.getStatus().isInformational()) { if (response.isEntityAvailable()) { getLogger().warn( "Responses with an informational (1xx) status can't have an entity. Ignoring the entity for resource \"" + response.getRequest().getResourceRef() + "\"."); response.setEntity(null); } } else { HeaderUtils.addEntityHeaders(response, headers); if (!response.isEntityAvailable()) { if ((response.getEntity() != null) && (response.getEntity().getSize() != 0)) { getLogger().warn( "A response with an unavailable and potentially non empty entity was returned. Ignoring the entity for resource \"" + response.getRequest().getResourceRef() + "\"."); } response.setEntity(null); } } // Add the response headers HeaderUtils.addResponseHeaders(response, headers); // Copy Restlet headers to Netty headers for (Header header : headers) { nettyResponse.headers().add(header.getName(), header.getValue()); } // Copy the content (NON OPTIMAL) if (response.getEntity() != null) { nettyResponse = nettyResponse .replace(Unpooled.wrappedBuffer(response.getEntity().getText().getBytes())); } // Send the response to the client subscriber.onNext(nettyResponse); } catch (Exception e) { Context.getCurrentLogger().warn("Exception intercepted while adding the response headers", e); response.setStatus(Status.SERVER_ERROR_INTERNAL); } finally { if (response.getOnSent() != null) { response.getOnSent().handle(response.getRequest(), response); } } } } catch (Throwable t) { getLogger().warn("Error while handling an HTTP server call", t); response.setStatus(Status.SERVER_ERROR_INTERNAL, t); onError(t); } finally { Engine.clearThreadLocalVariables(); } }