Example usage for io.netty.handler.codec.http2 Http2ConnectionEncoder frameWriter

List of usage examples for io.netty.handler.codec.http2 Http2ConnectionEncoder frameWriter

Introduction

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

Prototype

Http2FrameWriter frameWriter();

Source Link

Document

Provides direct access to the underlying frame writer object.

Usage

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

License:Apache License

public FixedHttp2ConnectionDecoder(Http2Connection connection, Http2ConnectionEncoder encoder,
        Http2FrameReader frameReader, Http2PromisedRequestVerifier requestVerifier) {
    this.connection = checkNotNull(connection, "connection");
    this.frameReader = checkNotNull(frameReader, "frameReader");
    this.encoder = checkNotNull(encoder, "encoder");
    this.requestVerifier = checkNotNull(requestVerifier, "requestVerifier");
    if (connection.local().flowController() == null) {
        connection.local().flowController(new DefaultHttp2LocalFlowController(connection));
    }/*from w w  w.  ja  v a 2s . c o  m*/
    connection.local().flowController().frameWriter(encoder.frameWriter());
}

From source file:io.vertx.core.http.Http2ServerTest.java

License:Open Source License

@Test
public void testPromiseStreamError() throws Exception {
    Context ctx = vertx.getOrCreateContext();
    waitFor(2);//from  w w  w  . ja v  a  2s. c  o  m
    Future<Void> when = Future.future();
    server.requestHandler(req -> {
        req.response().push(HttpMethod.GET, "/wibble", ar -> {
            assertTrue(ar.succeeded());
            assertOnIOContext(ctx);
            when.complete();
            HttpServerResponse resp = ar.result();
            AtomicInteger erros = new AtomicInteger();
            resp.exceptionHandler(err -> {
                assertOnIOContext(ctx);
                erros.incrementAndGet();
            });
            resp.closeHandler(v -> {
                assertOnIOContext(ctx);
                assertTrue("Was expecting errors to be > 0", erros.get() > 0);
                complete();
            });
            resp.endHandler(v -> {
                assertOnIOContext(ctx);
                complete();
            });
            resp.setChunked(true).write("whatever"); // Transition to half-closed remote
        });
    });
    startServer(ctx);
    TestClient client = new TestClient();
    ChannelFuture fut = client.connect(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, request -> {
        request.decoder.frameListener(new Http2EventAdapter() {
            @Override
            public void onPushPromiseRead(ChannelHandlerContext ctx, int streamId, int promisedStreamId,
                    Http2Headers headers, int padding) throws Http2Exception {
                when.setHandler(ar -> {
                    Http2ConnectionEncoder encoder = request.encoder;
                    encoder.frameWriter().writeHeaders(request.context, promisedStreamId, GET("/"), 0, false,
                            request.context.newPromise());
                    request.context.flush();
                });
            }
        });
        int id = request.nextStreamId();
        Http2ConnectionEncoder encoder = request.encoder;
        encoder.writeHeaders(request.context, id, GET("/"), 0, false, request.context.newPromise());
        request.context.flush();
    });
    fut.sync();
    await();
}

From source file:io.vertx.core.http.Http2ServerTest.java

License:Open Source License

@Test
public void testConnectionDecodeError() throws Exception {
    Context ctx = vertx.getOrCreateContext();
    waitFor(3);/* ww  w  .  j  a  v a  2s.  c o  m*/
    Future<Void> when = Future.future();
    server.requestHandler(req -> {
        AtomicInteger reqFailures = new AtomicInteger();
        AtomicInteger respFailures = new AtomicInteger();
        req.exceptionHandler(err -> {
            assertOnIOContext(ctx);
            reqFailures.incrementAndGet();
        });
        req.response().exceptionHandler(err -> {
            assertOnIOContext(ctx);
            respFailures.incrementAndGet();
        });
        req.response().closeHandler(v -> {
            assertOnIOContext(ctx);
            complete();
        });
        req.response().endHandler(v -> {
            assertOnIOContext(ctx);
            assertTrue(reqFailures.get() > 0);
            assertTrue(respFailures.get() > 0);
            complete();
        });
        HttpConnection conn = req.connection();
        AtomicInteger connFailures = new AtomicInteger();
        conn.exceptionHandler(err -> {
            assertOnIOContext(ctx);
            connFailures.incrementAndGet();
        });
        conn.closeHandler(v -> {
            assertTrue(connFailures.get() > 0);
            assertOnIOContext(ctx);
            complete();
        });
        when.complete();
    });
    startServer(ctx);
    TestClient client = new TestClient();
    ChannelFuture fut = client.connect(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, request -> {
        int id = request.nextStreamId();
        Http2ConnectionEncoder encoder = request.encoder;
        when.setHandler(ar -> {
            // Send a stream ID that does not exists
            encoder.frameWriter().writeRstStream(request.context, 10, 0, request.context.newPromise());
            request.context.flush();
        });
        encoder.writeHeaders(request.context, id, GET("/"), 0, false, request.context.newPromise());
        request.context.flush();
    });
    fut.sync();
    await();
}

