List of usage examples for io.netty.handler.codec.http2 Http2Headers status
Http2Headers status(CharSequence value);
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(); } }