Example usage for io.netty.handler.codec.http2 Http2Headers status

List of usage examples for io.netty.handler.codec.http2 Http2Headers status

Introduction

In this page you can find the example usage for io.netty.handler.codec.http2 Http2Headers status.

Prototype

Http2Headers status(CharSequence value);

Source Link

Document

Sets the PseudoHeaderName#STATUS header or null if there is no such header

Usage

From source file:com.turo.pushy.apns.AbstractMockApnsServerHandler.java

License:Open Source License

@Override
public void write(final ChannelHandlerContext context, final Object message, final ChannelPromise writePromise)
        throws Exception {
    if (message instanceof AcceptNotificationResponse) {
        final AcceptNotificationResponse acceptNotificationResponse = (AcceptNotificationResponse) message;
        this.encoder().writeHeaders(context, acceptNotificationResponse.getStreamId(), SUCCESS_HEADERS, 0, true,
                writePromise);//w ww .  ja  va  2  s  . c  o m

        log.trace("Accepted push notification on stream {}", acceptNotificationResponse.getStreamId());
    } else if (message instanceof RejectNotificationResponse) {
        final RejectNotificationResponse rejectNotificationResponse = (RejectNotificationResponse) message;

        final Http2Headers headers = new DefaultHttp2Headers();
        headers.status(rejectNotificationResponse.getErrorReason().getHttpResponseStatus().codeAsText());
        headers.add(HttpHeaderNames.CONTENT_TYPE, "application/json");

        if (rejectNotificationResponse.getApnsId() != null) {
            headers.add(APNS_ID_HEADER, rejectNotificationResponse.getApnsId().toString());
        }

        final byte[] payloadBytes;
        {
            final ErrorResponse errorResponse = new ErrorResponse(
                    rejectNotificationResponse.getErrorReason().getReasonText(),
                    rejectNotificationResponse.getTimestamp());

            payloadBytes = GSON.toJson(errorResponse).getBytes();
        }

        final ChannelPromise headersPromise = context.newPromise();
        this.encoder().writeHeaders(context, rejectNotificationResponse.getStreamId(), headers, 0, false,
                headersPromise);

        final ChannelPromise dataPromise = context.newPromise();
        this.encoder().writeData(context, rejectNotificationResponse.getStreamId(),
                Unpooled.wrappedBuffer(payloadBytes), 0, true, dataPromise);

        final PromiseCombiner promiseCombiner = new PromiseCombiner();
        promiseCombiner.addAll((ChannelFuture) headersPromise, dataPromise);
        promiseCombiner.finish(writePromise);

        log.trace("Rejected push notification on stream {}: {}", rejectNotificationResponse.getStreamId(),
                rejectNotificationResponse.getErrorReason());
    } else if (message instanceof InternalServerErrorResponse) {
        final InternalServerErrorResponse internalServerErrorResponse = (InternalServerErrorResponse) message;

        final Http2Headers headers = new DefaultHttp2Headers();
        headers.status(HttpResponseStatus.INTERNAL_SERVER_ERROR.codeAsText());

        this.encoder().writeHeaders(context, internalServerErrorResponse.getStreamId(), headers, 0, true,
                writePromise);

        log.trace("Encountered an internal error on stream {}", internalServerErrorResponse.getStreamId());
    } else {
        context.write(message, writePromise);
    }
}

From source file:io.grpc.netty.NettyClientStreamTest.java

License:Apache License

