List of usage examples for io.netty.handler.codec.http2 Http2Headers set
T set(K name, V value);
From source file:com.linkedin.r2.transport.http.client.NettyRequestAdapter.java
License:Apache License
/** * Extracts fields from a {@link Request} and construct a {@link Http2Headers} instance. * * @param request StreamRequest to extract fields from * @return a new instance of Http2Headers * @throws Exception/*w w w . j a v a2 s .co m*/ */ static <R extends Request> Http2Headers toHttp2Headers(R request) throws Exception { URI uri = request.getURI(); URL url = new URL(uri.toString()); String method = request.getMethod(); String authority = url.getAuthority(); String path = url.getFile(); String scheme = uri.getScheme(); // RFC 2616, section 5.1.2: // Note that the absolute path cannot be empty; if none is present in the original URI, // it MUST be given as "/" (the server root). path = path.isEmpty() ? "/" : path; final Http2Headers headers = new DefaultHttp2Headers().method(method).authority(authority).path(path) .scheme(scheme); for (Map.Entry<String, String> entry : request.getHeaders().entrySet()) { // Ignores HTTP/2 blacklisted headers if (HEADER_BLACKLIST.contains(entry.getKey().toLowerCase())) { continue; } // RFC 7540, section 8.1.2: // ... header field names MUST be converted to lowercase prior to their // encoding in HTTP/2. A request or response containing uppercase // header field names MUST be treated as malformed (Section 8.1.2.6). String name = entry.getKey().toLowerCase(); String value = entry.getValue(); headers.set(name, value); } // Split up cookies to allow for better header compression headers.set(HttpHeaderNames.COOKIE, request.getCookies()); return headers; }
From source file:com.turo.pushy.apns.server.TokenAuthenticationValidatingPushNotificationHandlerTest.java
License:Open Source License
@Override protected void addAcceptableCredentialsToHeaders(final Http2Headers headers) throws Exception { final AuthenticationToken authenticationToken = new AuthenticationToken(this.signingKey, new Date()); headers.set(APNS_AUTHORIZATION_HEADER, authenticationToken.getAuthorizationHeader()); }
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//w w w .jav a2 s . 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:io.vertx.core.http.Http2ServerTest.java
License:Open Source License
@Test public void testGet() throws Exception { String expected = TestUtils.randomAlphaString(1000); AtomicBoolean requestEnded = new AtomicBoolean(); Context ctx = vertx.getOrCreateContext(); server.requestHandler(req -> {/*from www .j a va2 s . co m*/ assertOnIOContext(ctx); req.endHandler(v -> { assertOnIOContext(ctx); requestEnded.set(true); }); HttpServerResponse resp = req.response(); assertEquals(HttpMethod.GET, req.method()); assertEquals(DEFAULT_HTTPS_HOST_AND_PORT, req.host()); assertEquals("/", req.path()); assertTrue(req.isSSL()); assertEquals("https", req.scheme()); assertEquals("/", req.uri()); assertEquals("foo_request_value", req.getHeader("Foo_request")); assertEquals("bar_request_value", req.getHeader("bar_request")); assertEquals(2, req.headers().getAll("juu_request").size()); assertEquals("juu_request_value_1", req.headers().getAll("juu_request").get(0)); assertEquals("juu_request_value_2", req.headers().getAll("juu_request").get(1)); assertEquals(Collections.singletonList("cookie_1; cookie_2; cookie_3"), req.headers().getAll("cookie")); resp.putHeader("content-type", "text/plain"); resp.putHeader("Foo_response", "foo_response_value"); resp.putHeader("bar_response", "bar_response_value"); resp.putHeader("juu_response", (List<String>) Arrays.asList("juu_response_value_1", "juu_response_value_2")); resp.end(expected); }); 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() { @Override public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) throws Http2Exception { vertx.runOnContext(v -> { assertEquals(id, streamId); assertEquals("200", headers.status().toString()); assertEquals("text/plain", headers.get("content-type").toString()); assertEquals("foo_response_value", headers.get("foo_response").toString()); assertEquals("bar_response_value", headers.get("bar_response").toString()); assertEquals(2, headers.getAll("juu_response").size()); assertEquals("juu_response_value_1", headers.getAll("juu_response").get(0).toString()); assertEquals("juu_response_value_2", headers.getAll("juu_response").get(1).toString()); assertFalse(endStream); }); } @Override public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream) throws Http2Exception { String actual = data.toString(StandardCharsets.UTF_8); vertx.runOnContext(v -> { assertEquals(id, streamId); assertEquals(expected, actual); assertTrue(endOfStream); testComplete(); }); return super.onDataRead(ctx, streamId, data, padding, endOfStream); } }); Http2Headers headers = GET("/").authority(DEFAULT_HTTPS_HOST_AND_PORT); headers.set("foo_request", "foo_request_value"); headers.set("bar_request", "bar_request_value"); headers.set("juu_request", "juu_request_value_1", "juu_request_value_2"); headers.set("cookie", Arrays.asList("cookie_1", "cookie_2", "cookie_3")); request.encoder.writeHeaders(request.context, id, headers, 0, true, request.context.newPromise()); request.context.flush(); }); fut.sync(); await(); }
From source file:io.vertx.core.http.impl.Http2HeadersAdaptor.java
License:Open Source License
public Http2HeadersAdaptor(Http2Headers headers) { List<CharSequence> cookies = headers.getAll(HttpHeaderNames.COOKIE); if (cookies != null && cookies.size() > 1) { // combine the cookie values into 1 header entry. // https://tools.ietf.org/html/rfc7540#section-8.1.2.5 String value = cookies.stream().collect(Collectors.joining("; ")); headers.set(HttpHeaderNames.COOKIE, value); }// w w w. ja v a 2 s. c o m this.headers = headers; }
From source file:io.vertx.test.core.Http2ServerTest.java
License:Open Source License
@Test public void testGet() throws Exception { String expected = TestUtils.randomAlphaString(1000); AtomicBoolean requestEnded = new AtomicBoolean(); Context ctx = vertx.getOrCreateContext(); server.requestHandler(req -> {/*from w w w. j a v a 2s .c o m*/ assertOnIOContext(ctx); req.endHandler(v -> { assertOnIOContext(ctx); requestEnded.set(true); }); HttpServerResponse resp = req.response(); assertEquals(HttpMethod.GET, req.method()); assertEquals(DEFAULT_HTTPS_HOST_AND_PORT, req.host()); assertEquals("/", req.path()); assertEquals(DEFAULT_HTTPS_HOST_AND_PORT, req.getHeader(":authority")); assertTrue(req.isSSL()); assertEquals("https", req.getHeader(":scheme")); assertEquals("/", req.getHeader(":path")); assertEquals("GET", req.getHeader(":method")); assertEquals("foo_request_value", req.getHeader("Foo_request")); assertEquals("bar_request_value", req.getHeader("bar_request")); assertEquals(2, req.headers().getAll("juu_request").size()); assertEquals("juu_request_value_1", req.headers().getAll("juu_request").get(0)); assertEquals("juu_request_value_2", req.headers().getAll("juu_request").get(1)); assertEquals(Collections.singletonList("cookie_1; cookie_2; cookie_3"), req.headers().getAll("cookie")); resp.putHeader("content-type", "text/plain"); resp.putHeader("Foo_response", "foo_response_value"); resp.putHeader("bar_response", "bar_response_value"); resp.putHeader("juu_response", (List<String>) Arrays.asList("juu_response_value_1", "juu_response_value_2")); resp.end(expected); }); 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() { @Override public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) throws Http2Exception { vertx.runOnContext(v -> { assertEquals(id, streamId); assertEquals("200", headers.status().toString()); assertEquals("text/plain", headers.get("content-type").toString()); assertEquals("foo_response_value", headers.get("foo_response").toString()); assertEquals("bar_response_value", headers.get("bar_response").toString()); assertEquals(2, headers.getAll("juu_response").size()); assertEquals("juu_response_value_1", headers.getAll("juu_response").get(0).toString()); assertEquals("juu_response_value_2", headers.getAll("juu_response").get(1).toString()); assertFalse(endStream); }); } @Override public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream) throws Http2Exception { String actual = data.toString(StandardCharsets.UTF_8); vertx.runOnContext(v -> { assertEquals(id, streamId); assertEquals(expected, actual); assertTrue(endOfStream); testComplete(); }); return super.onDataRead(ctx, streamId, data, padding, endOfStream); } }); Http2Headers headers = GET("/").authority(DEFAULT_HTTPS_HOST_AND_PORT); headers.set("foo_request", "foo_request_value"); headers.set("bar_request", "bar_request_value"); headers.set("juu_request", "juu_request_value_1", "juu_request_value_2"); headers.set("cookie", Arrays.asList("cookie_1", "cookie_2", "cookie_3")); request.encoder.writeHeaders(request.context, id, headers, 0, true, request.context.newPromise()); request.context.flush(); }); fut.sync(); await(); }