From source file:io.vertx.test.core.Http2ServerTest.java

License:Open Source License

@Test
public void testPromiseStreamError() throws Exception {
    Context ctx = vertx.getOrCreateContext();
    waitFor(3);// w w w .j ava 2 s . c o m
    Future<Void> when = Future.future();
    server.requestHandler(req -> {
        req.response().push(HttpMethod.GET, "/wibble", ar -> {
            assertTrue(ar.succeeded());
            assertOnIOContext(ctx);
            when.complete();
            HttpServerResponse resp = ar.result();
            resp.exceptionHandler(err -> {
                assertSame(ctx, Vertx.currentContext());
                complete();
            });
            resp.closeHandler(v -> {
                assertSame(ctx, Vertx.currentContext());
                complete();
            });
            resp.endHandler(v -> {
                assertSame(ctx, Vertx.currentContext());
                complete();
            });
            resp.setChunked(true).write("whatever"); // Transition to half-closed remote
        });
    });
    startServer(ctx);
    TestClient client = new TestClient();
    ChannelFuture fut = client.connect(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, request -> {
        request.decoder.frameListener(new Http2EventAdapter() {
            @Override
            public void onPushPromiseRead(ChannelHandlerContext ctx, int streamId, int promisedStreamId,
                    Http2Headers headers, int padding) throws Http2Exception {
                when.setHandler(ar -> {
                    Http2ConnectionEncoder encoder = request.encoder;
                    encoder.frameWriter().writeHeaders(request.context, promisedStreamId, GET("/"), 0, false,
                            request.context.newPromise());
                    request.context.flush();
                });
            }
        });
        int id = request.nextStreamId();
        Http2ConnectionEncoder encoder = request.encoder;
        encoder.writeHeaders(request.context, id, GET("/"), 0, false, request.context.newPromise());
        request.context.flush();
    });
    fut.sync();
    await();
}

From source file:io.vertx.test.core.Http2ServerTest.java

License:Open Source License

@Test
public void testConnectionDecodeError() throws Exception {
    Context ctx = vertx.getOrCreateContext();
    waitFor(6);// www.  j a va 2s .  c  o m
    Future<Void> when = Future.future();
    server.requestHandler(req -> {
        req.exceptionHandler(err -> {
            // Called twice : reset + close
            assertSame(ctx, Vertx.currentContext());
            complete();
        });
        req.response().exceptionHandler(err -> {
            // Called once : reset
            assertSame(ctx, Vertx.currentContext());
            complete();
        });
        req.response().closeHandler(v -> {
            // Called once : close
            assertSame(ctx, Vertx.currentContext());
            complete();
        });
        req.response().endHandler(v -> {
            // Called once : close
            assertSame(ctx, Vertx.currentContext());
            complete();
        });
        req.connection().exceptionHandler(err -> {
            assertSame(ctx, Vertx.currentContext());
            complete();
        });
        when.complete();
    });
    startServer(ctx);
    TestClient client = new TestClient();
    ChannelFuture fut = client.connect(DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_HOST, request -> {
        int id = request.nextStreamId();
        Http2ConnectionEncoder encoder = request.encoder;
        when.setHandler(ar -> {
            encoder.frameWriter().writeRstStream(request.context, 10, 0, request.context.newPromise());
            request.context.flush();
        });
        encoder.writeHeaders(request.context, id, GET("/"), 0, false, request.context.newPromise());
        request.context.flush();
    });
    fut.sync();
    await();
}