@Test
public void invalidInboundHeadersCancelStream() throws Exception {
    stream().transportState().setId(STREAM_ID);
    Http2Headers headers = grpcResponseHeaders();
    headers.set("random", "4");
    headers.remove(CONTENT_TYPE_HEADER);
    // Remove once b/16290036 is fixed.
    headers.status(new AsciiString("500"));
    stream().transportState().transportHeadersReceived(headers, false);
    verify(listener, never()).closed(any(Status.class), any(Metadata.class));

    // We are now waiting for 100 bytes of error context on the stream, cancel has not yet been
    // sent/*  ww w . jav  a2s. c  o  m*/
    verify(channel, never()).writeAndFlush(any(CancelClientStreamCommand.class));
    stream().transportState().transportDataReceived(Unpooled.buffer(100).writeZero(100), false);
    verify(channel, never()).writeAndFlush(any(CancelClientStreamCommand.class));
    stream().transportState().transportDataReceived(Unpooled.buffer(1000).writeZero(1000), false);

    // Now verify that cancel is sent and an error is reported to the listener
    verify(writeQueue).enqueue(isA(CancelClientStreamCommand.class), eq(true));
    ArgumentCaptor<Status> captor = ArgumentCaptor.forClass(Status.class);
    ArgumentCaptor<Metadata> metadataCaptor = ArgumentCaptor.forClass(Metadata.class);
    verify(listener).closed(captor.capture(), same(PROCESSED), metadataCaptor.capture());
    assertEquals(Status.UNKNOWN.getCode(), captor.getValue().getCode());
    assertEquals("4",
            metadataCaptor.getValue().get(Metadata.Key.of("random", Metadata.ASCII_STRING_MARSHALLER)));

}

From source file:org.wso2.carbon.inbound.endpoint.protocol.http2.Http2ResponseWriter.java

License:Open Source License

/**
 * writing a response on wire/*from w ww. j av a2  s .c  o m*/
 *
 * @param synCtx
 * @throws AxisFault
 */
