List of usage examples for io.netty.handler.codec.http2 Http2Flags Http2Flags
public Http2Flags(short value)
From source file:com.netty.grpc.proxy.demo.handler.GrpcProxyBackendHandler.java
License:Apache License
@Override public void channelRead(final ChannelHandlerContext ctx, Object msg) { ByteBuf buf = (ByteBuf) msg;/* w w w . j a va 2 s. co m*/ System.out.println("channelRead:" + ByteBufUtil.hexDump((buf))); while (buf.readableBytes() > 0) { int payload = buf.readUnsignedMedium(); int frameType = buf.readByte(); Http2Flags flags = new Http2Flags(buf.readUnsignedByte()); int streamId = readUnsignedInt(buf); ByteBuf payloadBuf = buf.readBytes(payload); ByteBuf copy = ctx.alloc().buffer(); System.out.println("frame_type:" + frameType + "," + ByteBufUtil.hexDump((payloadBuf))); switch (frameType) { case Http2FrameTypes.SETTINGS: handleSettingFrame(ctx, flags); break; case Http2FrameTypes.WINDOW_UPDATE: handleWindowsUpdateFrame(ctx); break; case Http2FrameTypes.HEADERS: copy.writeMedium(payload); copy.writeByte(frameType); copy.writeByte(flags.value()); copy.writeInt(streamId); copy.writeBytes(payloadBuf); forward(ctx, copy); break; case Http2FrameTypes.DATA: copy.writeMedium(payload); copy.writeByte(frameType); copy.writeByte(flags.value()); copy.writeInt(streamId); copy.writeBytes(payloadBuf); forward(ctx, copy); break; default: break; } } }
From source file:com.netty.grpc.proxy.demo.handler.GrpcProxyFrontendHandler.java
License:Apache License
private void readFrame(final ChannelHandlerContext ctx, ByteBuf buf) { if (first) {/*from w w w . j a v a2 s . co m*/ try { readClientPrefaceString(buf); } catch (Http2Exception e) { e.printStackTrace(); } first = false; } while (buf.readableBytes() > 0) { int payload = buf.readUnsignedMedium(); int frameType = buf.readByte(); Http2Flags flags = new Http2Flags(buf.readUnsignedByte()); int streamId = readUnsignedInt(buf); ByteBuf payloadBuf = buf.readBytes(payload); ByteBuf copy = ctx.alloc().buffer(); switch (frameType) { case Http2FrameTypes.SETTINGS: handleSettingFrame(ctx, flags); break; case Http2FrameTypes.WINDOW_UPDATE: handleWindowsUpdateFrame(ctx); break; case Http2FrameTypes.HEADERS: copy.writeMedium(payload); copy.writeByte(frameType); copy.writeByte(flags.value()); copy.writeInt(streamId); copy.writeBytes(payloadBuf); handleHeaderFrame(ctx, copy, streamId); break; case Http2FrameTypes.DATA: copy.writeMedium(payload); copy.writeByte(frameType); copy.writeByte(flags.value()); copy.writeInt(streamId); copy.writeBytes(payloadBuf); handleDataFrame(ctx, copy, streamId); break; default: break; } } }
From source file:io.vertx.core.http.Http2ServerTest.java
License:Open Source License
@Test public void testUnknownFrame() throws Exception { Buffer expectedSend = TestUtils.randomBuffer(500); Buffer expectedRecv = TestUtils.randomBuffer(500); Context ctx = vertx.getOrCreateContext(); server.requestHandler(req -> {/* w w w . j ava 2s.c om*/ req.customFrameHandler(frame -> { assertOnIOContext(ctx); assertEquals(10, frame.type()); assertEquals(253, frame.flags()); assertEquals(expectedSend, frame.payload()); req.response().writeCustomFrame(12, 134, expectedRecv).end(); }); }); startServer(ctx); TestClient client = new TestClient(); ChannelFuture fut = client.connect(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, request -> { int id = request.nextStreamId(); request.decoder.frameListener(new Http2EventAdapter() { int status = 0; @Override public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) throws Http2Exception { int s = status++; vertx.runOnContext(v -> { assertEquals(0, s); }); } @Override public void onUnknownFrame(ChannelHandlerContext ctx, byte frameType, int streamId, Http2Flags flags, ByteBuf payload) { int s = status++; Buffer recv = Buffer.buffer(payload.copy()); vertx.runOnContext(v -> { assertEquals(1, s); assertEquals(12, frameType); assertEquals(134, flags.value()); assertEquals(expectedRecv, recv); }); } @Override public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream) throws Http2Exception { int len = data.readableBytes(); int s = status++; vertx.runOnContext(v -> { assertEquals(2, s); assertEquals(0, len); assertTrue(endOfStream); testComplete(); }); return data.readableBytes() + padding; } }); request.encoder.writeHeaders(request.context, id, GET("/"), 0, false, request.context.newPromise()); request.encoder.writeFrame(request.context, (byte) 10, id, new Http2Flags((short) 253), expectedSend.getByteBuf(), request.context.newPromise()); request.context.flush(); }); fut.sync(); await(); }
From source file:io.vertx.core.http.impl.VertxHttp2ConnectionHandler.java
License:Open Source License
private void _writeFrame(Http2Stream stream, byte type, short flags, ByteBuf payload) { encoder().writeFrame(ctx, type, stream.id(), new Http2Flags(flags), payload, ctx.newPromise()); ctx.flush();//w ww . j a v a2s . c o m }