Example usage for io.netty.handler.codec.http FullHttpResponse setStatus

List of usage examples for io.netty.handler.codec.http FullHttpResponse setStatus

Introduction

In this page you can find the example usage for io.netty.handler.codec.http FullHttpResponse setStatus.

Prototype

@Override
    FullHttpResponse setStatus(HttpResponseStatus status);

Source Link

Usage

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();
    }
}