public void writeNormalResponse(MessageContext synCtx) throws AxisFault {
    org.apache.axis2.context.MessageContext msgContext = ((Axis2MessageContext) synCtx)
            .getAxis2MessageContext();
    Http2Headers transportHeaders = new DefaultHttp2Headers();
    InboundResponseSender responseSender = synCtx
            .getProperty(InboundEndpointConstants.INBOUND_ENDPOINT_RESPONSE_WORKER) == null ? null
                    : (InboundHttp2ResponseSender) synCtx
                            .getProperty(InboundEndpointConstants.INBOUND_ENDPOINT_RESPONSE_WORKER);
    try {
        sourceConfiguration = PassThroughInboundEndpointHandler.getPassThroughSourceConfiguration();
    } catch (Exception e) {
        throw new AxisFault("Error while building sourceConfiguration " + e);
    }

    //status
    try {
        int statusCode = PassThroughTransportUtils.determineHttpStatusCode(msgContext);
        if (statusCode > 0) {
            HttpResponseStatus status1 = HttpResponseStatus.valueOf(statusCode);
            transportHeaders.status(status1.codeAsText());
        }
    } catch (Exception e) {
        throw new AxisFault("Error occured while parsing response status", e);
    }
    //content_type
    Boolean noEntityBody = msgContext.getProperty(NhttpConstants.NO_ENTITY_BODY) != null
            ? (boolean) msgContext.getProperty(NhttpConstants.NO_ENTITY_BODY)
            : null;
    if (noEntityBody == null || Boolean.FALSE == noEntityBody) {
        Pipe pipe = (Pipe) msgContext.getProperty(PassThroughConstants.PASS_THROUGH_PIPE);
        if (pipe == null) {
            pipe = new Pipe(sourceConfiguration.getBufferFactory().getBuffer(), "Test", sourceConfiguration);
            msgContext.setProperty(PassThroughConstants.PASS_THROUGH_PIPE, pipe);
            msgContext.setProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED, Boolean.TRUE);
        }

        OMOutputFormat format = NhttpUtil.getOMOutputFormat(msgContext);
        MessageFormatter messageFormatter = MessageFormatterDecoratorFactory
                .createMessageFormatterDecorator(msgContext);
        if (msgContext.getProperty(org.apache.axis2.Constants.Configuration.MESSAGE_TYPE) == null) {
            transportHeaders.add(HttpHeaderNames.CONTENT_TYPE,
                    messageFormatter.getContentType(msgContext, format, msgContext.getSoapAction()));
        }
    }

    if (transportHeaders != null
            && msgContext.getProperty(org.apache.axis2.Constants.Configuration.MESSAGE_TYPE) != null) {
        if (msgContext.getProperty(org.apache.axis2.Constants.Configuration.CONTENT_TYPE) != null
                && msgContext.getProperty(org.apache.axis2.Constants.Configuration.CONTENT_TYPE).toString()
                        .contains(PassThroughConstants.CONTENT_TYPE_MULTIPART_RELATED)) {
            transportHeaders.add(org.apache.axis2.Constants.Configuration.MESSAGE_TYPE,
                    PassThroughConstants.CONTENT_TYPE_MULTIPART_RELATED);
        } else {
            Pipe pipe = (Pipe) msgContext.getProperty(PassThroughConstants.PASS_THROUGH_PIPE);
            if (pipe != null
                    && !Boolean.TRUE
                            .equals(msgContext.getProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED))
                    && msgContext.getProperty(org.apache.axis2.Constants.Configuration.CONTENT_TYPE) != null) {
                transportHeaders.add(HttpHeaderNames.CONTENT_TYPE, msgContext
                        .getProperty(org.apache.axis2.Constants.Configuration.CONTENT_TYPE).toString());
            }
        }
    }

    //Excess headers
    String excessProp = NhttpConstants.EXCESS_TRANSPORT_HEADERS;
    Map excessHeaders = msgContext.getProperty(excessProp) == null ? null
            : (Map) msgContext.getProperty(excessProp);
    if (excessHeaders != null) {
        for (Iterator iterator = excessHeaders.keySet().iterator(); iterator.hasNext();) {
            String key = (String) iterator.next();
            for (String excessVal : (Collection<String>) excessHeaders.get(key)) {
                transportHeaders.add(key.toLowerCase(), (String) excessVal);
            }
        }
    }

    boolean hasBody = false;
    if (!transportHeaders.contains(HttpHeaderNames.CONTENT_TYPE)) {
        String contentType = null;
        try {
            contentType = new InboundMessageHandler(responseSender, config).getContentType(msgContext);
        } catch (Exception e) {
            throw new AxisFault("Error while parsing content type", e);
        }
        if (contentType != null) {
            transportHeaders.add(HttpHeaderNames.CONTENT_TYPE, contentType);
            hasBody = true;
        }
    } else
        hasBody = true;

    int streamId = (int) synCtx.getProperty("stream-id");
    ChannelHandlerContext c = (ChannelHandlerContext) synCtx.getProperty("stream-channel");
    if (c == null) {
        c = chContext;
    }
    ChannelPromise promise = c.newPromise();
    if (hasBody) {
        Pipe pipe = msgContext.getProperty("pass-through.pipe") == null ? null
                : (Pipe) msgContext.getProperty("pass-through.pipe");
        encoder.writeHeaders(c, streamId, transportHeaders, 0, false, promise);
        http2Encoder pipeEncoder = new http2Encoder(c, streamId, encoder, c.newPromise());
        if (pipe != null) {
            pipe.attachConsumer(new Http2CosumerIoControl());
            try {
                if (Boolean.TRUE.equals(msgContext.getProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED))) {
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    MessageFormatter formatter = MessageProcessorSelector.getMessageFormatter(msgContext);
                    OMOutputFormat format = PassThroughTransportUtils.getOMOutputFormat(msgContext);
                    formatter.writeTo(msgContext, format, out, false);
                    OutputStream _out = pipe.getOutputStream();
                    IOUtils.write(out.toByteArray(), _out);
                }
                int t = pipe.consume(pipeEncoder);
                if (t < 1)
                    throw new AxisFault("Pipe consuming failed");
            } catch (Exception e) {
                throw new AxisFault("Error while writing built message back to pipe", e);
            }
        }
        c.flush();
    } else {
        encoder.writeHeaders(c, streamId, transportHeaders, 0, true, promise);
        c.flush();
    }
}