From f793f395d67e679affa4a6a586640e57f532ba2e Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Sat, 1 Nov 2014 02:15:14 +0900 Subject: [PATCH] Replace HttpHeaders.Names/Values with HttpHeaderNames/Values Related: 4ce994dd4fe58a03fa25b0911e5b3a2079b33692 Motivation: In 4.1, we were not able to change the type of the HTTP header name and value constants from String to AsciiString due to backward compatibility reasons. Instead of breaking backward compatibility in 4.1, we introduced new types called HttpHeaderNames and HttpHeaderValues which provides the AsciiString version of the constants, and then deprecated HttpHeaders.Names/Values. We should make the same changes while deleting the deprecated classes activaly. Modifications: - Remove HttpHeaders.Names/Values and RtspHeaders - Add HttpHeaderNames/Values and RtspHeaderNames/Values - Make HttpHeaderValues.WEBSOCKET lowercased because it's actually lowercased in all WebSocket versions but the oldest one - Do not use AsciiString.equalsIgnoreCase(CharSeq, CharSeq) if one of the parameters are AsciiString - Avoid using AsciiString.toString() repetitively - Change the parameter type of some methods from String to CharSequence Result: A user who upgraded from 4.0 to 4.1 first and removed the references to the deprecated classes and methods can easily upgrade from 4.1 to 5.0. --- .../codec/http/DefaultLastHttpContent.java | 9 +- .../codec/http/HttpClientUpgradeHandler.java | 9 +- .../codec/http/HttpContentCompressor.java | 5 +- .../codec/http/HttpContentDecoder.java | 18 +- .../codec/http/HttpContentDecompressor.java | 8 +- .../codec/http/HttpContentEncoder.java | 12 +- .../handler/codec/http/HttpHeaderNames.java | 351 ++++++++++++ .../handler/codec/http/HttpHeaderUtil.java | 61 +-- .../handler/codec/http/HttpHeaderValues.java | 201 +++++++ .../netty/handler/codec/http/HttpHeaders.java | 515 ------------------ .../codec/http/HttpObjectAggregator.java | 4 +- .../handler/codec/http/HttpObjectDecoder.java | 9 +- .../codec/http/HttpServerUpgradeHandler.java | 30 +- .../handler/codec/http/cors/CorsConfig.java | 6 +- .../handler/codec/http/cors/CorsHandler.java | 28 +- .../codec/http/multipart/DiskFileUpload.java | 15 +- .../http/multipart/HttpPostBodyUtil.java | 47 +- .../HttpPostMultipartRequestDecoder.java | 70 +-- .../multipart/HttpPostRequestDecoder.java | 15 +- .../multipart/HttpPostRequestEncoder.java | 74 +-- .../http/multipart/MemoryFileUpload.java | 15 +- .../websocketx/WebSocketClientHandshaker.java | 3 +- .../WebSocketClientHandshaker00.java | 30 +- .../WebSocketClientHandshaker07.java | 30 +- .../WebSocketClientHandshaker08.java | 30 +- .../WebSocketClientHandshaker13.java | 30 +- .../WebSocketServerHandshaker00.java | 39 +- .../WebSocketServerHandshaker07.java | 19 +- .../WebSocketServerHandshaker08.java | 19 +- .../WebSocketServerHandshaker13.java | 19 +- .../WebSocketServerHandshakerFactory.java | 6 +- ...bSocketServerProtocolHandshakeHandler.java | 4 +- .../WebSocketClientExtensionHandler.java | 8 +- .../extensions/WebSocketExtensionUtil.java | 9 +- .../WebSocketServerExtensionHandler.java | 8 +- .../handler/codec/rtsp/RtspHeaderNames.java | 207 +++++++ .../handler/codec/rtsp/RtspHeaderValues.java | 196 +++++++ .../netty/handler/codec/rtsp/RtspHeaders.java | 389 ------------- .../handler/codec/rtsp/RtspObjectDecoder.java | 2 +- .../handler/codec/spdy/SpdyHttpDecoder.java | 10 +- .../handler/codec/spdy/SpdyHttpEncoder.java | 21 +- .../codec/http/HttpContentCompressorTest.java | 24 +- .../codec/http/HttpContentEncoderTest.java | 22 +- .../codec/http/HttpHeaderUtilTest.java | 2 +- .../codec/http/HttpObjectAggregatorTest.java | 11 +- .../codec/http/HttpResponseDecoderTest.java | 5 +- .../codec/http/HttpResponseEncoderTest.java | 6 +- .../codec/http/HttpServerCodecTest.java | 9 +- .../codec/http/cors/CorsConfigTest.java | 6 +- .../codec/http/cors/CorsHandlerTest.java | 2 +- .../multipart/HttpPostRequestDecoderTest.java | 25 +- .../multipart/HttpPostRequestEncoderTest.java | 3 +- .../websocketx/WebSocketRequestBuilder.java | 69 ++- .../WebSocketServerHandshaker00Test.java | 24 +- .../WebSocketServerHandshaker08Test.java | 24 +- .../WebSocketServerHandshaker13Test.java | 24 +- .../WebSocketServerProtocolHandlerTest.java | 4 +- .../WebSocketClientExtensionHandlerTest.java | 42 +- .../WebSocketExtensionTestUtil.java | 35 +- .../WebSocketServerExtensionHandlerTest.java | 31 +- ...WebSocketServerCompressionHandlerTest.java | 84 +-- .../DelegatingDecompressorFrameListener.java | 33 +- .../netty/handler/codec/http2/HttpUtil.java | 29 +- .../http2/InboundHttp2ToHttpAdapter.java | 15 +- .../codec/http2/DataCompressionHttp2Test.java | 72 +-- .../http2/DefaultHttp2HeadersDecoderTest.java | 18 +- ...faultHttp2ToHttpConnectionHandlerTest.java | 55 +- .../http2/InboundHttp2ToHttpAdapterTest.java | 85 ++- .../file/HttpStaticFileServerHandler.java | 8 +- .../HttpHelloWorldServerHandler.java | 6 +- .../example/http/snoop/HttpSnoopClient.java | 11 +- .../http/snoop/HttpSnoopServerHandler.java | 5 +- .../example/http/upload/HttpUploadClient.java | 20 +- .../http/upload/HttpUploadServerHandler.java | 22 +- .../WebSocketServerHandler.java | 2 +- .../server/WebSocketServerHandler.java | 2 +- .../example/http2/client/Http2Client.java | 21 +- .../http2/server/HelloWorldHttp1Handler.java | 6 +- .../netty/example/spdy/client/SpdyClient.java | 7 +- .../spdy/server/SpdyServerHandler.java | 6 +- .../netty/handler/proxy/HttpProxyHandler.java | 6 +- .../netty/handler/proxy/HttpProxyServer.java | 10 +- .../autobahn/AutobahnServerHandler.java | 4 +- 83 files changed, 1736 insertions(+), 1740 deletions(-) create mode 100644 codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderNames.java create mode 100644 codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderValues.java create mode 100644 codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderNames.java create mode 100644 codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderValues.java delete mode 100644 codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaders.java diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java index 0f9702d8e4..d8d54df2ac 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultLastHttpContent.java @@ -17,13 +17,10 @@ package io.netty.handler.codec.http; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import io.netty.handler.codec.AsciiString; import io.netty.util.internal.StringUtil; import java.util.Map; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; - /** * The default {@link LastHttpContent} implementation. */ @@ -119,9 +116,9 @@ public class DefaultLastHttpContent extends DefaultHttpContent implements LastHt public CharSequence convertName(CharSequence name) { name = super.convertName(name); if (validate) { - if (AsciiString.equalsIgnoreCase(CONTENT_LENGTH, name) - || AsciiString.equalsIgnoreCase(TRANSFER_ENCODING, name) - || AsciiString.equalsIgnoreCase(TRAILER, name)) { + if (HttpHeaderNames.CONTENT_LENGTH.equalsIgnoreCase(name) + || HttpHeaderNames.TRANSFER_ENCODING.equalsIgnoreCase(name) + || HttpHeaderNames.TRAILER.equalsIgnoreCase(name)) { throw new IllegalArgumentException("prohibited trailing header: " + name); } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientUpgradeHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientUpgradeHandler.java index 1a29d1dc41..fdf9c2b45a 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientUpgradeHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientUpgradeHandler.java @@ -23,7 +23,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; import static io.netty.handler.codec.http.HttpResponseStatus.*; import static io.netty.util.ReferenceCountUtil.*; @@ -178,7 +177,7 @@ public class HttpClientUpgradeHandler extends HttpObjectAggregator { return; } - CharSequence upgradeHeader = response.headers().get(UPGRADE); + CharSequence upgradeHeader = response.headers().get(HttpHeaderNames.UPGRADE); if (upgradeHeader == null) { throw new IllegalStateException( "Switching Protocols response missing UPGRADE header"); @@ -217,7 +216,7 @@ public class HttpClientUpgradeHandler extends HttpObjectAggregator { */ private void setUpgradeRequestHeaders(ChannelHandlerContext ctx, HttpRequest request) { // Set the UPGRADE header on the request. - request.headers().set(UPGRADE, upgradeCodec.protocol()); + request.headers().set(HttpHeaderNames.UPGRADE, upgradeCodec.protocol()); // Add all protocol-specific headers to the request. Set connectionParts = new LinkedHashSet(2); @@ -229,7 +228,7 @@ public class HttpClientUpgradeHandler extends HttpObjectAggregator { builder.append(part); builder.append(','); } - builder.append(UPGRADE); - request.headers().set(CONNECTION, builder.toString()); + builder.append(HttpHeaderNames.UPGRADE); + request.headers().set(HttpHeaderNames.CONNECTION, builder.toString()); } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java index 2957287f5a..0183da70f6 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentCompressor.java @@ -16,7 +16,6 @@ package io.netty.handler.codec.http; import io.netty.channel.embedded.EmbeddedChannel; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.compression.ZlibCodecFactory; import io.netty.handler.codec.compression.ZlibWrapper; import io.netty.util.internal.StringUtil; @@ -95,9 +94,9 @@ public class HttpContentCompressor extends HttpContentEncoder { @Override protected Result beginEncode(HttpResponse headers, CharSequence acceptEncoding) throws Exception { - CharSequence contentEncoding = headers.headers().get(HttpHeaders.Names.CONTENT_ENCODING); + CharSequence contentEncoding = headers.headers().get(HttpHeaderNames.CONTENT_ENCODING); if (contentEncoding != null && - !AsciiString.equalsIgnoreCase(HttpHeaders.Values.IDENTITY, contentEncoding)) { + !HttpHeaderValues.IDENTITY.equalsIgnoreCase(contentEncoding)) { return null; } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecoder.java index eae4f769e8..582861cc8d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentDecoder.java @@ -44,6 +44,8 @@ import java.util.List; */ public abstract class HttpContentDecoder extends MessageToMessageDecoder { + private static final String IDENTITY = HttpHeaderValues.IDENTITY.toString(); + private EmbeddedChannel decoder; private HttpMessage message; private boolean decodeStarted; @@ -87,30 +89,30 @@ public abstract class HttpContentDecoder extends MessageToMessageDecoder out) throws Exception { - CharSequence acceptedEncoding = msg.headers().get(HttpHeaders.Names.ACCEPT_ENCODING); + CharSequence acceptedEncoding = msg.headers().get(HttpHeaderNames.ACCEPT_ENCODING); if (acceptedEncoding == null) { - acceptedEncoding = HttpHeaders.Values.IDENTITY; + acceptedEncoding = HttpHeaderValues.IDENTITY; } acceptEncodingQueue.add(acceptedEncoding); out.add(ReferenceCountUtil.retain(msg)); @@ -133,11 +131,11 @@ public abstract class HttpContentEncoder extends MessageToMessageCodec + * These are all defined as lowercase to support HTTP/2 requirements while also not + * violating HTTP/1.x requirements. New header names should always be lowercase. + */ +public final class HttpHeaderNames { + /** + * {@code "accept"} + */ + public static final AsciiString ACCEPT = new AsciiString("accept"); + /** + * {@code "accept-charset"} + */ + public static final AsciiString ACCEPT_CHARSET = new AsciiString("accept-charset"); + /** + * {@code "accept-encoding"} + */ + public static final AsciiString ACCEPT_ENCODING = new AsciiString("accept-encoding"); + /** + * {@code "accept-language"} + */ + public static final AsciiString ACCEPT_LANGUAGE = new AsciiString("accept-language"); + /** + * {@code "accept-ranges"} + */ + public static final AsciiString ACCEPT_RANGES = new AsciiString("accept-ranges"); + /** + * {@code "accept-patch"} + */ + public static final AsciiString ACCEPT_PATCH = new AsciiString("accept-patch"); + /** + * {@code "access-control-allow-credentials"} + */ + public static final AsciiString ACCESS_CONTROL_ALLOW_CREDENTIALS = + new AsciiString("access-control-allow-credentials"); + /** + * {@code "access-control-allow-headers"} + */ + public static final AsciiString ACCESS_CONTROL_ALLOW_HEADERS = + new AsciiString("access-control-allow-headers"); + /** + * {@code "access-control-allow-methods"} + */ + public static final AsciiString ACCESS_CONTROL_ALLOW_METHODS = + new AsciiString("access-control-allow-methods"); + /** + * {@code "access-control-allow-origin"} + */ + public static final AsciiString ACCESS_CONTROL_ALLOW_ORIGIN = + new AsciiString("access-control-allow-origin"); + /** + * {@code "access-control-expose-headers"} + */ + public static final AsciiString ACCESS_CONTROL_EXPOSE_HEADERS = + new AsciiString("access-control-expose-headers"); + /** + * {@code "access-control-max-age"} + */ + public static final AsciiString ACCESS_CONTROL_MAX_AGE = new AsciiString("access-control-max-age"); + /** + * {@code "access-control-request-headers"} + */ + public static final AsciiString ACCESS_CONTROL_REQUEST_HEADERS = + new AsciiString("access-control-request-headers"); + /** + * {@code "access-control-request-method"} + */ + public static final AsciiString ACCESS_CONTROL_REQUEST_METHOD = + new AsciiString("access-control-request-method"); + /** + * {@code "age"} + */ + public static final AsciiString AGE = new AsciiString("age"); + /** + * {@code "allow"} + */ + public static final AsciiString ALLOW = new AsciiString("allow"); + /** + * {@code "authorization"} + */ + public static final AsciiString AUTHORIZATION = new AsciiString("authorization"); + /** + * {@code "cache-control"} + */ + public static final AsciiString CACHE_CONTROL = new AsciiString("cache-control"); + /** + * {@code "connection"} + */ + public static final AsciiString CONNECTION = new AsciiString("connection"); + /** + * {@code "content-base"} + */ + public static final AsciiString CONTENT_BASE = new AsciiString("content-base"); + /** + * {@code "content-encoding"} + */ + public static final AsciiString CONTENT_ENCODING = new AsciiString("content-encoding"); + /** + * {@code "content-language"} + */ + public static final AsciiString CONTENT_LANGUAGE = new AsciiString("content-language"); + /** + * {@code "content-length"} + */ + public static final AsciiString CONTENT_LENGTH = new AsciiString("content-length"); + /** + * {@code "content-location"} + */ + public static final AsciiString CONTENT_LOCATION = new AsciiString("content-location"); + /** + * {@code "content-transfer-encoding"} + */ + public static final AsciiString CONTENT_TRANSFER_ENCODING = new AsciiString("content-transfer-encoding"); + /** + * {@code "content-disposition"} + */ + public static final AsciiString CONTENT_DISPOSITION = new AsciiString("content-disposition"); + /** + * {@code "content-md5"} + */ + public static final AsciiString CONTENT_MD5 = new AsciiString("content-md5"); + /** + * {@code "content-range"} + */ + public static final AsciiString CONTENT_RANGE = new AsciiString("content-range"); + /** + * {@code "content-type"} + */ + public static final AsciiString CONTENT_TYPE = new AsciiString("content-type"); + /** + * {@code "cookie"} + */ + public static final AsciiString COOKIE = new AsciiString("cookie"); + /** + * {@code "date"} + */ + public static final AsciiString DATE = new AsciiString("date"); + /** + * {@code "etag"} + */ + public static final AsciiString ETAG = new AsciiString("etag"); + /** + * {@code "expect"} + */ + public static final AsciiString EXPECT = new AsciiString("expect"); + /** + * {@code "expires"} + */ + public static final AsciiString EXPIRES = new AsciiString("expires"); + /** + * {@code "from"} + */ + public static final AsciiString FROM = new AsciiString("from"); + /** + * {@code "host"} + */ + public static final AsciiString HOST = new AsciiString("host"); + /** + * {@code "if-match"} + */ + public static final AsciiString IF_MATCH = new AsciiString("if-match"); + /** + * {@code "if-modified-since"} + */ + public static final AsciiString IF_MODIFIED_SINCE = new AsciiString("if-modified-since"); + /** + * {@code "if-none-match"} + */ + public static final AsciiString IF_NONE_MATCH = new AsciiString("if-none-match"); + /** + * {@code "if-range"} + */ + public static final AsciiString IF_RANGE = new AsciiString("if-range"); + /** + * {@code "if-unmodified-since"} + */ + public static final AsciiString IF_UNMODIFIED_SINCE = new AsciiString("if-unmodified-since"); + /** + * @deprecated use {@link #CONNECTION} + * + * {@code "keep-alive"} + */ + @Deprecated + public static final AsciiString KEEP_ALIVE = new AsciiString("keep-alive"); + /** + * {@code "last-modified"} + */ + public static final AsciiString LAST_MODIFIED = new AsciiString("last-modified"); + /** + * {@code "location"} + */ + public static final AsciiString LOCATION = new AsciiString("location"); + /** + * {@code "max-forwards"} + */ + public static final AsciiString MAX_FORWARDS = new AsciiString("max-forwards"); + /** + * {@code "origin"} + */ + public static final AsciiString ORIGIN = new AsciiString("origin"); + /** + * {@code "pragma"} + */ + public static final AsciiString PRAGMA = new AsciiString("pragma"); + /** + * {@code "proxy-authenticate"} + */ + public static final AsciiString PROXY_AUTHENTICATE = new AsciiString("proxy-authenticate"); + /** + * {@code "proxy-authorization"} + */ + public static final AsciiString PROXY_AUTHORIZATION = new AsciiString("proxy-authorization"); + /** + * @deprecated use {@link #CONNECTION} + * + * {@code "proxy-connection"} + */ + @Deprecated + public static final AsciiString PROXY_CONNECTION = new AsciiString("proxy-connection"); + /** + * {@code "range"} + */ + public static final AsciiString RANGE = new AsciiString("range"); + /** + * {@code "referer"} + */ + public static final AsciiString REFERER = new AsciiString("referer"); + /** + * {@code "retry-after"} + */ + public static final AsciiString RETRY_AFTER = new AsciiString("retry-after"); + /** + * {@code "sec-websocket-key1"} + */ + public static final AsciiString SEC_WEBSOCKET_KEY1 = new AsciiString("sec-websocket-key1"); + /** + * {@code "sec-websocket-key2"} + */ + public static final AsciiString SEC_WEBSOCKET_KEY2 = new AsciiString("sec-websocket-key2"); + /** + * {@code "sec-websocket-location"} + */ + public static final AsciiString SEC_WEBSOCKET_LOCATION = new AsciiString("sec-websocket-location"); + /** + * {@code "sec-websocket-origin"} + */ + public static final AsciiString SEC_WEBSOCKET_ORIGIN = new AsciiString("sec-websocket-origin"); + /** + * {@code "sec-websocket-protocol"} + */ + public static final AsciiString SEC_WEBSOCKET_PROTOCOL = new AsciiString("sec-websocket-protocol"); + /** + * {@code "sec-websocket-version"} + */ + public static final AsciiString SEC_WEBSOCKET_VERSION = new AsciiString("sec-websocket-version"); + /** + * {@code "sec-websocket-key"} + */ + public static final AsciiString SEC_WEBSOCKET_KEY = new AsciiString("sec-websocket-key"); + /** + * {@code "sec-websocket-accept"} + */ + public static final AsciiString SEC_WEBSOCKET_ACCEPT = new AsciiString("sec-websocket-accept"); + /** + * {@code "sec-websocket-protocol"} + */ + public static final AsciiString SEC_WEBSOCKET_EXTENSIONS = new AsciiString("sec-websocket-extensions"); + /** + * {@code "server"} + */ + public static final AsciiString SERVER = new AsciiString("server"); + /** + * {@code "set-cookie"} + */ + public static final AsciiString SET_COOKIE = new AsciiString("set-cookie"); + /** + * {@code "set-cookie2"} + */ + public static final AsciiString SET_COOKIE2 = new AsciiString("set-cookie2"); + /** + * {@code "te"} + */ + public static final AsciiString TE = new AsciiString("te"); + /** + * {@code "trailer"} + */ + public static final AsciiString TRAILER = new AsciiString("trailer"); + /** + * {@code "transfer-encoding"} + */ + public static final AsciiString TRANSFER_ENCODING = new AsciiString("transfer-encoding"); + /** + * {@code "upgrade"} + */ + public static final AsciiString UPGRADE = new AsciiString("upgrade"); + /** + * {@code "user-agent"} + */ + public static final AsciiString USER_AGENT = new AsciiString("user-agent"); + /** + * {@code "vary"} + */ + public static final AsciiString VARY = new AsciiString("vary"); + /** + * {@code "via"} + */ + public static final AsciiString VIA = new AsciiString("via"); + /** + * {@code "warning"} + */ + public static final AsciiString WARNING = new AsciiString("warning"); + /** + * {@code "websocket-location"} + */ + public static final AsciiString WEBSOCKET_LOCATION = new AsciiString("websocket-location"); + /** + * {@code "websocket-origin"} + */ + public static final AsciiString WEBSOCKET_ORIGIN = new AsciiString("websocket-origin"); + /** + * {@code "websocket-protocol"} + */ + public static final AsciiString WEBSOCKET_PROTOCOL = new AsciiString("websocket-protocol"); + /** + * {@code "www-authenticate"} + */ + public static final AsciiString WWW_AUTHENTICATE = new AsciiString("www-authenticate"); + + private HttpHeaderNames() { } +} diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderUtil.java index aa2d484050..cdc75a76fa 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderUtil.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderUtil.java @@ -17,9 +17,6 @@ package io.netty.handler.codec.http; import io.netty.buffer.ByteBuf; -import io.netty.handler.codec.AsciiString; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import java.util.Iterator; import java.util.List; @@ -33,15 +30,15 @@ public final class HttpHeaderUtil { * {@link HttpVersion#isKeepAliveDefault()}. */ public static boolean isKeepAlive(HttpMessage message) { - CharSequence connection = message.headers().get(Names.CONNECTION); - if (connection != null && AsciiString.equalsIgnoreCase(Values.CLOSE, connection)) { + CharSequence connection = message.headers().get(HttpHeaderNames.CONNECTION); + if (connection != null && HttpHeaderValues.CLOSE.equalsIgnoreCase(connection)) { return false; } if (message.protocolVersion().isKeepAliveDefault()) { - return !AsciiString.equalsIgnoreCase(Values.CLOSE, connection); + return !HttpHeaderValues.CLOSE.equalsIgnoreCase(connection); } else { - return AsciiString.equalsIgnoreCase(Values.KEEP_ALIVE, connection); + return HttpHeaderValues.KEEP_ALIVE.equalsIgnoreCase(connection); } } @@ -68,15 +65,15 @@ public final class HttpHeaderUtil { HttpHeaders h = message.headers(); if (message.protocolVersion().isKeepAliveDefault()) { if (keepAlive) { - h.remove(Names.CONNECTION); + h.remove(HttpHeaderNames.CONNECTION); } else { - h.set(Names.CONNECTION, Values.CLOSE); + h.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); } } else { if (keepAlive) { - h.set(Names.CONNECTION, Values.KEEP_ALIVE); + h.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); } else { - h.remove(Names.CONNECTION); + h.remove(HttpHeaderNames.CONNECTION); } } } @@ -94,7 +91,7 @@ public final class HttpHeaderUtil { * or its value is not a number */ public static long getContentLength(HttpMessage message) { - Long value = message.headers().getLong(Names.CONTENT_LENGTH); + Long value = message.headers().getLong(HttpHeaderNames.CONTENT_LENGTH); if (value != null) { return value; } @@ -107,7 +104,7 @@ public final class HttpHeaderUtil { } // Otherwise we don't. - throw new NumberFormatException("header not found: " + Names.CONTENT_LENGTH); + throw new NumberFormatException("header not found: " + HttpHeaderNames.CONTENT_LENGTH); } /** @@ -121,7 +118,7 @@ public final class HttpHeaderUtil { * a number */ public static long getContentLength(HttpMessage message, long defaultValue) { - Long value = message.headers().getLong(Names.CONTENT_LENGTH); + Long value = message.headers().getLong(HttpHeaderNames.CONTENT_LENGTH); if (value != null) { return value; } @@ -147,15 +144,15 @@ public final class HttpHeaderUtil { if (message instanceof HttpRequest) { HttpRequest req = (HttpRequest) message; if (HttpMethod.GET.equals(req.method()) && - h.contains(Names.SEC_WEBSOCKET_KEY1) && - h.contains(Names.SEC_WEBSOCKET_KEY2)) { + h.contains(HttpHeaderNames.SEC_WEBSOCKET_KEY1) && + h.contains(HttpHeaderNames.SEC_WEBSOCKET_KEY2)) { return 8; } } else if (message instanceof HttpResponse) { HttpResponse res = (HttpResponse) message; if (res.status().code() == 101 && - h.contains(Names.SEC_WEBSOCKET_ORIGIN) && - h.contains(Names.SEC_WEBSOCKET_LOCATION)) { + h.contains(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN) && + h.contains(HttpHeaderNames.SEC_WEBSOCKET_LOCATION)) { return 16; } } @@ -168,11 +165,11 @@ public final class HttpHeaderUtil { * Sets the {@code "Content-Length"} header. */ public static void setContentLength(HttpMessage message, long length) { - message.headers().setLong(Names.CONTENT_LENGTH, length); + message.headers().setLong(HttpHeaderNames.CONTENT_LENGTH, length); } public static boolean isContentLengthSet(HttpMessage m) { - return m.headers().contains(Names.CONTENT_LENGTH); + return m.headers().contains(HttpHeaderNames.CONTENT_LENGTH); } /** @@ -191,16 +188,16 @@ public final class HttpHeaderUtil { } // In most cases, there will be one or zero 'Expect' header. - CharSequence value = message.headers().get(Names.EXPECT); + CharSequence value = message.headers().get(HttpHeaderNames.EXPECT); if (value == null) { return false; } - if (AsciiString.equalsIgnoreCase(Values.CONTINUE, value)) { + if (HttpHeaderValues.CONTINUE.equalsIgnoreCase(value)) { return true; } // Multiple 'Expect' headers. Search through them. - return message.headers().contains(Names.EXPECT, Values.CONTINUE, true); + return message.headers().contains(HttpHeaderNames.EXPECT, HttpHeaderValues.CONTINUE, true); } /** @@ -212,9 +209,9 @@ public final class HttpHeaderUtil { */ public static void set100ContinueExpected(HttpMessage message, boolean expected) { if (expected) { - message.headers().set(Names.EXPECT, Values.CONTINUE); + message.headers().set(HttpHeaderNames.EXPECT, HttpHeaderValues.CONTINUE); } else { - message.headers().remove(Names.EXPECT); + message.headers().remove(HttpHeaderNames.EXPECT); } } @@ -225,29 +222,29 @@ public final class HttpHeaderUtil { * @return True if transfer encoding is chunked, otherwise false */ public static boolean isTransferEncodingChunked(HttpMessage message) { - return message.headers().contains(Names.TRANSFER_ENCODING, Values.CHUNKED, true); + return message.headers().contains(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED, true); } public static void setTransferEncodingChunked(HttpMessage m, boolean chunked) { if (chunked) { - m.headers().add(Names.TRANSFER_ENCODING, Values.CHUNKED); - m.headers().remove(Names.CONTENT_LENGTH); + m.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); + m.headers().remove(HttpHeaderNames.CONTENT_LENGTH); } else { - List values = m.headers().getAll(Names.TRANSFER_ENCODING); + List values = m.headers().getAll(HttpHeaderNames.TRANSFER_ENCODING); if (values.isEmpty()) { return; } Iterator valuesIt = values.iterator(); while (valuesIt.hasNext()) { CharSequence value = valuesIt.next(); - if (AsciiString.equalsIgnoreCase(value, Values.CHUNKED)) { + if (HttpHeaderValues.CHUNKED.equalsIgnoreCase(value)) { valuesIt.remove(); } } if (values.isEmpty()) { - m.headers().remove(Names.TRANSFER_ENCODING); + m.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); } else { - m.headers().set(Names.TRANSFER_ENCODING, values); + m.headers().set(HttpHeaderNames.TRANSFER_ENCODING, values); } } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderValues.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderValues.java new file mode 100644 index 0000000000..a5a27cc11b --- /dev/null +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaderValues.java @@ -0,0 +1,201 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http; + +import io.netty.handler.codec.AsciiString; + +/** + * Standard HTTP header values. + */ +public final class HttpHeaderValues { + /** + * {@code "application/x-www-form-urlencoded"} + */ + public static final AsciiString APPLICATION_X_WWW_FORM_URLENCODED = + new AsciiString("application/x-www-form-urlencoded"); + /** + * {@code "application/octet-stream"} + */ + public static final AsciiString APPLICATION_OCTET_STREAM = new AsciiString("application/octet-stream"); + /** + * {@code "attachment"} + * See {@link HttpHeaderNames#CONTENT_DISPOSITION} + */ + public static final AsciiString ATTACHMENT = new AsciiString("attachment"); + /** + * {@code "base64"} + */ + public static final AsciiString BASE64 = new AsciiString("base64"); + /** + * {@code "binary"} + */ + public static final AsciiString BINARY = new AsciiString("binary"); + /** + * {@code "boundary"} + */ + public static final AsciiString BOUNDARY = new AsciiString("boundary"); + /** + * {@code "bytes"} + */ + public static final AsciiString BYTES = new AsciiString("bytes"); + /** + * {@code "charset"} + */ + public static final AsciiString CHARSET = new AsciiString("charset"); + /** + * {@code "chunked"} + */ + public static final AsciiString CHUNKED = new AsciiString("chunked"); + /** + * {@code "close"} + */ + public static final AsciiString CLOSE = new AsciiString("close"); + /** + * {@code "compress"} + */ + public static final AsciiString COMPRESS = new AsciiString("compress"); + /** + * {@code "100-continue"} + */ + public static final AsciiString CONTINUE = new AsciiString("100-continue"); + /** + * {@code "deflate"} + */ + public static final AsciiString DEFLATE = new AsciiString("deflate"); + /** + * {@code "file"} + * See {@link HttpHeaderNames#CONTENT_DISPOSITION} + */ + public static final AsciiString FILE = new AsciiString("file"); + /** + * {@code "filename"} + * See {@link HttpHeaderNames#CONTENT_DISPOSITION} + */ + public static final AsciiString FILENAME = new AsciiString("filename"); + /** + * {@code "form-data"} + * See {@link HttpHeaderNames#CONTENT_DISPOSITION} + */ + public static final AsciiString FORM_DATA = new AsciiString("form-data"); + /** + * {@code "gzip"} + */ + public static final AsciiString GZIP = new AsciiString("gzip"); + /** + * {@code "identity"} + */ + public static final AsciiString IDENTITY = new AsciiString("identity"); + /** + * {@code "keep-alive"} + */ + public static final AsciiString KEEP_ALIVE = new AsciiString("keep-alive"); + /** + * {@code "max-age"} + */ + public static final AsciiString MAX_AGE = new AsciiString("max-age"); + /** + * {@code "max-stale"} + */ + public static final AsciiString MAX_STALE = new AsciiString("max-stale"); + /** + * {@code "min-fresh"} + */ + public static final AsciiString MIN_FRESH = new AsciiString("min-fresh"); + /** + * {@code "multipart/form-data"} + */ + public static final AsciiString MULTIPART_FORM_DATA = new AsciiString("multipart/form-data"); + /** + * {@code "multipart/mixed"} + */ + public static final AsciiString MULTIPART_MIXED = new AsciiString("multipart/mixed"); + /** + * {@code "must-revalidate"} + */ + public static final AsciiString MUST_REVALIDATE = new AsciiString("must-revalidate"); + /** + * {@code "name"} + * See {@link HttpHeaderNames#CONTENT_DISPOSITION} + */ + public static final AsciiString NAME = new AsciiString("name"); + /** + * {@code "no-cache"} + */ + public static final AsciiString NO_CACHE = new AsciiString("no-cache"); + /** + * {@code "no-store"} + */ + public static final AsciiString NO_STORE = new AsciiString("no-store"); + /** + * {@code "no-transform"} + */ + public static final AsciiString NO_TRANSFORM = new AsciiString("no-transform"); + /** + * {@code "none"} + */ + public static final AsciiString NONE = new AsciiString("none"); + /** + * {@code "only-if-cached"} + */ + public static final AsciiString ONLY_IF_CACHED = new AsciiString("only-if-cached"); + /** + * {@code "private"} + */ + public static final AsciiString PRIVATE = new AsciiString("private"); + /** + * {@code "proxy-revalidate"} + */ + public static final AsciiString PROXY_REVALIDATE = new AsciiString("proxy-revalidate"); + /** + * {@code "public"} + */ + public static final AsciiString PUBLIC = new AsciiString("public"); + /** + * {@code "quoted-printable"} + */ + public static final AsciiString QUOTED_PRINTABLE = new AsciiString("quoted-printable"); + /** + * {@code "s-maxage"} + */ + public static final AsciiString S_MAXAGE = new AsciiString("s-maxage"); + /** + * {@code "text/plain"} + */ + public static final AsciiString TEXT_PLAIN = new AsciiString("text/plain"); + /** + * {@code "trailers"} + */ + public static final AsciiString TRAILERS = new AsciiString("trailers"); + /** + * {@code "Upgrade"} + */ + public static final AsciiString UPGRADE = new AsciiString("Upgrade"); + /** + * {@code "websocket"} + */ + public static final AsciiString WEBSOCKET = new AsciiString("websocket"); + /** + * {@code "x-deflate"} + */ + public static final AsciiString X_DEFLATE = new AsciiString("x-deflate"); + /** + * {@code "x-gzip"} + */ + public static final AsciiString X_GZIP = new AsciiString("x-gzip"); + + private HttpHeaderValues() { } +} diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java index 987babaf28..24d943688d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java @@ -15,7 +15,6 @@ */ package io.netty.handler.codec.http; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.TextHeaders; @@ -24,520 +23,6 @@ import io.netty.handler.codec.TextHeaders; * commonly used utility methods that accesses an {@link HttpMessage}. */ public interface HttpHeaders extends TextHeaders { - /** - * Standard HTTP header names. - *

- * These are all defined as lowercase to support HTTP/2 requirements while also not - * violating HTTP/1.x requirements. New header names should always be lowercase. - */ - final class Names { - /** - * {@code "accept"} - */ - public static final AsciiString ACCEPT = new AsciiString("accept"); - /** - * {@code "accept-charset"} - */ - public static final AsciiString ACCEPT_CHARSET = new AsciiString("accept-charset"); - /** - * {@code "accept-encoding"} - */ - public static final AsciiString ACCEPT_ENCODING = new AsciiString("accept-encoding"); - /** - * {@code "accept-language"} - */ - public static final AsciiString ACCEPT_LANGUAGE = new AsciiString("accept-language"); - /** - * {@code "accept-ranges"} - */ - public static final AsciiString ACCEPT_RANGES = new AsciiString("accept-ranges"); - /** - * {@code "accept-patch"} - */ - public static final AsciiString ACCEPT_PATCH = new AsciiString("accept-patch"); - /** - * {@code "access-control-allow-credentials"} - */ - public static final AsciiString ACCESS_CONTROL_ALLOW_CREDENTIALS = - new AsciiString("access-control-allow-credentials"); - /** - * {@code "access-control-allow-headers"} - */ - public static final AsciiString ACCESS_CONTROL_ALLOW_HEADERS = - new AsciiString("access-control-allow-headers"); - /** - * {@code "access-control-allow-methods"} - */ - public static final AsciiString ACCESS_CONTROL_ALLOW_METHODS = - new AsciiString("access-control-allow-methods"); - /** - * {@code "access-control-allow-origin"} - */ - public static final AsciiString ACCESS_CONTROL_ALLOW_ORIGIN = - new AsciiString("access-control-allow-origin"); - /** - * {@code "access-control-expose-headers"} - */ - public static final AsciiString ACCESS_CONTROL_EXPOSE_HEADERS = - new AsciiString("access-control-expose-headers"); - /** - * {@code "access-control-max-age"} - */ - public static final AsciiString ACCESS_CONTROL_MAX_AGE = new AsciiString("access-control-max-age"); - /** - * {@code "access-control-request-headers"} - */ - public static final AsciiString ACCESS_CONTROL_REQUEST_HEADERS = - new AsciiString("access-control-request-headers"); - /** - * {@code "access-control-request-method"} - */ - public static final AsciiString ACCESS_CONTROL_REQUEST_METHOD = - new AsciiString("access-control-request-method"); - /** - * {@code "age"} - */ - public static final AsciiString AGE = new AsciiString("age"); - /** - * {@code "allow"} - */ - public static final AsciiString ALLOW = new AsciiString("allow"); - /** - * {@code "authorization"} - */ - public static final AsciiString AUTHORIZATION = new AsciiString("authorization"); - /** - * {@code "cache-control"} - */ - public static final AsciiString CACHE_CONTROL = new AsciiString("cache-control"); - /** - * {@code "connection"} - */ - public static final AsciiString CONNECTION = new AsciiString("connection"); - /** - * {@code "content-base"} - */ - public static final AsciiString CONTENT_BASE = new AsciiString("content-base"); - /** - * {@code "content-encoding"} - */ - public static final AsciiString CONTENT_ENCODING = new AsciiString("content-encoding"); - /** - * {@code "content-language"} - */ - public static final AsciiString CONTENT_LANGUAGE = new AsciiString("content-language"); - /** - * {@code "content-length"} - */ - public static final AsciiString CONTENT_LENGTH = new AsciiString("content-length"); - /** - * {@code "content-location"} - */ - public static final AsciiString CONTENT_LOCATION = new AsciiString("content-location"); - /** - * {@code "content-transfer-encoding"} - */ - public static final AsciiString CONTENT_TRANSFER_ENCODING = new AsciiString("content-transfer-encoding"); - /** - * {@code "content-disposition"} - */ - public static final AsciiString CONTENT_DISPOSITION = new AsciiString("content-disposition"); - /** - * {@code "content-md5"} - */ - public static final AsciiString CONTENT_MD5 = new AsciiString("content-md5"); - /** - * {@code "content-range"} - */ - public static final AsciiString CONTENT_RANGE = new AsciiString("content-range"); - /** - * {@code "content-type"} - */ - public static final AsciiString CONTENT_TYPE = new AsciiString("content-type"); - /** - * {@code "cookie"} - */ - public static final AsciiString COOKIE = new AsciiString("cookie"); - /** - * {@code "date"} - */ - public static final AsciiString DATE = new AsciiString("date"); - /** - * {@code "etag"} - */ - public static final AsciiString ETAG = new AsciiString("etag"); - /** - * {@code "expect"} - */ - public static final AsciiString EXPECT = new AsciiString("expect"); - /** - * {@code "expires"} - */ - public static final AsciiString EXPIRES = new AsciiString("expires"); - /** - * {@code "from"} - */ - public static final AsciiString FROM = new AsciiString("from"); - /** - * {@code "host"} - */ - public static final AsciiString HOST = new AsciiString("host"); - /** - * {@code "if-match"} - */ - public static final AsciiString IF_MATCH = new AsciiString("if-match"); - /** - * {@code "if-modified-since"} - */ - public static final AsciiString IF_MODIFIED_SINCE = new AsciiString("if-modified-since"); - /** - * {@code "if-none-match"} - */ - public static final AsciiString IF_NONE_MATCH = new AsciiString("if-none-match"); - /** - * {@code "if-range"} - */ - public static final AsciiString IF_RANGE = new AsciiString("if-range"); - /** - * {@code "if-unmodified-since"} - */ - public static final AsciiString IF_UNMODIFIED_SINCE = new AsciiString("if-unmodified-since"); - /** - * {@code "last-modified"} - */ - public static final AsciiString LAST_MODIFIED = new AsciiString("last-modified"); - /** - * {@code "location"} - */ - public static final AsciiString LOCATION = new AsciiString("location"); - /** - * {@code "max-forwards"} - */ - public static final AsciiString MAX_FORWARDS = new AsciiString("max-forwards"); - /** - * {@code "origin"} - */ - public static final AsciiString ORIGIN = new AsciiString("origin"); - /** - * {@code "pragma"} - */ - public static final AsciiString PRAGMA = new AsciiString("pragma"); - /** - * {@code "proxy-authenticate"} - */ - public static final AsciiString PROXY_AUTHENTICATE = new AsciiString("proxy-authenticate"); - /** - * {@code "proxy-authorization"} - */ - public static final AsciiString PROXY_AUTHORIZATION = new AsciiString("proxy-authorization"); - /** - * {@code "range"} - */ - public static final AsciiString RANGE = new AsciiString("range"); - /** - * {@code "referer"} - */ - public static final AsciiString REFERER = new AsciiString("referer"); - /** - * {@code "retry-after"} - */ - public static final AsciiString RETRY_AFTER = new AsciiString("retry-after"); - /** - * {@code "sec-websocket-key1"} - */ - public static final AsciiString SEC_WEBSOCKET_KEY1 = new AsciiString("sec-websocket-key1"); - /** - * {@code "sec-websocket-key2"} - */ - public static final AsciiString SEC_WEBSOCKET_KEY2 = new AsciiString("sec-websocket-key2"); - /** - * {@code "sec-websocket-location"} - */ - public static final AsciiString SEC_WEBSOCKET_LOCATION = new AsciiString("sec-websocket-location"); - /** - * {@code "sec-websocket-origin"} - */ - public static final AsciiString SEC_WEBSOCKET_ORIGIN = new AsciiString("sec-websocket-origin"); - /** - * {@code "sec-websocket-protocol"} - */ - public static final AsciiString SEC_WEBSOCKET_PROTOCOL = new AsciiString("sec-websocket-protocol"); - /** - * {@code "sec-websocket-version"} - */ - public static final AsciiString SEC_WEBSOCKET_VERSION = new AsciiString("sec-websocket-version"); - /** - * {@code "sec-websocket-key"} - */ - public static final AsciiString SEC_WEBSOCKET_KEY = new AsciiString("sec-websocket-key"); - /** - * {@code "sec-websocket-accept"} - */ - public static final AsciiString SEC_WEBSOCKET_ACCEPT = new AsciiString("sec-websocket-accept"); - /** - * {@code "sec-websocket-protocol"} - */ - public static final AsciiString SEC_WEBSOCKET_EXTENSIONS = new AsciiString("sec-websocket-extensions"); - /** - * {@code "server"} - */ - public static final AsciiString SERVER = new AsciiString("server"); - /** - * {@code "set-cookie"} - */ - public static final AsciiString SET_COOKIE = new AsciiString("set-cookie"); - /** - * {@code "set-cookie2"} - */ - public static final AsciiString SET_COOKIE2 = new AsciiString("set-cookie2"); - /** - * {@code "te"} - */ - public static final AsciiString TE = new AsciiString("te"); - /** - * {@code "trailer"} - */ - public static final AsciiString TRAILER = new AsciiString("trailer"); - /** - * {@code "transfer-encoding"} - */ - public static final AsciiString TRANSFER_ENCODING = new AsciiString("transfer-encoding"); - /** - * {@code "upgrade"} - */ - public static final AsciiString UPGRADE = new AsciiString("upgrade"); - /** - * {@code "user-agent"} - */ - public static final AsciiString USER_AGENT = new AsciiString("user-agent"); - /** - * {@code "vary"} - */ - public static final AsciiString VARY = new AsciiString("vary"); - /** - * {@code "via"} - */ - public static final AsciiString VIA = new AsciiString("via"); - /** - * {@code "warning"} - */ - public static final AsciiString WARNING = new AsciiString("warning"); - /** - * {@code "websocket-location"} - */ - public static final AsciiString WEBSOCKET_LOCATION = new AsciiString("websocket-location"); - /** - * {@code "websocket-origin"} - */ - public static final AsciiString WEBSOCKET_ORIGIN = new AsciiString("websocket-origin"); - /** - * {@code "websocket-protocol"} - */ - public static final AsciiString WEBSOCKET_PROTOCOL = new AsciiString("websocket-protocol"); - /** - * {@code "www-authenticate"} - */ - public static final AsciiString WWW_AUTHENTICATE = new AsciiString("www-authenticate"); - /** - * {@code "keep-alive"} - * @deprecated use {@link #CONNECTION} - */ - @Deprecated - public static final AsciiString KEEP_ALIVE = new AsciiString("keep-alive"); - /** - * {@code "proxy-connection"} - * @deprecated use {@link #CONNECTION} - */ - @Deprecated - public static final AsciiString PROXY_CONNECTION = new AsciiString("proxy-connection"); - - private Names() { - } - } - - /** - * Standard HTTP header values. - */ - final class Values { - /** - * {@code "application/x-www-form-urlencoded"} - */ - public static final AsciiString APPLICATION_X_WWW_FORM_URLENCODED = - new AsciiString("application/x-www-form-urlencoded"); - /** - * {@code "application/octet-stream"} - */ - public static final AsciiString APPLICATION_OCTET_STREAM = new AsciiString("application/octet-stream"); - /** - * {@code "text/plain"} - */ - public static final AsciiString TEXT_PLAIN = new AsciiString("text/plain"); - /** - * {@code "base64"} - */ - public static final AsciiString BASE64 = new AsciiString("base64"); - /** - * {@code "binary"} - */ - public static final AsciiString BINARY = new AsciiString("binary"); - /** - * {@code "boundary"} - */ - public static final AsciiString BOUNDARY = new AsciiString("boundary"); - /** - * {@code "bytes"} - */ - public static final AsciiString BYTES = new AsciiString("bytes"); - /** - * {@code "charset"} - */ - public static final AsciiString CHARSET = new AsciiString("charset"); - /** - * {@code "chunked"} - */ - public static final AsciiString CHUNKED = new AsciiString("chunked"); - /** - * {@code "close"} - */ - public static final AsciiString CLOSE = new AsciiString("close"); - /** - * {@code "compress"} - */ - public static final AsciiString COMPRESS = new AsciiString("compress"); - /** - * {@code "100-continue"} - */ - public static final AsciiString CONTINUE = new AsciiString("100-continue"); - /** - * {@code "deflate"} - */ - public static final AsciiString DEFLATE = new AsciiString("deflate"); - /** - * {@code "x-deflate"} - */ - public static final AsciiString XDEFLATE = new AsciiString("deflate"); - /** - * {@code "gzip"} - */ - public static final AsciiString GZIP = new AsciiString("gzip"); - /** - * {@code "x-gzip"} - */ - public static final AsciiString XGZIP = new AsciiString("x-gzip"); - /** - * {@code "identity"} - */ - public static final AsciiString IDENTITY = new AsciiString("identity"); - /** - * {@code "keep-alive"} - */ - public static final AsciiString KEEP_ALIVE = new AsciiString("keep-alive"); - /** - * {@code "max-age"} - */ - public static final AsciiString MAX_AGE = new AsciiString("max-age"); - /** - * {@code "max-stale"} - */ - public static final AsciiString MAX_STALE = new AsciiString("max-stale"); - /** - * {@code "min-fresh"} - */ - public static final AsciiString MIN_FRESH = new AsciiString("min-fresh"); - /** - * {@code "multipart/form-data"} - */ - public static final AsciiString MULTIPART_FORM_DATA = new AsciiString("multipart/form-data"); - /** - * {@code "multipart/mixed"} - */ - public static final AsciiString MULTIPART_MIXED = new AsciiString("multipart/mixed"); - /** - * {@code "must-revalidate"} - */ - public static final AsciiString MUST_REVALIDATE = new AsciiString("must-revalidate"); - /** - * {@code "no-cache"} - */ - public static final AsciiString NO_CACHE = new AsciiString("no-cache"); - /** - * {@code "no-store"} - */ - public static final AsciiString NO_STORE = new AsciiString("no-store"); - /** - * {@code "no-transform"} - */ - public static final AsciiString NO_TRANSFORM = new AsciiString("no-transform"); - /** - * {@code "none"} - */ - public static final AsciiString NONE = new AsciiString("none"); - /** - * {@code "only-if-cached"} - */ - public static final AsciiString ONLY_IF_CACHED = new AsciiString("only-if-cached"); - /** - * {@code "private"} - */ - public static final AsciiString PRIVATE = new AsciiString("private"); - /** - * {@code "proxy-revalidate"} - */ - public static final AsciiString PROXY_REVALIDATE = new AsciiString("proxy-revalidate"); - /** - * {@code "public"} - */ - public static final AsciiString PUBLIC = new AsciiString("public"); - /** - * {@code "quoted-printable"} - */ - public static final AsciiString QUOTED_PRINTABLE = new AsciiString("quoted-printable"); - /** - * {@code "s-maxage"} - */ - public static final AsciiString S_MAXAGE = new AsciiString("s-maxage"); - /** - * {@code "trailers"} - */ - public static final AsciiString TRAILERS = new AsciiString("trailers"); - /** - * {@code "Upgrade"} - */ - public static final AsciiString UPGRADE = new AsciiString("Upgrade"); - /** - * {@code "WebSocket"} - */ - public static final AsciiString WEBSOCKET = new AsciiString("WebSocket"); - /** - * {@code "name"} - * See {@link Names#CONTENT_DISPOSITION} - */ - public static final AsciiString NAME = new AsciiString("name"); - /** - * {@code "filename"} - * See {@link Names#CONTENT_DISPOSITION} - */ - public static final AsciiString FILENAME = new AsciiString("filename"); - /** - * {@code "form-data"} - * See {@link Names#CONTENT_DISPOSITION} - */ - public static final AsciiString FORM_DATA = new AsciiString("form-data"); - /** - * {@code "attachment"} - * See {@link Names#CONTENT_DISPOSITION} - */ - public static final AsciiString ATTACHMENT = new AsciiString("attachment"); - /** - * {@code "file"} - * See {@link Names#CONTENT_DISPOSITION} - */ - public static final AsciiString FILE = new AsciiString("file"); - - private Values() { - } - } - @Override HttpHeaders add(CharSequence name, CharSequence value); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java index 97039f347f..81baaf7d12 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java @@ -58,7 +58,7 @@ public class HttpObjectAggregator HttpVersion.HTTP_1_1, HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, Unpooled.EMPTY_BUFFER); static { - TOO_LARGE.headers().setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + TOO_LARGE.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 0); } /** @@ -142,7 +142,7 @@ public class HttpObjectAggregator protected void finishAggregation(FullHttpMessage aggregated) throws Exception { // Set the 'Content-Length' header. aggregated.headers().set( - HttpHeaders.Names.CONTENT_LENGTH, + HttpHeaderNames.CONTENT_LENGTH, String.valueOf(aggregated.content().readableBytes())); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java index 4f7639c998..fb551eb934 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java @@ -20,7 +20,6 @@ import io.netty.buffer.ByteBufProcessor; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPipeline; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.DecoderResult; import io.netty.handler.codec.ReplayingDecoder; import io.netty.handler.codec.TooLongFrameException; @@ -422,7 +421,7 @@ public abstract class HttpObjectDecoder extends ReplayingDecoder { // - https://github.com/netty/netty/issues/222 if (code >= 100 && code < 200) { // One exception: Hixie 76 websocket handshake response - return !(code == 101 && !res.headers().contains(HttpHeaders.Names.SEC_WEBSOCKET_ACCEPT)); + return !(code == 101 && !res.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT)); } switch (code) { @@ -571,9 +570,9 @@ public abstract class HttpObjectDecoder extends ReplayingDecoder { } else { splitHeader(line); CharSequence headerName = name; - if (!AsciiString.equalsIgnoreCase(headerName, HttpHeaders.Names.CONTENT_LENGTH) && - !AsciiString.equalsIgnoreCase(headerName, HttpHeaders.Names.TRANSFER_ENCODING) && - !AsciiString.equalsIgnoreCase(headerName, HttpHeaders.Names.TRAILER)) { + if (!HttpHeaderNames.CONTENT_LENGTH.equalsIgnoreCase(headerName) && + !HttpHeaderNames.TRANSFER_ENCODING.equalsIgnoreCase(headerName) && + !HttpHeaderNames.TRAILER.equalsIgnoreCase(headerName)) { trailer.trailingHeaders().add(headerName, value); } lastHeader = name; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerUpgradeHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerUpgradeHandler.java index fad6fcee7a..7ed7c7b3be 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerUpgradeHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerUpgradeHandler.java @@ -14,11 +14,6 @@ */ package io.netty.handler.codec.http; -import static io.netty.handler.codec.http.HttpHeaders.Names.CONNECTION; -import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_LENGTH; -import static io.netty.handler.codec.http.HttpHeaders.Names.UPGRADE; -import static io.netty.handler.codec.http.HttpResponseStatus.SWITCHING_PROTOCOLS; -import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; @@ -35,6 +30,9 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; +import static io.netty.handler.codec.http.HttpResponseStatus.*; +import static io.netty.handler.codec.http.HttpVersion.*; + /** * A server-side handler that receives HTTP requests and optionally performs a protocol switch if * the requested protocol is supported. Once an upgrade is performed, this handler removes itself @@ -58,13 +56,13 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { public interface UpgradeCodec { /** * Returns the name of the protocol supported by this codec, as indicated by the - * {@link HttpHeaders.Names#UPGRADE} header. + * {@link HttpHeaderNames#UPGRADE} header. */ String protocol(); /** * Gets all protocol-specific headers required by this protocol for a successful upgrade. - * Any supplied header will be required to appear in the {@link HttpHeaders.Names#CONNECTION} header as well. + * Any supplied header will be required to appear in the {@link HttpHeaderNames#CONNECTION} header as well. */ Collection requiredUpgradeHeaders(); @@ -82,7 +80,7 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { * @param upgradeRequest the request that triggered the upgrade to this protocol. The * upgraded protocol is responsible for sending the response. * @param upgradeResponse a 101 Switching Protocols response that is populated with the - * {@link HttpHeaders.Names#CONNECTION} and {@link HttpHeaders.Names#UPGRADE} headers. + * {@link HttpHeaderNames#CONNECTION} and {@link HttpHeaderNames#UPGRADE} headers. * The protocol is required to send this before sending any other frames back to the client. * The headers may be augmented as necessary by the protocol before sending. */ @@ -237,11 +235,11 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { * Determines whether or not the message is an HTTP upgrade request. */ private static boolean isUpgradeRequest(HttpObject msg) { - return msg instanceof HttpRequest && ((HttpRequest) msg).headers().get(UPGRADE) != null; + return msg instanceof HttpRequest && ((HttpRequest) msg).headers().get(HttpHeaderNames.UPGRADE) != null; } /** - * Attempts to upgrade to the protocol(s) identified by the {@link HttpHeaders.Names#UPGRADE} header (if provided + * Attempts to upgrade to the protocol(s) identified by the {@link HttpHeaderNames#UPGRADE} header (if provided * in the request). * * @param ctx the context for this handler. @@ -250,7 +248,7 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { */ private boolean upgrade(final ChannelHandlerContext ctx, final FullHttpRequest request) { // Select the best protocol based on those requested in the UPGRADE header. - CharSequence upgradeHeader = request.headers().get(UPGRADE); + CharSequence upgradeHeader = request.headers().get(HttpHeaderNames.UPGRADE); final UpgradeCodec upgradeCodec = selectUpgradeCodec(upgradeHeader); if (upgradeCodec == null) { // None of the requested protocols are supported, don't upgrade. @@ -258,7 +256,7 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { } // Make sure the CONNECTION header is present. - CharSequence connectionHeader = request.headers().get(CONNECTION); + CharSequence connectionHeader = request.headers().get(HttpHeaderNames.CONNECTION); if (connectionHeader == null) { return false; } @@ -266,7 +264,7 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { // Make sure the CONNECTION header contains UPGRADE as well as all protocol-specific headers. Collection requiredHeaders = upgradeCodec.requiredUpgradeHeaders(); Set values = splitHeader(connectionHeader); - if (!values.contains(UPGRADE) || !values.containsAll(requiredHeaders)) { + if (!values.contains(HttpHeaderNames.UPGRADE) || !values.containsAll(requiredHeaders)) { return false; } @@ -336,9 +334,9 @@ public class HttpServerUpgradeHandler extends HttpObjectAggregator { */ private static FullHttpResponse createUpgradeResponse(UpgradeCodec upgradeCodec) { DefaultFullHttpResponse res = new DefaultFullHttpResponse(HTTP_1_1, SWITCHING_PROTOCOLS); - res.headers().add(CONNECTION, UPGRADE); - res.headers().add(UPGRADE, upgradeCodec.protocol()); - res.headers().add(CONTENT_LENGTH, "0"); + res.headers().add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE); + res.headers().add(HttpHeaderNames.UPGRADE, upgradeCodec.protocol()); + res.headers().add(HttpHeaderNames.CONTENT_LENGTH, "0"); return res; } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsConfig.java b/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsConfig.java index 2a271dffad..c54ef9e203 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsConfig.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsConfig.java @@ -18,7 +18,7 @@ package io.netty.handler.codec.http.cors; import io.netty.handler.codec.http.DefaultHttpHeaders; import io.netty.handler.codec.http.EmptyHttpHeaders; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpMethod; import io.netty.util.internal.StringUtil; @@ -511,8 +511,8 @@ public final class CorsConfig { */ public CorsConfig build() { if (preflightHeaders.isEmpty() && !noPreflightHeaders) { - preflightHeaders.put(Names.DATE, new DateValueGenerator()); - preflightHeaders.put(Names.CONTENT_LENGTH, new ConstantValueGenerator("0")); + preflightHeaders.put(HttpHeaderNames.DATE, new DateValueGenerator()); + preflightHeaders.put(HttpHeaderNames.CONTENT_LENGTH, new ConstantValueGenerator("0")); } return new CorsConfig(this); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java index 5dbbe56103..d9728969b5 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/cors/CorsHandler.java @@ -20,16 +20,16 @@ import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; import static io.netty.handler.codec.http.HttpMethod.*; import static io.netty.handler.codec.http.HttpResponseStatus.*; -import static io.netty.util.ReferenceCountUtil.release; +import static io.netty.util.ReferenceCountUtil.*; /** * Handles Cross Origin Resource Sharing (CORS) requests. @@ -88,7 +88,7 @@ public class CorsHandler extends ChannelHandlerAdapter { } private boolean setOrigin(final HttpResponse response) { - final CharSequence origin = request.headers().get(ORIGIN); + final CharSequence origin = request.headers().get(HttpHeaderNames.ORIGIN); if (origin != null) { if ("null".equals(origin) && config.isNullOriginAllowed()) { setAnyOrigin(response); @@ -118,7 +118,7 @@ public class CorsHandler extends ChannelHandlerAdapter { return true; } - final CharSequence origin = request.headers().get(ORIGIN); + final CharSequence origin = request.headers().get(HttpHeaderNames.ORIGIN); if (origin == null) { // Not a CORS request so we cannot validate it. It may be a non CORS request. return true; @@ -132,11 +132,11 @@ public class CorsHandler extends ChannelHandlerAdapter { } private void echoRequestOrigin(final HttpResponse response) { - setOrigin(response, request.headers().get(ORIGIN)); + setOrigin(response, request.headers().get(HttpHeaderNames.ORIGIN)); } private static void setVaryHeader(final HttpResponse response) { - response.headers().set(VARY, ORIGIN); + response.headers().set(HttpHeaderNames.VARY, HttpHeaderNames.ORIGIN); } private static void setAnyOrigin(final HttpResponse response) { @@ -144,38 +144,38 @@ public class CorsHandler extends ChannelHandlerAdapter { } private static void setOrigin(final HttpResponse response, final CharSequence origin) { - response.headers().set(ACCESS_CONTROL_ALLOW_ORIGIN, origin); + response.headers().set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_ORIGIN, origin); } private void setAllowCredentials(final HttpResponse response) { if (config.isCredentialsAllowed()) { - response.headers().set(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + response.headers().set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); } } private static boolean isPreflightRequest(final HttpRequest request) { final HttpHeaders headers = request.headers(); return request.method().equals(OPTIONS) && - headers.contains(ORIGIN) && - headers.contains(ACCESS_CONTROL_REQUEST_METHOD); + headers.contains(HttpHeaderNames.ORIGIN) && + headers.contains(HttpHeaderNames.ACCESS_CONTROL_REQUEST_METHOD); } private void setExposeHeaders(final HttpResponse response) { if (!config.exposedHeaders().isEmpty()) { - response.headers().set(ACCESS_CONTROL_EXPOSE_HEADERS, config.exposedHeaders()); + response.headers().set(HttpHeaderNames.ACCESS_CONTROL_EXPOSE_HEADERS, config.exposedHeaders()); } } private void setAllowMethods(final HttpResponse response) { - response.headers().setObject(ACCESS_CONTROL_ALLOW_METHODS, config.allowedRequestMethods()); + response.headers().setObject(HttpHeaderNames.ACCESS_CONTROL_ALLOW_METHODS, config.allowedRequestMethods()); } private void setAllowHeaders(final HttpResponse response) { - response.headers().set(ACCESS_CONTROL_ALLOW_HEADERS, config.allowedRequestHeaders()); + response.headers().set(HttpHeaderNames.ACCESS_CONTROL_ALLOW_HEADERS, config.allowedRequestHeaders()); } private void setMaxAge(final HttpResponse response) { - response.headers().setLong(ACCESS_CONTROL_MAX_AGE, config.maxAge()); + response.headers().setLong(HttpHeaderNames.ACCESS_CONTROL_MAX_AGE, config.maxAge()); } @Override diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java index c674272932..5158702d05 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/DiskFileUpload.java @@ -17,7 +17,8 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelException; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import java.io.File; import java.io.IOException; @@ -132,12 +133,12 @@ public class DiskFileUpload extends AbstractDiskHttpData implements FileUpload { // Should not occur. } - return HttpPostBodyUtil.CONTENT_DISPOSITION + ": " + - HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME + "=\"" + getName() + - "\"; " + HttpPostBodyUtil.FILENAME + "=\"" + filename + "\"\r\n" + - HttpHeaders.Names.CONTENT_TYPE + ": " + contentType + - (getCharset() != null? "; " + HttpHeaders.Values.CHARSET + '=' + getCharset() + "\r\n" : "\r\n") + - HttpHeaders.Names.CONTENT_LENGTH + ": " + length() + "\r\n" + + return HttpHeaderNames.CONTENT_DISPOSITION + ": " + + HttpHeaderValues.FORM_DATA + "; " + HttpHeaderValues.NAME + "=\"" + getName() + + "\"; " + HttpHeaderValues.FILENAME + "=\"" + filename + "\"\r\n" + + HttpHeaderNames.CONTENT_TYPE + ": " + contentType + + (getCharset() != null? "; " + HttpHeaderValues.CHARSET + '=' + getCharset() + "\r\n" : "\r\n") + + HttpHeaderNames.CONTENT_LENGTH + ": " + length() + "\r\n" + "Completed: " + isCompleted() + "\r\nIsInMemory: " + isInMemory() + "\r\nRealFile: " + (file != null ? file.getAbsolutePath() : "null") + " DefaultDeleteAfter: " + diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostBodyUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostBodyUtil.java index 169b2d872c..982df2e349 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostBodyUtil.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostBodyUtil.java @@ -16,10 +16,7 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; -import io.netty.handler.codec.http.HttpHeaders; -import io.netty.util.CharsetUtil; - -import java.nio.charset.Charset; +import io.netty.handler.codec.http.HttpHeaderValues; /** * Shared Static object between HttpMessageDecoder, HttpPostRequestDecoder and HttpPostRequestEncoder @@ -27,54 +24,16 @@ import java.nio.charset.Charset; final class HttpPostBodyUtil { public static final int chunkSize = 8096; - /** - * HTTP content disposition header name. - */ - public static final String CONTENT_DISPOSITION = HttpHeaders.Names.CONTENT_DISPOSITION.toString(); - - public static final String NAME = HttpHeaders.Values.NAME.toString(); - - public static final String FILENAME = HttpHeaders.Values.FILENAME.toString(); - - /** - * Content-disposition value for form data. - */ - public static final String FORM_DATA = HttpHeaders.Values.FORM_DATA.toString(); - - /** - * Content-disposition value for file attachment. - */ - public static final String ATTACHMENT = HttpHeaders.Values.ATTACHMENT.toString(); - - /** - * Content-disposition value for file attachment. - */ - public static final String FILE = HttpHeaders.Values.FILE.toString(); - - /** - * HTTP content type body attribute for multiple uploads. - */ - public static final String MULTIPART_MIXED = HttpHeaders.Values.MULTIPART_MIXED.toString(); - - /** - * Charset for 8BIT - */ - public static final Charset ISO_8859_1 = CharsetUtil.ISO_8859_1; - - /** - * Charset for 7BIT - */ - public static final Charset US_ASCII = CharsetUtil.US_ASCII; /** * Default Content-Type in binary form */ - public static final String DEFAULT_BINARY_CONTENT_TYPE = HttpHeaders.Values.APPLICATION_OCTET_STREAM.toString(); + public static final String DEFAULT_BINARY_CONTENT_TYPE = HttpHeaderValues.APPLICATION_OCTET_STREAM.toString(); /** * Default Content-Type in Text form */ - public static final String DEFAULT_TEXT_CONTENT_TYPE = HttpHeaders.Values.TEXT_PLAIN.toString(); + public static final String DEFAULT_TEXT_CONTENT_TYPE = HttpHeaderValues.TEXT_PLAIN.toString(); /** * Allowed mechanism for multipart diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder.java index 4f126ff363..91959ff7d0 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder.java @@ -18,7 +18,8 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; import io.netty.handler.codec.http.HttpConstants; import io.netty.handler.codec.http.HttpContent; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.LastHttpContent; import io.netty.handler.codec.http.multipart.HttpPostBodyUtil.SeekAheadNoBackArrayException; @@ -28,6 +29,7 @@ import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.EndOfDataDec import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException; import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.MultiPartStatus; import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.NotEnoughDataDecoderException; +import io.netty.util.CharsetUtil; import io.netty.util.internal.StringUtil; import java.io.IOException; @@ -181,7 +183,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest this.factory = factory; // Fill default values - setMultipart(this.request.headers().getAndConvert(HttpHeaders.Names.CONTENT_TYPE)); + setMultipart(this.request.headers().getAndConvert(HttpHeaderNames.CONTENT_TYPE)); if (request instanceof HttpContent) { // Offer automatically if the given request is als type of HttpContent // See #1089 @@ -489,7 +491,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest case FIELD: { // Now get value according to Content-Type and Charset Charset localCharset = null; - Attribute charsetAttribute = currentFieldAttributes.get(HttpHeaders.Values.CHARSET); + Attribute charsetAttribute = currentFieldAttributes.get(HttpHeaderValues.CHARSET); if (charsetAttribute != null) { try { localCharset = Charset.forName(charsetAttribute.getValue()); @@ -497,7 +499,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest throw new ErrorDataDecoderException(e); } } - Attribute nameAttribute = currentFieldAttributes.get(HttpPostBodyUtil.NAME); + Attribute nameAttribute = currentFieldAttributes.get(HttpHeaderValues.NAME); if (currentAttribute == null) { try { currentAttribute = factory.createAttribute(request, @@ -661,13 +663,13 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest return null; } String[] contents = splitMultipartHeader(newline); - if (contents[0].equalsIgnoreCase(HttpPostBodyUtil.CONTENT_DISPOSITION)) { + if (HttpHeaderNames.CONTENT_DISPOSITION.equalsIgnoreCase(contents[0])) { boolean checkSecondArg; if (currentStatus == MultiPartStatus.DISPOSITION) { - checkSecondArg = contents[1].equalsIgnoreCase(HttpPostBodyUtil.FORM_DATA); + checkSecondArg = HttpHeaderValues.FORM_DATA.equalsIgnoreCase(contents[1]); } else { - checkSecondArg = contents[1].equalsIgnoreCase(HttpPostBodyUtil.ATTACHMENT) - || contents[1].equalsIgnoreCase(HttpPostBodyUtil.FILE); + checkSecondArg = HttpHeaderValues.ATTACHMENT.equalsIgnoreCase(contents[1]) + || HttpHeaderValues.FILE.equalsIgnoreCase(contents[1]); } if (checkSecondArg) { // read next values and store them in the map as Attribute @@ -679,7 +681,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest String value = values[1]; // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html - if (HttpPostBodyUtil.FILENAME.equals(name)) { + if (HttpHeaderValues.FILENAME.contentEquals(name)) { // filename value is quoted string so strip them value = value.substring(1, value.length() - 1); } else { @@ -695,31 +697,31 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest currentFieldAttributes.put(attribute.getName(), attribute); } } - } else if (contents[0].equalsIgnoreCase(HttpHeaders.Names.CONTENT_TRANSFER_ENCODING.toString())) { + } else if (HttpHeaderNames.CONTENT_TRANSFER_ENCODING.equalsIgnoreCase(contents[0])) { Attribute attribute; try { - attribute = factory.createAttribute(request, HttpHeaders.Names.CONTENT_TRANSFER_ENCODING.toString(), + attribute = factory.createAttribute(request, HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString(), cleanString(contents[1])); } catch (NullPointerException e) { throw new ErrorDataDecoderException(e); } catch (IllegalArgumentException e) { throw new ErrorDataDecoderException(e); } - currentFieldAttributes.put(HttpHeaders.Names.CONTENT_TRANSFER_ENCODING.toString(), attribute); - } else if (contents[0].equalsIgnoreCase(HttpHeaders.Names.CONTENT_LENGTH.toString())) { + currentFieldAttributes.put(HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString(), attribute); + } else if (HttpHeaderNames.CONTENT_LENGTH.equalsIgnoreCase(contents[0])) { Attribute attribute; try { - attribute = factory.createAttribute(request, HttpHeaders.Names.CONTENT_LENGTH.toString(), + attribute = factory.createAttribute(request, HttpHeaderNames.CONTENT_LENGTH.toString(), cleanString(contents[1])); } catch (NullPointerException e) { throw new ErrorDataDecoderException(e); } catch (IllegalArgumentException e) { throw new ErrorDataDecoderException(e); } - currentFieldAttributes.put(HttpHeaders.Names.CONTENT_LENGTH.toString(), attribute); - } else if (contents[0].equalsIgnoreCase(HttpHeaders.Names.CONTENT_TYPE.toString())) { + currentFieldAttributes.put(HttpHeaderNames.CONTENT_LENGTH.toString(), attribute); + } else if (HttpHeaderNames.CONTENT_TYPE.equalsIgnoreCase(contents[0])) { // Take care of possible "multipart/mixed" - if (contents[1].equalsIgnoreCase(HttpPostBodyUtil.MULTIPART_MIXED)) { + if (HttpHeaderValues.MULTIPART_MIXED.equalsIgnoreCase(contents[1])) { if (currentStatus == MultiPartStatus.DISPOSITION) { String values = StringUtil.substringAfter(contents[2], '='); multipartMixedBoundary = "--" + values; @@ -730,18 +732,18 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest } } else { for (int i = 1; i < contents.length; i++) { - if (contents[i].toLowerCase().startsWith(HttpHeaders.Values.CHARSET.toString())) { + if (contents[i].toLowerCase().startsWith(HttpHeaderValues.CHARSET.toString())) { String values = StringUtil.substringAfter(contents[i], '='); Attribute attribute; try { - attribute = factory.createAttribute(request, HttpHeaders.Values.CHARSET.toString(), + attribute = factory.createAttribute(request, HttpHeaderValues.CHARSET.toString(), cleanString(values)); } catch (NullPointerException e) { throw new ErrorDataDecoderException(e); } catch (IllegalArgumentException e) { throw new ErrorDataDecoderException(e); } - currentFieldAttributes.put(HttpHeaders.Values.CHARSET.toString(), attribute); + currentFieldAttributes.put(HttpHeaderValues.CHARSET.toString(), attribute); } else { Attribute attribute; try { @@ -761,7 +763,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest } } // Is it a FileUpload - Attribute filenameAttribute = currentFieldAttributes.get(HttpPostBodyUtil.FILENAME); + Attribute filenameAttribute = currentFieldAttributes.get(HttpHeaderValues.FILENAME); if (currentStatus == MultiPartStatus.DISPOSITION) { if (filenameAttribute != null) { // FileUpload @@ -798,7 +800,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest protected InterfaceHttpData getFileUpload(String delimiter) { // eventually restart from existing FileUpload // Now get value according to Content-Type and Charset - Attribute encoding = currentFieldAttributes.get(HttpHeaders.Names.CONTENT_TRANSFER_ENCODING.toString()); + Attribute encoding = currentFieldAttributes.get(HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString()); Charset localCharset = charset; // Default TransferEncodingMechanism mechanism = TransferEncodingMechanism.BIT7; @@ -810,9 +812,9 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest throw new ErrorDataDecoderException(e); } if (code.equals(HttpPostBodyUtil.TransferEncodingMechanism.BIT7.value())) { - localCharset = HttpPostBodyUtil.US_ASCII; + localCharset = CharsetUtil.US_ASCII; } else if (code.equals(HttpPostBodyUtil.TransferEncodingMechanism.BIT8.value())) { - localCharset = HttpPostBodyUtil.ISO_8859_1; + localCharset = CharsetUtil.ISO_8859_1; mechanism = TransferEncodingMechanism.BIT8; } else if (code.equals(HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value())) { // no real charset, so let the default @@ -821,7 +823,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest throw new ErrorDataDecoderException("TransferEncoding Unknown: " + code); } } - Attribute charsetAttribute = currentFieldAttributes.get(HttpHeaders.Values.CHARSET.toString()); + Attribute charsetAttribute = currentFieldAttributes.get(HttpHeaderValues.CHARSET.toString()); if (charsetAttribute != null) { try { localCharset = Charset.forName(charsetAttribute.getValue()); @@ -830,13 +832,13 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest } } if (currentFileUpload == null) { - Attribute filenameAttribute = currentFieldAttributes.get(HttpPostBodyUtil.FILENAME); - Attribute nameAttribute = currentFieldAttributes.get(HttpPostBodyUtil.NAME); - Attribute contentTypeAttribute = currentFieldAttributes.get(HttpHeaders.Names.CONTENT_TYPE); + Attribute filenameAttribute = currentFieldAttributes.get(HttpHeaderValues.FILENAME); + Attribute nameAttribute = currentFieldAttributes.get(HttpHeaderValues.NAME); + Attribute contentTypeAttribute = currentFieldAttributes.get(HttpHeaderNames.CONTENT_TYPE); if (contentTypeAttribute == null) { throw new ErrorDataDecoderException("Content-Type is absent but required"); } - Attribute lengthAttribute = currentFieldAttributes.get(HttpHeaders.Names.CONTENT_LENGTH); + Attribute lengthAttribute = currentFieldAttributes.get(HttpHeaderNames.CONTENT_LENGTH); long size; try { size = lengthAttribute != null ? Long.parseLong(lengthAttribute.getValue()) : 0L; @@ -932,11 +934,11 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest * Mixed mode */ private void cleanMixedAttributes() { - currentFieldAttributes.remove(HttpHeaders.Values.CHARSET); - currentFieldAttributes.remove(HttpHeaders.Names.CONTENT_LENGTH); - currentFieldAttributes.remove(HttpHeaders.Names.CONTENT_TRANSFER_ENCODING); - currentFieldAttributes.remove(HttpHeaders.Names.CONTENT_TYPE); - currentFieldAttributes.remove(HttpPostBodyUtil.FILENAME); + currentFieldAttributes.remove(HttpHeaderValues.CHARSET); + currentFieldAttributes.remove(HttpHeaderNames.CONTENT_LENGTH); + currentFieldAttributes.remove(HttpHeaderNames.CONTENT_TRANSFER_ENCODING); + currentFieldAttributes.remove(HttpHeaderNames.CONTENT_TYPE); + currentFieldAttributes.remove(HttpHeaderValues.FILENAME); } /** diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java index 0c1aa458ca..21dd84b6a6 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.java @@ -18,7 +18,8 @@ package io.netty.handler.codec.http.multipart; import io.netty.handler.codec.DecoderException; import io.netty.handler.codec.http.HttpConstants; import io.netty.handler.codec.http.HttpContent; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpRequest; import io.netty.util.internal.StringUtil; @@ -139,8 +140,8 @@ public class HttpPostRequestDecoder implements InterfaceHttpPostRequestDecoder { * @return True if the request is a Multipart request */ public static boolean isMultipart(HttpRequest request) { - if (request.headers().contains(HttpHeaders.Names.CONTENT_TYPE)) { - return getMultipartDataBoundary(request.headers().getAndConvert(HttpHeaders.Names.CONTENT_TYPE)) != null; + if (request.headers().contains(HttpHeaderNames.CONTENT_TYPE)) { + return getMultipartDataBoundary(request.headers().getAndConvert(HttpHeaderNames.CONTENT_TYPE)) != null; } else { return false; } @@ -155,15 +156,15 @@ public class HttpPostRequestDecoder implements InterfaceHttpPostRequestDecoder { // Check if Post using "multipart/form-data; boundary=--89421926422648 [; charset=xxx]" String[] headerContentType = splitHeaderContentType(contentType); if (headerContentType[0].toLowerCase().startsWith( - HttpHeaders.Values.MULTIPART_FORM_DATA.toString())) { + HttpHeaderValues.MULTIPART_FORM_DATA.toString())) { int mrank; int crank; if (headerContentType[1].toLowerCase().startsWith( - HttpHeaders.Values.BOUNDARY.toString())) { + HttpHeaderValues.BOUNDARY.toString())) { mrank = 1; crank = 2; } else if (headerContentType[2].toLowerCase().startsWith( - HttpHeaders.Values.BOUNDARY.toString())) { + HttpHeaderValues.BOUNDARY.toString())) { mrank = 2; crank = 1; } else { @@ -181,7 +182,7 @@ public class HttpPostRequestDecoder implements InterfaceHttpPostRequestDecoder { } } if (headerContentType[crank].toLowerCase().startsWith( - HttpHeaders.Values.CHARSET.toString())) { + HttpHeaderValues.CHARSET.toString())) { String charset = StringUtil.substringAfter(headerContentType[crank], '='); if (charset != null) { return new String[] {"--" + boundary, charset}; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java index 74e6067467..88993216e7 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java @@ -16,9 +16,7 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.DecoderResult; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.DefaultHttpContent; @@ -26,7 +24,9 @@ import io.netty.handler.codec.http.EmptyHttpHeaders; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpConstants; import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; @@ -505,14 +505,14 @@ public class HttpPostRequestEncoder implements ChunkedInput { internal.addValue("--" + multipartDataBoundary + "\r\n"); // content-disposition: form-data; name="field1" Attribute attribute = (Attribute) data; - internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " + HttpPostBodyUtil.FORM_DATA + "; " - + HttpPostBodyUtil.NAME + "=\"" + attribute.getName() + "\"\r\n"); + internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.FORM_DATA + "; " + + HttpHeaderValues.NAME + "=\"" + attribute.getName() + "\"\r\n"); Charset localcharset = attribute.getCharset(); if (localcharset != null) { // Content-Type: text/plain; charset=charset - internal.addValue(HttpHeaders.Names.CONTENT_TYPE + ": " + + internal.addValue(HttpHeaderNames.CONTENT_TYPE + ": " + HttpPostBodyUtil.DEFAULT_TEXT_CONTENT_TYPE + "; " + - HttpHeaders.Values.CHARSET + '=' + HttpHeaderValues.CHARSET + '=' + localcharset + "\r\n"); } // CRLF between body header and data @@ -587,20 +587,20 @@ public class HttpPostRequestEncoder implements ChunkedInput { replacement.append(multipartDataBoundary); replacement.append("\r\n"); - replacement.append(HttpPostBodyUtil.CONTENT_DISPOSITION); + replacement.append(HttpHeaderNames.CONTENT_DISPOSITION); replacement.append(": "); - replacement.append(HttpPostBodyUtil.FORM_DATA); + replacement.append(HttpHeaderValues.FORM_DATA); replacement.append("; "); - replacement.append(HttpPostBodyUtil.NAME); + replacement.append(HttpHeaderValues.NAME); replacement.append("=\""); replacement.append(fileUpload.getName()); replacement.append("\"\r\n"); - replacement.append(HttpHeaders.Names.CONTENT_TYPE); + replacement.append(HttpHeaderNames.CONTENT_TYPE); replacement.append(": "); - replacement.append(HttpPostBodyUtil.MULTIPART_MIXED); + replacement.append(HttpHeaderValues.MULTIPART_MIXED); replacement.append("; "); - replacement.append(HttpHeaders.Values.BOUNDARY); + replacement.append(HttpHeaderValues.BOUNDARY); replacement.append('='); replacement.append(multipartMixedBoundary); replacement.append("\r\n\r\n"); @@ -609,11 +609,11 @@ public class HttpPostRequestEncoder implements ChunkedInput { replacement.append(multipartMixedBoundary); replacement.append("\r\n"); - replacement.append(HttpPostBodyUtil.CONTENT_DISPOSITION); + replacement.append(HttpHeaderNames.CONTENT_DISPOSITION); replacement.append(": "); - replacement.append(HttpPostBodyUtil.ATTACHMENT); + replacement.append(HttpHeaderValues.ATTACHMENT); replacement.append("; "); - replacement.append(HttpPostBodyUtil.FILENAME); + replacement.append(HttpHeaderValues.FILENAME); replacement.append("=\""); replacement.append(fileUpload.getFilename()); replacement.append("\"\r\n"); @@ -645,27 +645,27 @@ public class HttpPostRequestEncoder implements ChunkedInput { // Data to multipart list internal.addValue("--" + multipartMixedBoundary + "\r\n"); // Content-Disposition: attachment; filename="file1.txt" - internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " + HttpPostBodyUtil.ATTACHMENT + "; " - + HttpPostBodyUtil.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n"); + internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.ATTACHMENT + "; " + + HttpHeaderValues.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n"); } else { internal.addValue("--" + multipartDataBoundary + "\r\n"); // Content-Disposition: form-data; name="files"; // filename="file1.txt" - internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " + HttpPostBodyUtil.FORM_DATA + "; " - + HttpPostBodyUtil.NAME + "=\"" + fileUpload.getName() + "\"; " - + HttpPostBodyUtil.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n"); + internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.FORM_DATA + "; " + + HttpHeaderValues.NAME + "=\"" + fileUpload.getName() + "\"; " + + HttpHeaderValues.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n"); } // Content-Type: image/gif // Content-Type: text/plain; charset=ISO-8859-1 // Content-Transfer-Encoding: binary - internal.addValue(HttpHeaders.Names.CONTENT_TYPE + ": " + fileUpload.getContentType()); + internal.addValue(HttpHeaderNames.CONTENT_TYPE + ": " + fileUpload.getContentType()); String contentTransferEncoding = fileUpload.getContentTransferEncoding(); if (contentTransferEncoding != null && contentTransferEncoding.equals(HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value())) { - internal.addValue("\r\n" + HttpHeaders.Names.CONTENT_TRANSFER_ENCODING + ": " + internal.addValue("\r\n" + HttpHeaderNames.CONTENT_TRANSFER_ENCODING + ": " + HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value() + "\r\n\r\n"); } else if (fileUpload.getCharset() != null) { - internal.addValue("; " + HttpHeaders.Values.CHARSET + '=' + fileUpload.getCharset() + "\r\n\r\n"); + internal.addValue("; " + HttpHeaderValues.CHARSET + '=' + fileUpload.getCharset() + "\r\n\r\n"); } else { internal.addValue("\r\n\r\n"); } @@ -711,28 +711,28 @@ public class HttpPostRequestEncoder implements ChunkedInput { } HttpHeaders headers = request.headers(); - List contentTypes = headers.getAllAndConvert(HttpHeaders.Names.CONTENT_TYPE); - List transferEncoding = headers.getAll(HttpHeaders.Names.TRANSFER_ENCODING); + List contentTypes = headers.getAllAndConvert(HttpHeaderNames.CONTENT_TYPE); + List transferEncoding = headers.getAll(HttpHeaderNames.TRANSFER_ENCODING); if (contentTypes != null) { - headers.remove(HttpHeaders.Names.CONTENT_TYPE); + headers.remove(HttpHeaderNames.CONTENT_TYPE); for (String contentType : contentTypes) { // "multipart/form-data; boundary=--89421926422648" String lowercased = contentType.toLowerCase(); - if (lowercased.startsWith(HttpHeaders.Values.MULTIPART_FORM_DATA.toString()) || - lowercased.startsWith(HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED.toString())) { + if (lowercased.startsWith(HttpHeaderValues.MULTIPART_FORM_DATA.toString()) || + lowercased.startsWith(HttpHeaderValues.APPLICATION_X_WWW_FORM_URLENCODED.toString())) { // ignore } else { - headers.add(HttpHeaders.Names.CONTENT_TYPE, contentType); + headers.add(HttpHeaderNames.CONTENT_TYPE, contentType); } } } if (isMultipart) { - String value = HttpHeaders.Values.MULTIPART_FORM_DATA + "; " + HttpHeaders.Values.BOUNDARY + '=' + String value = HttpHeaderValues.MULTIPART_FORM_DATA + "; " + HttpHeaderValues.BOUNDARY + '=' + multipartDataBoundary; - headers.add(HttpHeaders.Names.CONTENT_TYPE, value); + headers.add(HttpHeaderNames.CONTENT_TYPE, value); } else { // Not multipart - headers.add(HttpHeaders.Names.CONTENT_TYPE, HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED); + headers.add(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_X_WWW_FORM_URLENCODED); } // Now consider size for chunk or not long realSize = globalBodySize; @@ -742,16 +742,16 @@ public class HttpPostRequestEncoder implements ChunkedInput { realSize -= 1; // last '&' removed iterator = multipartHttpDatas.listIterator(); } - headers.set(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(realSize)); + headers.set(HttpHeaderNames.CONTENT_LENGTH, String.valueOf(realSize)); if (realSize > HttpPostBodyUtil.chunkSize || isMultipart) { isChunked = true; if (transferEncoding != null) { - headers.remove(HttpHeaders.Names.TRANSFER_ENCODING); + headers.remove(HttpHeaderNames.TRANSFER_ENCODING); for (CharSequence v : transferEncoding) { - if (AsciiString.equalsIgnoreCase(v, HttpHeaders.Values.CHUNKED)) { + if (HttpHeaderValues.CHUNKED.equalsIgnoreCase(v)) { // ignore } else { - headers.add(HttpHeaders.Names.TRANSFER_ENCODING, v); + headers.add(HttpHeaderNames.TRANSFER_ENCODING, v); } } } @@ -1223,7 +1223,7 @@ public class HttpPostRequestEncoder implements ChunkedInput { DefaultFullHttpRequest copy = new DefaultFullHttpRequest( protocolVersion(), method(), uri(), copyContent ? content().copy() : - newContent == null ? Unpooled.buffer(0) : newContent); + newContent == null ? buffer(0) : newContent); copy.headers().set(headers()); copy.trailingHeaders().set(trailingHeaders()); return copy; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java index 6100629b3b..90f2faf1f1 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/MemoryFileUpload.java @@ -17,7 +17,8 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelException; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import java.io.IOException; import java.nio.charset.Charset; @@ -119,12 +120,12 @@ public class MemoryFileUpload extends AbstractMemoryHttpData implements FileUplo @Override public String toString() { - return HttpPostBodyUtil.CONTENT_DISPOSITION + ": " + - HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME + "=\"" + getName() + - "\"; " + HttpPostBodyUtil.FILENAME + "=\"" + filename + "\"\r\n" + - HttpHeaders.Names.CONTENT_TYPE + ": " + contentType + - (getCharset() != null? "; " + HttpHeaders.Values.CHARSET + '=' + getCharset() + "\r\n" : "\r\n") + - HttpHeaders.Names.CONTENT_LENGTH + ": " + length() + "\r\n" + + return HttpHeaderNames.CONTENT_DISPOSITION + ": " + + HttpHeaderValues.FORM_DATA + "; " + HttpHeaderValues.NAME + "=\"" + getName() + + "\"; " + HttpHeaderValues.FILENAME + "=\"" + filename + "\"\r\n" + + HttpHeaderNames.CONTENT_TYPE + ": " + contentType + + (getCharset() != null? "; " + HttpHeaderValues.CHARSET + '=' + getCharset() + "\r\n" : "\r\n") + + HttpHeaderNames.CONTENT_LENGTH + ": " + length() + "\r\n" + "Completed: " + isCompleted() + "\r\nIsInMemory: " + isInMemory(); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java index b3ccf300f3..1a96a368a5 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java @@ -25,6 +25,7 @@ import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpClientCodec; import io.netty.handler.codec.http.HttpContentDecompressor; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequestEncoder; import io.netty.handler.codec.http.HttpResponseDecoder; @@ -203,7 +204,7 @@ public abstract class WebSocketClientHandshaker { // Verify the subprotocol that we received from the server. // This must be one of our expected subprotocols - or null/empty if we didn't want to speak a subprotocol - String receivedProtocol = response.headers().getAndConvert(HttpHeaders.Names.SEC_WEBSOCKET_PROTOCOL); + String receivedProtocol = response.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL); receivedProtocol = receivedProtocol != null ? receivedProtocol.trim() : null; String expectedProtocol = expectedSubprotocol != null ? expectedSubprotocol : ""; boolean protocolValid = false; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java index 8b84c53e7e..1bf1d1c369 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java @@ -21,9 +21,9 @@ import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; @@ -43,6 +43,8 @@ import java.nio.ByteBuffer; */ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker { + private static final AsciiString WEBSOCKET = new AsciiString("WebSocket"); + private ByteBuf expectedChallengeResponseBytes; /** @@ -136,9 +138,9 @@ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker { // Format request FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, path); HttpHeaders headers = request.headers(); - headers.add(Names.UPGRADE, Values.WEBSOCKET) - .add(Names.CONNECTION, Values.UPGRADE) - .add(Names.HOST, wsURL.getHost()); + headers.add(HttpHeaderNames.UPGRADE, WEBSOCKET) + .add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE) + .add(HttpHeaderNames.HOST, wsURL.getHost()); int wsPort = wsURL.getPort(); String originValue = "http://" + wsURL.getHost(); @@ -148,13 +150,13 @@ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker { originValue = originValue + ':' + wsPort; } - headers.add(Names.ORIGIN, originValue) - .add(Names.SEC_WEBSOCKET_KEY1, key1) - .add(Names.SEC_WEBSOCKET_KEY2, key2); + headers.add(HttpHeaderNames.ORIGIN, originValue) + .add(HttpHeaderNames.SEC_WEBSOCKET_KEY1, key1) + .add(HttpHeaderNames.SEC_WEBSOCKET_KEY2, key2); String expectedSubprotocol = expectedSubprotocol(); if (expectedSubprotocol != null && !expectedSubprotocol.isEmpty()) { - headers.add(Names.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); } if (customHeaders != null) { @@ -163,7 +165,7 @@ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker { // Set Content-Length to workaround some known defect. // See also: http://www.ietf.org/mail-archive/web/hybi/current/msg02149.html - headers.setInt(Names.CONTENT_LENGTH, key3.length); + headers.setInt(HttpHeaderNames.CONTENT_LENGTH, key3.length); request.content().writeBytes(key3); return request; } @@ -198,14 +200,14 @@ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker { HttpHeaders headers = response.headers(); - CharSequence upgrade = headers.get(Names.UPGRADE); - if (!AsciiString.equalsIgnoreCase(Values.WEBSOCKET, upgrade)) { + CharSequence upgrade = headers.get(HttpHeaderNames.UPGRADE); + if (!WEBSOCKET.equalsIgnoreCase(upgrade)) { throw new WebSocketHandshakeException("Invalid handshake response upgrade: " + upgrade); } - CharSequence connection = headers.get(Names.CONNECTION); - if (!AsciiString.equalsIgnoreCase(Values.UPGRADE, connection)) { + CharSequence connection = headers.get(HttpHeaderNames.CONNECTION); + if (!HttpHeaderValues.UPGRADE.equalsIgnoreCase(connection)) { throw new WebSocketHandshakeException("Invalid handshake response connection: " + connection); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker07.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker07.java index cbf4157a0e..7d35aaecdd 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker07.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker07.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; @@ -41,7 +40,6 @@ import java.net.URI; public class WebSocketClientHandshaker07 extends WebSocketClientHandshaker { private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketClientHandshaker07.class); - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); public static final String MAGIC_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; private String expectedChallengeResponseString; @@ -154,10 +152,10 @@ public class WebSocketClientHandshaker07 extends WebSocketClientHandshaker { FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, path); HttpHeaders headers = request.headers(); - headers.add(Names.UPGRADE, WEBSOCKET) - .add(Names.CONNECTION, Values.UPGRADE) - .add(Names.SEC_WEBSOCKET_KEY, key) - .add(Names.HOST, wsURL.getHost()); + headers.add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET) + .add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE) + .add(HttpHeaderNames.SEC_WEBSOCKET_KEY, key) + .add(HttpHeaderNames.HOST, wsURL.getHost()); int wsPort = wsURL.getPort(); String originValue = "http://" + wsURL.getHost(); @@ -166,14 +164,14 @@ public class WebSocketClientHandshaker07 extends WebSocketClientHandshaker { // See http://tools.ietf.org/html/rfc6454#section-6.2 originValue = originValue + ':' + wsPort; } - headers.add(Names.SEC_WEBSOCKET_ORIGIN, originValue); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, originValue); String expectedSubprotocol = expectedSubprotocol(); if (expectedSubprotocol != null && !expectedSubprotocol.isEmpty()) { - headers.add(Names.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); } - headers.add(Names.SEC_WEBSOCKET_VERSION, "7"); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_VERSION, "7"); if (customHeaders != null) { headers.add(customHeaders); @@ -207,17 +205,17 @@ public class WebSocketClientHandshaker07 extends WebSocketClientHandshaker { throw new WebSocketHandshakeException("Invalid handshake response getStatus: " + response.status()); } - CharSequence upgrade = headers.get(Names.UPGRADE); - if (!AsciiString.equalsIgnoreCase(Values.WEBSOCKET, upgrade)) { + CharSequence upgrade = headers.get(HttpHeaderNames.UPGRADE); + if (!HttpHeaderValues.WEBSOCKET.equalsIgnoreCase(upgrade)) { throw new WebSocketHandshakeException("Invalid handshake response upgrade: " + upgrade); } - CharSequence connection = headers.get(Names.CONNECTION); - if (!AsciiString.equalsIgnoreCase(Values.UPGRADE, connection)) { + CharSequence connection = headers.get(HttpHeaderNames.CONNECTION); + if (!HttpHeaderValues.UPGRADE.equalsIgnoreCase(connection)) { throw new WebSocketHandshakeException("Invalid handshake response connection: " + connection); } - CharSequence accept = headers.get(Names.SEC_WEBSOCKET_ACCEPT); + CharSequence accept = headers.get(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT); if (accept == null || !accept.equals(expectedChallengeResponseString)) { throw new WebSocketHandshakeException(String.format( "Invalid challenge. Actual: %s. Expected: %s", accept, expectedChallengeResponseString)); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java index df81e86f43..666a36b27a 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; @@ -41,7 +40,6 @@ import java.net.URI; public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker { private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketClientHandshaker08.class); - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); public static final String MAGIC_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; @@ -155,10 +153,10 @@ public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker { FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, path); HttpHeaders headers = request.headers(); - headers.add(Names.UPGRADE, WEBSOCKET) - .add(Names.CONNECTION, Values.UPGRADE) - .add(Names.SEC_WEBSOCKET_KEY, key) - .add(Names.HOST, wsURL.getHost()); + headers.add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET) + .add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE) + .add(HttpHeaderNames.SEC_WEBSOCKET_KEY, key) + .add(HttpHeaderNames.HOST, wsURL.getHost()); int wsPort = wsURL.getPort(); String originValue = "http://" + wsURL.getHost(); @@ -167,14 +165,14 @@ public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker { // See http://tools.ietf.org/html/rfc6454#section-6.2 originValue = originValue + ':' + wsPort; } - headers.add(Names.SEC_WEBSOCKET_ORIGIN, originValue); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, originValue); String expectedSubprotocol = expectedSubprotocol(); if (expectedSubprotocol != null && !expectedSubprotocol.isEmpty()) { - headers.add(Names.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); } - headers.add(Names.SEC_WEBSOCKET_VERSION, "8"); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_VERSION, "8"); if (customHeaders != null) { headers.add(customHeaders); @@ -208,17 +206,17 @@ public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker { throw new WebSocketHandshakeException("Invalid handshake response getStatus: " + response.status()); } - CharSequence upgrade = headers.get(Names.UPGRADE); - if (!AsciiString.equalsIgnoreCase(Values.WEBSOCKET, upgrade)) { + CharSequence upgrade = headers.get(HttpHeaderNames.UPGRADE); + if (!HttpHeaderValues.WEBSOCKET.equalsIgnoreCase(upgrade)) { throw new WebSocketHandshakeException("Invalid handshake response upgrade: " + upgrade); } - CharSequence connection = headers.get(Names.CONNECTION); - if (!AsciiString.equalsIgnoreCase(Values.UPGRADE, connection)) { + CharSequence connection = headers.get(HttpHeaderNames.CONNECTION); + if (!HttpHeaderValues.UPGRADE.equalsIgnoreCase(connection)) { throw new WebSocketHandshakeException("Invalid handshake response connection: " + connection); } - CharSequence accept = headers.get(Names.SEC_WEBSOCKET_ACCEPT); + CharSequence accept = headers.get(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT); if (accept == null || !accept.equals(expectedChallengeResponseString)) { throw new WebSocketHandshakeException(String.format( "Invalid challenge. Actual: %s. Expected: %s", accept, expectedChallengeResponseString)); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java index 90d9efa4f2..0be0886401 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; @@ -41,7 +40,6 @@ import java.net.URI; public class WebSocketClientHandshaker13 extends WebSocketClientHandshaker { private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketClientHandshaker13.class); - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); public static final String MAGIC_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; @@ -166,10 +164,10 @@ public class WebSocketClientHandshaker13 extends WebSocketClientHandshaker { FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, path); HttpHeaders headers = request.headers(); - headers.add(Names.UPGRADE, WEBSOCKET) - .add(Names.CONNECTION, Values.UPGRADE) - .add(Names.SEC_WEBSOCKET_KEY, key) - .add(Names.HOST, wsURL.getHost() + ':' + wsPort); + headers.add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET) + .add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE) + .add(HttpHeaderNames.SEC_WEBSOCKET_KEY, key) + .add(HttpHeaderNames.HOST, wsURL.getHost() + ':' + wsPort); String originValue = "http://" + wsURL.getHost(); if (wsPort != 80 && wsPort != 443) { @@ -177,14 +175,14 @@ public class WebSocketClientHandshaker13 extends WebSocketClientHandshaker { // See http://tools.ietf.org/html/rfc6454#section-6.2 originValue = originValue + ':' + wsPort; } - headers.add(Names.SEC_WEBSOCKET_ORIGIN, originValue); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, originValue); String expectedSubprotocol = expectedSubprotocol(); if (expectedSubprotocol != null && !expectedSubprotocol.isEmpty()) { - headers.add(Names.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, expectedSubprotocol); } - headers.add(Names.SEC_WEBSOCKET_VERSION, "13"); + headers.add(HttpHeaderNames.SEC_WEBSOCKET_VERSION, "13"); if (customHeaders != null) { headers.add(customHeaders); @@ -218,17 +216,17 @@ public class WebSocketClientHandshaker13 extends WebSocketClientHandshaker { throw new WebSocketHandshakeException("Invalid handshake response getStatus: " + response.status()); } - CharSequence upgrade = headers.get(Names.UPGRADE); - if (!AsciiString.equalsIgnoreCase(Values.WEBSOCKET, upgrade)) { + CharSequence upgrade = headers.get(HttpHeaderNames.UPGRADE); + if (!HttpHeaderValues.WEBSOCKET.equalsIgnoreCase(upgrade)) { throw new WebSocketHandshakeException("Invalid handshake response upgrade: " + upgrade); } - CharSequence connection = headers.get(Names.CONNECTION); - if (!AsciiString.equalsIgnoreCase(Values.UPGRADE, connection)) { + CharSequence connection = headers.get(HttpHeaderNames.CONNECTION); + if (!HttpHeaderValues.UPGRADE.equalsIgnoreCase(connection)) { throw new WebSocketHandshakeException("Invalid handshake response connection: " + connection); } - CharSequence accept = headers.get(Names.SEC_WEBSOCKET_ACCEPT); + CharSequence accept = headers.get(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT); if (accept == null || !accept.equals(expectedChallengeResponseString)) { throw new WebSocketHandshakeException(String.format( "Invalid challenge. Actual: %s. Expected: %s", accept, expectedChallengeResponseString)); diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00.java index 1f97bcb256..fefd529738 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00.java @@ -24,15 +24,13 @@ import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpResponseStatus; import java.util.regex.Pattern; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpVersion.*; /** @@ -47,6 +45,8 @@ import static io.netty.handler.codec.http.HttpVersion.*; */ public class WebSocketServerHandshaker00 extends WebSocketServerHandshaker { + private static final AsciiString WEBSOCKET = new AsciiString("WebSocket"); + private static final Pattern BEGINNING_DIGIT = Pattern.compile("[^0-9]"); private static final Pattern BEGINNING_SPACE = Pattern.compile("[^ ]"); @@ -110,13 +110,14 @@ public class WebSocketServerHandshaker00 extends WebSocketServerHandshaker { protected FullHttpResponse newHandshakeResponse(FullHttpRequest req, HttpHeaders headers) { // Serve the WebSocket handshake request. - if (!AsciiString.equalsIgnoreCase(Values.UPGRADE, req.headers().get(CONNECTION)) - || !AsciiString.equalsIgnoreCase(WEBSOCKET, req.headers().get(Names.UPGRADE))) { + if (!HttpHeaderValues.UPGRADE.equalsIgnoreCase(req.headers().get(HttpHeaderNames.CONNECTION)) + || !WEBSOCKET.equalsIgnoreCase(req.headers().get(HttpHeaderNames.UPGRADE))) { throw new WebSocketHandshakeException("not a WebSocket handshake request: missing upgrade"); } // Hixie 75 does not contain these headers while Hixie 76 does - boolean isHixie76 = req.headers().contains(SEC_WEBSOCKET_KEY1) && req.headers().contains(SEC_WEBSOCKET_KEY2); + boolean isHixie76 = req.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_KEY1) && + req.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_KEY2); // Create the WebSocket handshake response. FullHttpResponse res = new DefaultFullHttpResponse(HTTP_1_1, new HttpResponseStatus(101, @@ -125,15 +126,15 @@ public class WebSocketServerHandshaker00 extends WebSocketServerHandshaker { res.headers().add(headers); } - res.headers().add(Names.UPGRADE, WEBSOCKET); - res.headers().add(CONNECTION, Values.UPGRADE); + res.headers().add(HttpHeaderNames.UPGRADE, WEBSOCKET); + res.headers().add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE); // Fill in the headers and contents depending on handshake getMethod. if (isHixie76) { // New handshake getMethod with a challenge: - res.headers().add(SEC_WEBSOCKET_ORIGIN, req.headers().get(ORIGIN)); - res.headers().add(SEC_WEBSOCKET_LOCATION, uri()); - String subprotocols = req.headers().getAndConvert(SEC_WEBSOCKET_PROTOCOL); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, req.headers().get(HttpHeaderNames.ORIGIN)); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_LOCATION, uri()); + String subprotocols = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL); if (subprotocols != null) { String selectedSubprotocol = selectSubprotocol(subprotocols); if (selectedSubprotocol == null) { @@ -141,13 +142,13 @@ public class WebSocketServerHandshaker00 extends WebSocketServerHandshaker { logger.debug("Requested subprotocol(s) not supported: {}", subprotocols); } } else { - res.headers().add(SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); } } // Calculate the answer of the challenge. - String key1 = req.headers().getAndConvert(SEC_WEBSOCKET_KEY1); - String key2 = req.headers().getAndConvert(SEC_WEBSOCKET_KEY2); + String key1 = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_KEY1); + String key2 = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_KEY2); int a = (int) (Long.parseLong(BEGINNING_DIGIT.matcher(key1).replaceAll("")) / BEGINNING_SPACE.matcher(key1).replaceAll("").length()); int b = (int) (Long.parseLong(BEGINNING_DIGIT.matcher(key2).replaceAll("")) / @@ -160,11 +161,11 @@ public class WebSocketServerHandshaker00 extends WebSocketServerHandshaker { res.content().writeBytes(WebSocketUtil.md5(input.array())); } else { // Old Hixie 75 handshake getMethod with no challenge: - res.headers().add(WEBSOCKET_ORIGIN, req.headers().get(ORIGIN)); - res.headers().add(WEBSOCKET_LOCATION, uri()); - String protocol = req.headers().getAndConvert(WEBSOCKET_PROTOCOL); + res.headers().add(HttpHeaderNames.WEBSOCKET_ORIGIN, req.headers().get(HttpHeaderNames.ORIGIN)); + res.headers().add(HttpHeaderNames.WEBSOCKET_LOCATION, uri()); + String protocol = req.headers().getAndConvert(HttpHeaderNames.WEBSOCKET_PROTOCOL); if (protocol != null) { - res.headers().add(WEBSOCKET_PROTOCOL, selectSubprotocol(protocol)); + res.headers().add(HttpHeaderNames.WEBSOCKET_PROTOCOL, selectSubprotocol(protocol)); } } return res; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker07.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker07.java index cd2be70bf0..ebc94fa910 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker07.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker07.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.util.CharsetUtil; @@ -36,8 +35,6 @@ import static io.netty.handler.codec.http.HttpVersion.*; */ public class WebSocketServerHandshaker07 extends WebSocketServerHandshaker { - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); - public static final String WEBSOCKET_07_ACCEPT_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; private final boolean allowExtensions; @@ -130,7 +127,7 @@ public class WebSocketServerHandshaker07 extends WebSocketServerHandshaker { res.headers().add(headers); } - CharSequence key = req.headers().get(Names.SEC_WEBSOCKET_KEY); + CharSequence key = req.headers().get(HttpHeaderNames.SEC_WEBSOCKET_KEY); if (key == null) { throw new WebSocketHandshakeException("not a WebSocket request: missing key"); } @@ -142,10 +139,10 @@ public class WebSocketServerHandshaker07 extends WebSocketServerHandshaker { logger.debug("WebSocket version 07 server handshake key: {}, response: {}.", key, accept); } - res.headers().add(Names.UPGRADE, WEBSOCKET); - res.headers().add(Names.CONNECTION, Names.UPGRADE); - res.headers().add(Names.SEC_WEBSOCKET_ACCEPT, accept); - String subprotocols = req.headers().getAndConvert(Names.SEC_WEBSOCKET_PROTOCOL); + res.headers().add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + res.headers().add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT, accept); + String subprotocols = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL); if (subprotocols != null) { String selectedSubprotocol = selectSubprotocol(subprotocols); if (selectedSubprotocol == null) { @@ -153,7 +150,7 @@ public class WebSocketServerHandshaker07 extends WebSocketServerHandshaker { logger.debug("Requested subprotocol(s) not supported: {}", subprotocols); } } else { - res.headers().add(Names.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); } } return res; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java index cfe95a4a6f..8eb5193871 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.util.CharsetUtil; @@ -36,8 +35,6 @@ import static io.netty.handler.codec.http.HttpVersion.*; */ public class WebSocketServerHandshaker08 extends WebSocketServerHandshaker { - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); - public static final String WEBSOCKET_08_ACCEPT_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; private final boolean allowExtensions; @@ -129,7 +126,7 @@ public class WebSocketServerHandshaker08 extends WebSocketServerHandshaker { res.headers().add(headers); } - CharSequence key = req.headers().get(Names.SEC_WEBSOCKET_KEY); + CharSequence key = req.headers().get(HttpHeaderNames.SEC_WEBSOCKET_KEY); if (key == null) { throw new WebSocketHandshakeException("not a WebSocket request: missing key"); } @@ -141,10 +138,10 @@ public class WebSocketServerHandshaker08 extends WebSocketServerHandshaker { logger.debug("WebSocket version 08 server handshake key: {}, response: {}", key, accept); } - res.headers().add(Names.UPGRADE, WEBSOCKET); - res.headers().add(Names.CONNECTION, Names.UPGRADE); - res.headers().add(Names.SEC_WEBSOCKET_ACCEPT, accept); - String subprotocols = req.headers().getAndConvert(Names.SEC_WEBSOCKET_PROTOCOL); + res.headers().add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + res.headers().add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT, accept); + String subprotocols = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL); if (subprotocols != null) { String selectedSubprotocol = selectSubprotocol(subprotocols); if (selectedSubprotocol == null) { @@ -152,7 +149,7 @@ public class WebSocketServerHandshaker08 extends WebSocketServerHandshaker { logger.debug("Requested subprotocol(s) not supported: {}", subprotocols); } } else { - res.headers().add(Names.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); } } return res; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java index 140343910c..cdca072246 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java @@ -15,13 +15,12 @@ */ package io.netty.handler.codec.http.websocketx; -import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.util.CharsetUtil; @@ -35,8 +34,6 @@ import static io.netty.handler.codec.http.HttpVersion.*; */ public class WebSocketServerHandshaker13 extends WebSocketServerHandshaker { - private static final CharSequence WEBSOCKET = new AsciiString(Values.WEBSOCKET.toString().toLowerCase()); - public static final String WEBSOCKET_13_ACCEPT_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; private final boolean allowExtensions; @@ -127,7 +124,7 @@ public class WebSocketServerHandshaker13 extends WebSocketServerHandshaker { res.headers().add(headers); } - CharSequence key = req.headers().get(Names.SEC_WEBSOCKET_KEY); + CharSequence key = req.headers().get(HttpHeaderNames.SEC_WEBSOCKET_KEY); if (key == null) { throw new WebSocketHandshakeException("not a WebSocket request: missing key"); } @@ -139,10 +136,10 @@ public class WebSocketServerHandshaker13 extends WebSocketServerHandshaker { logger.debug("WebSocket version 13 server handshake key: {}, response: {}", key, accept); } - res.headers().add(Names.UPGRADE, WEBSOCKET); - res.headers().add(Names.CONNECTION, Names.UPGRADE); - res.headers().add(Names.SEC_WEBSOCKET_ACCEPT, accept); - String subprotocols = req.headers().getAndConvert(Names.SEC_WEBSOCKET_PROTOCOL); + res.headers().add(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + res.headers().add(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT, accept); + String subprotocols = req.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL); if (subprotocols != null) { String selectedSubprotocol = selectSubprotocol(subprotocols); if (selectedSubprotocol == null) { @@ -150,7 +147,7 @@ public class WebSocketServerHandshaker13 extends WebSocketServerHandshaker { logger.debug("Requested subprotocol(s) not supported: {}", subprotocols); } } else { - res.headers().add(Names.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); + res.headers().add(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, selectedSubprotocol); } } return res; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java index 0446786baf..ee6bd62c4a 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java @@ -19,7 +19,7 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelPromise; import io.netty.handler.codec.http.DefaultHttpResponse; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponseStatus; @@ -112,7 +112,7 @@ public class WebSocketServerHandshakerFactory { */ public WebSocketServerHandshaker newHandshaker(HttpRequest req) { - CharSequence version = req.headers().get(Names.SEC_WEBSOCKET_VERSION); + CharSequence version = req.headers().get(HttpHeaderNames.SEC_WEBSOCKET_VERSION); if (version != null) { if (version.equals(WebSocketVersion.V13.toHttpHeaderValue())) { // Version 13 of the wire protocol - RFC 6455 (version 17 of the draft hybi specification). @@ -149,7 +149,7 @@ public class WebSocketServerHandshakerFactory { HttpResponse res = new DefaultHttpResponse( HttpVersion.HTTP_1_1, HttpResponseStatus.UPGRADE_REQUIRED); - res.headers().set(Names.SEC_WEBSOCKET_VERSION, WebSocketVersion.V13.toHttpHeaderValue()); + res.headers().set(HttpHeaderNames.SEC_WEBSOCKET_VERSION, WebSocketVersion.V13.toHttpHeaderValue()); return channel.write(res, promise); } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java index 3f3e2e171d..4338dc99af 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java @@ -22,8 +22,8 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPipeline; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; -import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.ssl.SslHandler; @@ -102,7 +102,7 @@ class WebSocketServerProtocolHandshakeHandler extends ChannelHandlerAdapter { // SSL in use so use Secure WebSockets protocol = "wss"; } - return protocol + "://" + req.headers().get(HttpHeaders.Names.HOST) + path; + return protocol + "://" + req.headers().get(HttpHeaderNames.HOST) + path; } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandler.java index d225e3c119..421a2beb7d 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandler.java @@ -19,7 +19,7 @@ import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; import io.netty.handler.codec.CodecException; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; @@ -63,7 +63,7 @@ public class WebSocketClientExtensionHandler extends ChannelHandlerAdapter { public void write(final ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof HttpRequest && WebSocketExtensionUtil.isWebsocketUpgrade((HttpRequest) msg)) { HttpRequest request = (HttpRequest) msg; - String headerValue = request.headers().getAndConvert(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS); + String headerValue = request.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS); for (WebSocketClientExtensionHandshaker extentionHandshaker : extensionHandshakers) { WebSocketExtensionData extensionData = extentionHandshaker.newRequestData(); @@ -71,7 +71,7 @@ public class WebSocketClientExtensionHandler extends ChannelHandlerAdapter { extensionData.name(), extensionData.parameters()); } - request.headers().set(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS, headerValue); + request.headers().set(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS, headerValue); } super.write(ctx, msg, promise); @@ -84,7 +84,7 @@ public class WebSocketClientExtensionHandler extends ChannelHandlerAdapter { HttpResponse response = (HttpResponse) msg; if (WebSocketExtensionUtil.isWebsocketUpgrade(response)) { - String extensionsHeader = response.headers().getAndConvert(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS); + String extensionsHeader = response.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS); if (extensionsHeader != null) { List extensions = diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionUtil.java index 101d81aa7b..238730f7fe 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionUtil.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionUtil.java @@ -15,7 +15,8 @@ */ package io.netty.handler.codec.http.websocketx.extensions; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMessage; import io.netty.util.internal.StringUtil; @@ -40,8 +41,8 @@ public final class WebSocketExtensionUtil { if (httpMessage == null) { throw new NullPointerException("httpMessage"); } - return httpMessage.headers().contains(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.UPGRADE, true) && - httpMessage.headers().contains(HttpHeaders.Names.UPGRADE, HttpHeaders.Values.WEBSOCKET, true); + return httpMessage.headers().contains(HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE, true) && + httpMessage.headers().contains(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET, true); } public static List extractExtensions(String extensionHeader) { @@ -62,7 +63,7 @@ public final class WebSocketExtensionUtil { } } } else { - parameters = Collections.emptyMap(); + parameters = Collections.emptyMap(); } extensions.add(new WebSocketExtensionData(name, parameters)); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler.java index 5a69bebcd8..bf685db38f 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler.java @@ -20,7 +20,7 @@ import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; @@ -69,7 +69,7 @@ public class WebSocketServerExtensionHandler extends ChannelHandlerAdapter { HttpRequest request = (HttpRequest) msg; if (WebSocketExtensionUtil.isWebsocketUpgrade(request)) { - String extensionsHeader = request.headers().getAndConvert(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS); + String extensionsHeader = request.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS); if (extensionsHeader != null) { List extensions = @@ -107,7 +107,7 @@ public class WebSocketServerExtensionHandler extends ChannelHandlerAdapter { if (msg instanceof HttpResponse && WebSocketExtensionUtil.isWebsocketUpgrade((HttpResponse) msg) && validExtensions != null) { HttpResponse response = (HttpResponse) msg; - String headerValue = response.headers().getAndConvert(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS); + String headerValue = response.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS); for (WebSocketServerExtension extension : validExtensions) { WebSocketExtensionData extensionData = extension.newReponseData(); @@ -132,7 +132,7 @@ public class WebSocketServerExtensionHandler extends ChannelHandlerAdapter { }); if (headerValue != null) { - response.headers().set(HttpHeaders.Names.SEC_WEBSOCKET_EXTENSIONS, headerValue); + response.headers().set(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS, headerValue); } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderNames.java b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderNames.java new file mode 100644 index 0000000000..5ab154101b --- /dev/null +++ b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderNames.java @@ -0,0 +1,207 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.rtsp; + +import io.netty.handler.codec.AsciiString; +import io.netty.handler.codec.http.HttpHeaderNames; + +/** + * Standard RTSP header names. + *

+ * These are all defined as lowercase to support HTTP/2 requirements while also not + * violating RTSP/1.x requirements. New header names should always be lowercase. + */ +public final class RtspHeaderNames { + /** + * {@code "accept"} + */ + public static final AsciiString ACCEPT = HttpHeaderNames.ACCEPT; + /** + * {@code "accept-encoding"} + */ + public static final AsciiString ACCEPT_ENCODING = HttpHeaderNames.ACCEPT_ENCODING; + /** + * {@code "accept-lanugage"} + */ + public static final AsciiString ACCEPT_LANGUAGE = HttpHeaderNames.ACCEPT_LANGUAGE; + /** + * {@code "allow"} + */ + public static final AsciiString ALLOW = new AsciiString("allow"); + /** + * {@code "authorization"} + */ + public static final AsciiString AUTHORIZATION = HttpHeaderNames.AUTHORIZATION; + /** + * {@code "bandwidth"} + */ + public static final AsciiString BANDWIDTH = new AsciiString("bandwidth"); + /** + * {@code "blocksize"} + */ + public static final AsciiString BLOCKSIZE = new AsciiString("blocksize"); + /** + * {@code "cache-control"} + */ + public static final AsciiString CACHE_CONTROL = HttpHeaderNames.CACHE_CONTROL; + /** + * {@code "conference"} + */ + public static final AsciiString CONFERENCE = new AsciiString("conference"); + /** + * {@code "connection"} + */ + public static final AsciiString CONNECTION = HttpHeaderNames.CONNECTION; + /** + * {@code "content-base"} + */ + public static final AsciiString CONTENT_BASE = HttpHeaderNames.CONTENT_BASE; + /** + * {@code "content-encoding"} + */ + public static final AsciiString CONTENT_ENCODING = HttpHeaderNames.CONTENT_ENCODING; + /** + * {@code "content-language"} + */ + public static final AsciiString CONTENT_LANGUAGE = HttpHeaderNames.CONTENT_LANGUAGE; + /** + * {@code "content-length"} + */ + public static final AsciiString CONTENT_LENGTH = HttpHeaderNames.CONTENT_LENGTH; + /** + * {@code "content-location"} + */ + public static final AsciiString CONTENT_LOCATION = HttpHeaderNames.CONTENT_LOCATION; + /** + * {@code "content-type"} + */ + public static final AsciiString CONTENT_TYPE = HttpHeaderNames.CONTENT_TYPE; + /** + * {@code "cseq"} + */ + public static final AsciiString CSEQ = new AsciiString("cseq"); + /** + * {@code "cate"} + */ + public static final AsciiString DATE = HttpHeaderNames.DATE; + /** + * {@code "expires"} + */ + public static final AsciiString EXPIRES = HttpHeaderNames.EXPIRES; + /** + * {@code "from"} + */ + public static final AsciiString FROM = HttpHeaderNames.FROM; + /** + * {@code "host"} + */ + public static final AsciiString HOST = HttpHeaderNames.HOST; + /** + * {@code "if-match"} + */ + public static final AsciiString IF_MATCH = HttpHeaderNames.IF_MATCH; + /** + * {@code "if-modified-since"} + */ + public static final AsciiString IF_MODIFIED_SINCE = HttpHeaderNames.IF_MODIFIED_SINCE; + /** + * {@code "keymgmt"} + */ + public static final AsciiString KEYMGMT = new AsciiString("keymgmt"); + /** + * {@code "last-modified"} + */ + public static final AsciiString LAST_MODIFIED = HttpHeaderNames.LAST_MODIFIED; + /** + * {@code "proxy-authenticate"} + */ + public static final AsciiString PROXY_AUTHENTICATE = HttpHeaderNames.PROXY_AUTHENTICATE; + /** + * {@code "proxy-require"} + */ + public static final AsciiString PROXY_REQUIRE = new AsciiString("proxy-require"); + /** + * {@code "public"} + */ + public static final AsciiString PUBLIC = new AsciiString("public"); + /** + * {@code "range"} + */ + public static final AsciiString RANGE = HttpHeaderNames.RANGE; + /** + * {@code "referer"} + */ + public static final AsciiString REFERER = HttpHeaderNames.REFERER; + /** + * {@code "require"} + */ + public static final AsciiString REQUIRE = new AsciiString("require"); + /** + * {@code "retry-after"} + */ + public static final AsciiString RETRT_AFTER = HttpHeaderNames.RETRY_AFTER; + /** + * {@code "rtp-info"} + */ + public static final AsciiString RTP_INFO = new AsciiString("rtp-info"); + /** + * {@code "scale"} + */ + public static final AsciiString SCALE = new AsciiString("scale"); + /** + * {@code "session"} + */ + public static final AsciiString SESSION = new AsciiString("session"); + /** + * {@code "server"} + */ + public static final AsciiString SERVER = HttpHeaderNames.SERVER; + /** + * {@code "speed"} + */ + public static final AsciiString SPEED = new AsciiString("speed"); + /** + * {@code "timestamp"} + */ + public static final AsciiString TIMESTAMP = new AsciiString("timestamp"); + /** + * {@code "transport"} + */ + public static final AsciiString TRANSPORT = new AsciiString("transport"); + /** + * {@code "unsupported"} + */ + public static final AsciiString UNSUPPORTED = new AsciiString("unsupported"); + /** + * {@code "user-agent"} + */ + public static final AsciiString USER_AGENT = HttpHeaderNames.USER_AGENT; + /** + * {@code "vary"} + */ + public static final AsciiString VARY = HttpHeaderNames.VARY; + /** + * {@code "via"} + */ + public static final AsciiString VIA = HttpHeaderNames.VIA; + /** + * {@code "www-authenticate"} + */ + public static final AsciiString WWW_AUTHENTICATE = HttpHeaderNames.WWW_AUTHENTICATE; + + private RtspHeaderNames() { } +} diff --git a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderValues.java b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderValues.java new file mode 100644 index 0000000000..86551e6963 --- /dev/null +++ b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaderValues.java @@ -0,0 +1,196 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.rtsp; + +import io.netty.handler.codec.AsciiString; +import io.netty.handler.codec.http.HttpHeaderValues; + +/** + * Standard RTSP header names. + */ +public final class RtspHeaderValues { + /** + * {@code "append"} + */ + public static final AsciiString APPEND = new AsciiString("append"); + /** + * {@code "AVP"} + */ + public static final AsciiString AVP = new AsciiString("AVP"); + /** + * {@code "bytes"} + */ + public static final AsciiString BYTES = HttpHeaderValues.BYTES; + /** + * {@code "charset"} + */ + public static final AsciiString CHARSET = HttpHeaderValues.CHARSET; + /** + * {@code "client_port"} + */ + public static final AsciiString CLIENT_PORT = new AsciiString("client_port"); + /** + * {@code "clock"} + */ + public static final AsciiString CLOCK = new AsciiString("clock"); + /** + * {@code "close"} + */ + public static final AsciiString CLOSE = HttpHeaderValues.CLOSE; + /** + * {@code "compress"} + */ + public static final AsciiString COMPRESS = HttpHeaderValues.COMPRESS; + /** + * {@code "100-continue"} + */ + public static final AsciiString CONTINUE = HttpHeaderValues.CONTINUE; + /** + * {@code "deflate"} + */ + public static final AsciiString DEFLATE = HttpHeaderValues.DEFLATE; + /** + * {@code "destination"} + */ + public static final AsciiString DESTINATION = new AsciiString("destination"); + /** + * {@code "gzip"} + */ + public static final AsciiString GZIP = HttpHeaderValues.GZIP; + /** + * {@code "identity"} + */ + public static final AsciiString IDENTITY = HttpHeaderValues.IDENTITY; + /** + * {@code "interleaved"} + */ + public static final AsciiString INTERLEAVED = new AsciiString("interleaved"); + /** + * {@code "keep-alive"} + */ + public static final AsciiString KEEP_ALIVE = HttpHeaderValues.KEEP_ALIVE; + /** + * {@code "layers"} + */ + public static final AsciiString LAYERS = new AsciiString("layers"); + /** + * {@code "max-age"} + */ + public static final AsciiString MAX_AGE = HttpHeaderValues.MAX_AGE; + /** + * {@code "max-stale"} + */ + public static final AsciiString MAX_STALE = HttpHeaderValues.MAX_STALE; + /** + * {@code "min-fresh"} + */ + public static final AsciiString MIN_FRESH = HttpHeaderValues.MIN_FRESH; + /** + * {@code "mode"} + */ + public static final AsciiString MODE = new AsciiString("mode"); + /** + * {@code "multicast"} + */ + public static final AsciiString MULTICAST = new AsciiString("multicast"); + /** + * {@code "must-revalidate"} + */ + public static final AsciiString MUST_REVALIDATE = HttpHeaderValues.MUST_REVALIDATE; + /** + * {@code "none"} + */ + public static final AsciiString NONE = HttpHeaderValues.NONE; + /** + * {@code "no-cache"} + */ + public static final AsciiString NO_CACHE = HttpHeaderValues.NO_CACHE; + /** + * {@code "no-transform"} + */ + public static final AsciiString NO_TRANSFORM = HttpHeaderValues.NO_TRANSFORM; + /** + * {@code "only-if-cached"} + */ + public static final AsciiString ONLY_IF_CACHED = HttpHeaderValues.ONLY_IF_CACHED; + /** + * {@code "port"} + */ + public static final AsciiString PORT = new AsciiString("port"); + /** + * {@code "private"} + */ + public static final AsciiString PRIVATE = HttpHeaderValues.PRIVATE; + /** + * {@code "proxy-revalidate"} + */ + public static final AsciiString PROXY_REVALIDATE = HttpHeaderValues.PROXY_REVALIDATE; + /** + * {@code "public"} + */ + public static final AsciiString PUBLIC = HttpHeaderValues.PUBLIC; + /** + * {@code "RTP"} + */ + public static final AsciiString RTP = new AsciiString("RTP"); + /** + * {@code "rtptime"} + */ + public static final AsciiString RTPTIME = new AsciiString("rtptime"); + /** + * {@code "seq"} + */ + public static final AsciiString SEQ = new AsciiString("seq"); + /** + * {@code "server_port"} + */ + public static final AsciiString SERVER_PORT = new AsciiString("server_port"); + /** + * {@code "ssrc"} + */ + public static final AsciiString SSRC = new AsciiString("ssrc"); + /** + * {@code "TCP"} + */ + public static final AsciiString TCP = new AsciiString("TCP"); + /** + * {@code "time"} + */ + public static final AsciiString TIME = new AsciiString("time"); + /** + * {@code "timeout"} + */ + public static final AsciiString TIMEOUT = new AsciiString("timeout"); + /** + * {@code "ttl"} + */ + public static final AsciiString TTL = new AsciiString("ttl"); + /** + * {@code "UDP"} + */ + public static final AsciiString UDP = new AsciiString("UDP"); + /** + * {@code "unicast"} + */ + public static final AsciiString UNICAST = new AsciiString("unicast"); + /** + * {@code "url"} + */ + public static final AsciiString URL = new AsciiString("url"); + + private RtspHeaderValues() { } +} diff --git a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaders.java b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaders.java deleted file mode 100644 index f2825c818d..0000000000 --- a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspHeaders.java +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Copyright 2012 The Netty Project - * - * The Netty Project licenses this file to you under the Apache License, - * version 2.0 (the "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ -package io.netty.handler.codec.rtsp; - -import io.netty.handler.codec.AsciiString; -import io.netty.handler.codec.http.HttpHeaders; - - -/** - * Standard RTSP header names and values. - */ -public final class RtspHeaders { - - /** - * Standard RTSP header names. - */ - public static final class Names { - /** - * {@code "Accept"} - */ - public static final CharSequence ACCEPT = HttpHeaders.Names.ACCEPT; - /** - * {@code "Accept-Encoding"} - */ - public static final CharSequence ACCEPT_ENCODING = HttpHeaders.Names.ACCEPT_ENCODING; - /** - * {@code "Accept-Lanugage"} - */ - public static final CharSequence ACCEPT_LANGUAGE = HttpHeaders.Names.ACCEPT_LANGUAGE; - /** - * {@code "Allow"} - */ - public static final CharSequence ALLOW = new AsciiString("Allow"); - /** - * {@code "Authorization"} - */ - public static final CharSequence AUTHORIZATION = HttpHeaders.Names.AUTHORIZATION; - /** - * {@code "Bandwidth"} - */ - public static final CharSequence BANDWIDTH = new AsciiString("Bandwidth"); - /** - * {@code "Blocksize"} - */ - public static final CharSequence BLOCKSIZE = new AsciiString("Blocksize"); - /** - * {@code "Cache-Control"} - */ - public static final CharSequence CACHE_CONTROL = HttpHeaders.Names.CACHE_CONTROL; - /** - * {@code "Conference"} - */ - public static final CharSequence CONFERENCE = new AsciiString("Conference"); - /** - * {@code "Connection"} - */ - public static final CharSequence CONNECTION = HttpHeaders.Names.CONNECTION; - /** - * {@code "Content-Base"} - */ - public static final CharSequence CONTENT_BASE = HttpHeaders.Names.CONTENT_BASE; - /** - * {@code "Content-Encoding"} - */ - public static final CharSequence CONTENT_ENCODING = HttpHeaders.Names.CONTENT_ENCODING; - /** - * {@code "Content-Language"} - */ - public static final CharSequence CONTENT_LANGUAGE = HttpHeaders.Names.CONTENT_LANGUAGE; - /** - * {@code "Content-Length"} - */ - public static final CharSequence CONTENT_LENGTH = HttpHeaders.Names.CONTENT_LENGTH; - /** - * {@code "Content-Location"} - */ - public static final CharSequence CONTENT_LOCATION = HttpHeaders.Names.CONTENT_LOCATION; - /** - * {@code "Content-Type"} - */ - public static final CharSequence CONTENT_TYPE = HttpHeaders.Names.CONTENT_TYPE; - /** - * {@code "CSeq"} - */ - public static final CharSequence CSEQ = new AsciiString("CSeq"); - /** - * {@code "Date"} - */ - public static final CharSequence DATE = HttpHeaders.Names.DATE; - /** - * {@code "Expires"} - */ - public static final CharSequence EXPIRES = HttpHeaders.Names.EXPIRES; - /** - * {@code "From"} - */ - public static final CharSequence FROM = HttpHeaders.Names.FROM; - /** - * {@code "Host"} - */ - public static final CharSequence HOST = HttpHeaders.Names.HOST; - /** - * {@code "If-Match"} - */ - public static final CharSequence IF_MATCH = HttpHeaders.Names.IF_MATCH; - /** - * {@code "If-Modified-Since"} - */ - public static final CharSequence IF_MODIFIED_SINCE = HttpHeaders.Names.IF_MODIFIED_SINCE; - /** - * {@code "KeyMgmt"} - */ - public static final CharSequence KEYMGMT = new AsciiString("KeyMgmt"); - /** - * {@code "Last-Modified"} - */ - public static final CharSequence LAST_MODIFIED = HttpHeaders.Names.LAST_MODIFIED; - /** - * {@code "Proxy-Authenticate"} - */ - public static final CharSequence PROXY_AUTHENTICATE = HttpHeaders.Names.PROXY_AUTHENTICATE; - /** - * {@code "Proxy-Require"} - */ - public static final CharSequence PROXY_REQUIRE = new AsciiString("Proxy-Require"); - /** - * {@code "Public"} - */ - public static final CharSequence PUBLIC = new AsciiString("Public"); - /** - * {@code "Range"} - */ - public static final CharSequence RANGE = HttpHeaders.Names.RANGE; - /** - * {@code "Referer"} - */ - public static final CharSequence REFERER = HttpHeaders.Names.REFERER; - /** - * {@code "Require"} - */ - public static final CharSequence REQUIRE = new AsciiString("Require"); - /** - * {@code "Retry-After"} - */ - public static final CharSequence RETRT_AFTER = HttpHeaders.Names.RETRY_AFTER; - /** - * {@code "RTP-Info"} - */ - public static final CharSequence RTP_INFO = new AsciiString("RTP-Info"); - /** - * {@code "Scale"} - */ - public static final CharSequence SCALE = new AsciiString("Scale"); - /** - * {@code "Session"} - */ - public static final CharSequence SESSION = new AsciiString("Session"); - /** - * {@code "Server"} - */ - public static final CharSequence SERVER = HttpHeaders.Names.SERVER; - /** - * {@code "Speed"} - */ - public static final CharSequence SPEED = new AsciiString("Speed"); - /** - * {@code "Timestamp"} - */ - public static final CharSequence TIMESTAMP = new AsciiString("Timestamp"); - /** - * {@code "Transport"} - */ - public static final CharSequence TRANSPORT = new AsciiString("Transport"); - /** - * {@code "Unsupported"} - */ - public static final CharSequence UNSUPPORTED = new AsciiString("Unsupported"); - /** - * {@code "User-Agent"} - */ - public static final CharSequence USER_AGENT = HttpHeaders.Names.USER_AGENT; - /** - * {@code "Vary"} - */ - public static final CharSequence VARY = HttpHeaders.Names.VARY; - /** - * {@code "Via"} - */ - public static final CharSequence VIA = HttpHeaders.Names.VIA; - /** - * {@code "WWW-Authenticate"} - */ - public static final CharSequence WWW_AUTHENTICATE = HttpHeaders.Names.WWW_AUTHENTICATE; - - private Names() { - } - } - - /** - * Standard RTSP header values. - */ - public static final class Values { - /** - * {@code "append"} - */ - public static final CharSequence APPEND = new AsciiString("append"); - /** - * {@code "AVP"} - */ - public static final CharSequence AVP = new AsciiString("AVP"); - /** - * {@code "bytes"} - */ - public static final CharSequence BYTES = HttpHeaders.Values.BYTES; - /** - * {@code "charset"} - */ - public static final CharSequence CHARSET = HttpHeaders.Values.CHARSET; - /** - * {@code "client_port"} - */ - public static final CharSequence CLIENT_PORT = new AsciiString("client_port"); - /** - * {@code "clock"} - */ - public static final CharSequence CLOCK = new AsciiString("clock"); - /** - * {@code "close"} - */ - public static final CharSequence CLOSE = HttpHeaders.Values.CLOSE; - /** - * {@code "compress"} - */ - public static final CharSequence COMPRESS = HttpHeaders.Values.COMPRESS; - /** - * {@code "100-continue"} - */ - public static final CharSequence CONTINUE = HttpHeaders.Values.CONTINUE; - /** - * {@code "deflate"} - */ - public static final CharSequence DEFLATE = HttpHeaders.Values.DEFLATE; - /** - * {@code "destination"} - */ - public static final CharSequence DESTINATION = new AsciiString("destination"); - /** - * {@code "gzip"} - */ - public static final CharSequence GZIP = HttpHeaders.Values.GZIP; - /** - * {@code "identity"} - */ - public static final CharSequence IDENTITY = HttpHeaders.Values.IDENTITY; - /** - * {@code "interleaved"} - */ - public static final CharSequence INTERLEAVED = new AsciiString("interleaved"); - /** - * {@code "keep-alive"} - */ - public static final CharSequence KEEP_ALIVE = HttpHeaders.Values.KEEP_ALIVE; - /** - * {@code "layers"} - */ - public static final CharSequence LAYERS = new AsciiString("layers"); - /** - * {@code "max-age"} - */ - public static final CharSequence MAX_AGE = HttpHeaders.Values.MAX_AGE; - /** - * {@code "max-stale"} - */ - public static final CharSequence MAX_STALE = HttpHeaders.Values.MAX_STALE; - /** - * {@code "min-fresh"} - */ - public static final CharSequence MIN_FRESH = HttpHeaders.Values.MIN_FRESH; - /** - * {@code "mode"} - */ - public static final CharSequence MODE = new AsciiString("mode"); - /** - * {@code "multicast"} - */ - public static final CharSequence MULTICAST = new AsciiString("multicast"); - /** - * {@code "must-revalidate"} - */ - public static final CharSequence MUST_REVALIDATE = HttpHeaders.Values.MUST_REVALIDATE; - /** - * {@code "none"} - */ - public static final CharSequence NONE = HttpHeaders.Values.NONE; - /** - * {@code "no-cache"} - */ - public static final CharSequence NO_CACHE = HttpHeaders.Values.NO_CACHE; - /** - * {@code "no-transform"} - */ - public static final CharSequence NO_TRANSFORM = HttpHeaders.Values.NO_TRANSFORM; - /** - * {@code "only-if-cached"} - */ - public static final CharSequence ONLY_IF_CACHED = HttpHeaders.Values.ONLY_IF_CACHED; - /** - * {@code "port"} - */ - public static final CharSequence PORT = new AsciiString("port"); - /** - * {@code "private"} - */ - public static final CharSequence PRIVATE = HttpHeaders.Values.PRIVATE; - /** - * {@code "proxy-revalidate"} - */ - public static final CharSequence PROXY_REVALIDATE = HttpHeaders.Values.PROXY_REVALIDATE; - /** - * {@code "public"} - */ - public static final CharSequence PUBLIC = HttpHeaders.Values.PUBLIC; - /** - * {@code "RTP"} - */ - public static final CharSequence RTP = new AsciiString("RTP"); - /** - * {@code "rtptime"} - */ - public static final CharSequence RTPTIME = new AsciiString("rtptime"); - /** - * {@code "seq"} - */ - public static final CharSequence SEQ = new AsciiString("seq"); - /** - * {@code "server_port"} - */ - public static final CharSequence SERVER_PORT = new AsciiString("server_port"); - /** - * {@code "ssrc"} - */ - public static final CharSequence SSRC = new AsciiString("ssrc"); - /** - * {@code "TCP"} - */ - public static final CharSequence TCP = new AsciiString("TCP"); - /** - * {@code "time"} - */ - public static final CharSequence TIME = new AsciiString("time"); - /** - * {@code "timeout"} - */ - public static final CharSequence TIMEOUT = new AsciiString("timeout"); - /** - * {@code "ttl"} - */ - public static final CharSequence TTL = new AsciiString("ttl"); - /** - * {@code "UDP"} - */ - public static final CharSequence UDP = new AsciiString("UDP"); - /** - * {@code "unicast"} - */ - public static final CharSequence UNICAST = new AsciiString("unicast"); - /** - * {@code "url"} - */ - public static final CharSequence URL = new AsciiString("url"); - - private Values() { } - } - - private RtspHeaders() { } -} diff --git a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspObjectDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspObjectDecoder.java index 7023569e22..f8bed912c2 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspObjectDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/rtsp/RtspObjectDecoder.java @@ -79,7 +79,7 @@ public abstract class RtspObjectDecoder extends HttpObjectDecoder { if (empty) { return true; } - if (!msg.headers().contains(RtspHeaders.Names.CONTENT_LENGTH)) { + if (!msg.headers().contains(RtspHeaderNames.CONTENT_LENGTH)) { return true; } return empty; diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpDecoder.java index 4ef02df2ac..98899178bf 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpDecoder.java @@ -24,8 +24,8 @@ import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpMessage; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; -import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; @@ -342,7 +342,7 @@ public class SpdyHttpDecoder extends MessageToMessageDecoder { // Replace the SPDY host header with the HTTP host header CharSequence host = headers.get(HOST); headers.remove(HOST); - req.headers().set(HttpHeaders.Names.HOST, host); + req.headers().set(HttpHeaderNames.HOST, host); for (Map.Entry e: requestFrame.headers()) { req.headers().add(e.getKey(), e.getValue()); @@ -352,7 +352,7 @@ public class SpdyHttpDecoder extends MessageToMessageDecoder { HttpHeaderUtil.setKeepAlive(req, true); // Transfer-Encoding header is not valid - req.headers().remove(HttpHeaders.Names.TRANSFER_ENCODING); + req.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); return req; } @@ -376,8 +376,8 @@ public class SpdyHttpDecoder extends MessageToMessageDecoder { HttpHeaderUtil.setKeepAlive(res, true); // Transfer-Encoding header is not valid - res.headers().remove(HttpHeaders.Names.TRANSFER_ENCODING); - res.headers().remove(HttpHeaders.Names.TRAILER); + res.headers().remove(HttpHeaderNames.TRANSFER_ENCODING); + res.headers().remove(HttpHeaderNames.TRAILER); return res; } diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java index 49e946dedb..75d22a11a9 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java @@ -21,6 +21,7 @@ import io.netty.handler.codec.UnsupportedMessageTypeException; import io.netty.handler.codec.http.FullHttpMessage; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMessage; import io.netty.handler.codec.http.HttpObject; @@ -222,10 +223,10 @@ public class SpdyHttpEncoder extends MessageToMessageEncoder { // The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding // headers are not valid and MUST not be sent. - httpHeaders.remove(HttpHeaders.Names.CONNECTION); - httpHeaders.remove(HttpHeaders.Names.KEEP_ALIVE); - httpHeaders.remove(HttpHeaders.Names.PROXY_CONNECTION); - httpHeaders.remove(HttpHeaders.Names.TRANSFER_ENCODING); + httpHeaders.remove(HttpHeaderNames.CONNECTION); + httpHeaders.remove(HttpHeaderNames.KEEP_ALIVE); + httpHeaders.remove(HttpHeaderNames.PROXY_CONNECTION); + httpHeaders.remove(HttpHeaderNames.TRANSFER_ENCODING); SpdySynStreamFrame spdySynStreamFrame = new DefaultSpdySynStreamFrame(streamID, associatedToStreamId, priority); @@ -248,8 +249,8 @@ public class SpdyHttpEncoder extends MessageToMessageEncoder { // Replace the HTTP host header with the SPDY host header if (spdyVersion >= 3) { - CharSequence host = httpHeaders.get(HttpHeaders.Names.HOST); - httpHeaders.remove(HttpHeaders.Names.HOST); + CharSequence host = httpHeaders.get(HttpHeaderNames.HOST); + httpHeaders.remove(HttpHeaderNames.HOST); frameHeaders.set(HOST, host); } @@ -278,10 +279,10 @@ public class SpdyHttpEncoder extends MessageToMessageEncoder { // The Connection, Keep-Alive, Proxy-Connection, and Transfer-Encoding // headers are not valid and MUST not be sent. - httpHeaders.remove(HttpHeaders.Names.CONNECTION); - httpHeaders.remove(HttpHeaders.Names.KEEP_ALIVE); - httpHeaders.remove(HttpHeaders.Names.PROXY_CONNECTION); - httpHeaders.remove(HttpHeaders.Names.TRANSFER_ENCODING); + httpHeaders.remove(HttpHeaderNames.CONNECTION); + httpHeaders.remove(HttpHeaderNames.KEEP_ALIVE); + httpHeaders.remove(HttpHeaderNames.PROXY_CONNECTION); + httpHeaders.remove(HttpHeaderNames.TRANSFER_ENCODING); SpdySynReplyFrame spdySynReplyFrame = new DefaultSpdySynReplyFrame(streamID); SpdyHeaders frameHeaders = spdySynReplyFrame.headers(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentCompressorTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentCompressorTest.java index 05bdff7542..284f0fa033 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentCompressorTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentCompressorTest.java @@ -19,8 +19,6 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.compression.ZlibWrapper; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.util.CharsetUtil; import org.junit.Test; @@ -110,7 +108,7 @@ public class HttpContentCompressorTest { ch.writeInbound(newRequest()); HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - res.headers().set(Names.TRANSFER_ENCODING, Values.CHUNKED); + res.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -151,7 +149,7 @@ public class HttpContentCompressorTest { ch.writeInbound(newRequest()); HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - res.headers().set(Names.TRANSFER_ENCODING, Values.CHUNKED); + res.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -197,7 +195,7 @@ public class HttpContentCompressorTest { FullHttpResponse res = new DefaultFullHttpResponse( HttpVersion.HTTP_1_1, HttpResponseStatus.OK, Unpooled.copiedBuffer("Hello, World", CharsetUtil.US_ASCII)); - res.headers().setInt(Names.CONTENT_LENGTH, res.content().readableBytes()); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, res.content().readableBytes()); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -262,10 +260,10 @@ public class HttpContentCompressorTest { assertThat(o, is(instanceOf(FullHttpResponse.class))); res = (FullHttpResponse) o; - assertThat(res.headers().get(Names.TRANSFER_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.TRANSFER_ENCODING), is(nullValue())); // Content encoding shouldn't be modified. - assertThat(res.headers().get(Names.CONTENT_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_ENCODING), is(nullValue())); assertThat(res.content().readableBytes(), is(0)); assertThat(res.content().toString(CharsetUtil.US_ASCII), is("")); res.release(); @@ -287,10 +285,10 @@ public class HttpContentCompressorTest { assertThat(o, is(instanceOf(FullHttpResponse.class))); res = (FullHttpResponse) o; - assertThat(res.headers().get(Names.TRANSFER_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.TRANSFER_ENCODING), is(nullValue())); // Content encoding shouldn't be modified. - assertThat(res.headers().get(Names.CONTENT_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_ENCODING), is(nullValue())); assertThat(res.content().readableBytes(), is(0)); assertThat(res.content().toString(CharsetUtil.US_ASCII), is("")); assertEquals("Netty", res.trailingHeaders().get("X-Test")); @@ -299,7 +297,7 @@ public class HttpContentCompressorTest { private static FullHttpRequest newRequest() { FullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"); - req.headers().set(Names.ACCEPT_ENCODING, "gzip"); + req.headers().set(HttpHeaderNames.ACCEPT_ENCODING, "gzip"); return req; } @@ -309,8 +307,8 @@ public class HttpContentCompressorTest { HttpResponse res = (HttpResponse) o; assertThat(res, is(not(instanceOf(HttpContent.class)))); - assertThat(res.headers().getAndConvert(Names.TRANSFER_ENCODING), is("chunked")); - assertThat(res.headers().get(Names.CONTENT_LENGTH), is(nullValue())); - assertThat(res.headers().getAndConvert(Names.CONTENT_ENCODING), is("gzip")); + assertThat(res.headers().getAndConvert(HttpHeaderNames.TRANSFER_ENCODING), is("chunked")); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_LENGTH), is(nullValue())); + assertThat(res.headers().getAndConvert(HttpHeaderNames.CONTENT_ENCODING), is("gzip")); } } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentEncoderTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentEncoderTest.java index 3ffe22f73e..e1a15a4a35 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentEncoderTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpContentEncoderTest.java @@ -21,8 +21,6 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.MessageToByteEncoder; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; import io.netty.util.CharsetUtil; import org.junit.Test; @@ -83,7 +81,7 @@ public class HttpContentEncoderTest { ch.writeInbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/")); HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - res.headers().set(Names.TRANSFER_ENCODING, Values.CHUNKED); + res.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -120,7 +118,7 @@ public class HttpContentEncoderTest { ch.writeInbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/")); HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - res.headers().set(Names.TRANSFER_ENCODING, Values.CHUNKED); + res.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -161,7 +159,7 @@ public class HttpContentEncoderTest { FullHttpResponse res = new DefaultFullHttpResponse( HttpVersion.HTTP_1_1, HttpResponseStatus.OK, Unpooled.wrappedBuffer(new byte[42])); - res.headers().setInt(Names.CONTENT_LENGTH, 42); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 42); ch.writeOutbound(res); assertEncodedResponse(ch); @@ -219,10 +217,10 @@ public class HttpContentEncoderTest { assertThat(o, is(instanceOf(FullHttpResponse.class))); res = (FullHttpResponse) o; - assertThat(res.headers().get(Names.TRANSFER_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.TRANSFER_ENCODING), is(nullValue())); // Content encoding shouldn't be modified. - assertThat(res.headers().get(Names.CONTENT_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_ENCODING), is(nullValue())); assertThat(res.content().readableBytes(), is(0)); assertThat(res.content().toString(CharsetUtil.US_ASCII), is("")); res.release(); @@ -244,10 +242,10 @@ public class HttpContentEncoderTest { assertThat(o, is(instanceOf(FullHttpResponse.class))); res = (FullHttpResponse) o; - assertThat(res.headers().get(Names.TRANSFER_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.TRANSFER_ENCODING), is(nullValue())); // Content encoding shouldn't be modified. - assertThat(res.headers().get(Names.CONTENT_ENCODING), is(nullValue())); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_ENCODING), is(nullValue())); assertThat(res.content().readableBytes(), is(0)); assertThat(res.content().toString(CharsetUtil.US_ASCII), is("")); assertEquals("Netty", res.trailingHeaders().get("X-Test")); @@ -260,8 +258,8 @@ public class HttpContentEncoderTest { HttpResponse res = (HttpResponse) o; assertThat(res, is(not(instanceOf(HttpContent.class)))); - assertThat(res.headers().getAndConvert(Names.TRANSFER_ENCODING), is("chunked")); - assertThat(res.headers().get(Names.CONTENT_LENGTH), is(nullValue())); - assertThat(res.headers().getAndConvert(Names.CONTENT_ENCODING), is("test")); + assertThat(res.headers().getAndConvert(HttpHeaderNames.TRANSFER_ENCODING), is("chunked")); + assertThat(res.headers().get(HttpHeaderNames.CONTENT_LENGTH), is(nullValue())); + assertThat(res.headers().getAndConvert(HttpHeaderNames.CONTENT_ENCODING), is("test")); } } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeaderUtilTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeaderUtilTest.java index c0ee22d501..3c28d917aa 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeaderUtilTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpHeaderUtilTest.java @@ -28,7 +28,7 @@ public class HttpHeaderUtilTest { @Test public void testRemoveTransferEncodingIgnoreCase() { HttpMessage message = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - message.headers().set(HttpHeaders.Names.TRANSFER_ENCODING, "Chunked"); + message.headers().set(HttpHeaderNames.TRANSFER_ENCODING, "Chunked"); assertFalse(message.headers().isEmpty()); HttpHeaderUtil.setTransferEncodingChunked(message, false); assertTrue(message.headers().isEmpty()); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java index 0a75edd3d8..94b4cedce0 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java @@ -22,7 +22,6 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.DecoderResultProvider; import io.netty.handler.codec.TooLongFrameException; -import io.netty.handler.codec.http.HttpHeaders.Names; import io.netty.util.CharsetUtil; import org.easymock.EasyMock; import org.junit.Test; @@ -119,7 +118,7 @@ public class HttpObjectAggregatorTest { FullHttpResponse response = embedder.readOutbound(); assertEquals(HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, response.status()); - assertEquals("0", response.headers().get(Names.CONTENT_LENGTH)); + assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH)); assertFalse(embedder.isOpen()); try { @@ -166,7 +165,7 @@ public class HttpObjectAggregatorTest { // The agregator should respond with '413 Request Entity Too Large.' FullHttpResponse response = embedder.readOutbound(); assertEquals(HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, response.status()); - assertEquals("0", response.headers().get(Names.CONTENT_LENGTH)); + assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH)); // An ill-behaving client could continue to send data without a respect, and such data should be discarded. assertFalse(embedder.writeInbound(chunk1)); @@ -206,7 +205,7 @@ public class HttpObjectAggregatorTest { FullHttpResponse response = embedder.readOutbound(); assertEquals(HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, response.status()); - assertEquals("0", response.headers().get(Names.CONTENT_LENGTH)); + assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH)); // Keep-alive is on by default in HTTP/1.1, so the connection should be still alive. assertTrue(embedder.isOpen()); @@ -242,7 +241,7 @@ public class HttpObjectAggregatorTest { // The agregator should respond with '413 Request Entity Too Large.' FullHttpResponse response = embedder.readOutbound(); assertEquals(HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, response.status()); - assertEquals("0", response.headers().get(Names.CONTENT_LENGTH)); + assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH)); // An ill-behaving client could continue to send data without a respect, and such data should be discarded. assertFalse(embedder.writeInbound(chunk1)); @@ -276,7 +275,7 @@ public class HttpObjectAggregatorTest { assertFalse(embedder.writeInbound(message)); HttpResponse response = embedder.readOutbound(); assertEquals(HttpResponseStatus.REQUEST_ENTITY_TOO_LARGE, response.status()); - assertEquals("0", response.headers().get(Names.CONTENT_LENGTH)); + assertEquals("0", response.headers().get(HttpHeaderNames.CONTENT_LENGTH)); if (serverShouldCloseConnection(message)) { assertFalse(embedder.isOpen()); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseDecoderTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseDecoderTest.java index 0c5ae67d95..fa3a5627ae 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseDecoderTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseDecoderTest.java @@ -17,7 +17,6 @@ package io.netty.handler.codec.http; import io.netty.buffer.Unpooled; import io.netty.channel.embedded.EmbeddedChannel; -import io.netty.handler.codec.http.HttpHeaders.Names; import io.netty.util.CharsetUtil; import org.junit.Test; @@ -184,7 +183,7 @@ public class HttpResponseDecoderTest { HttpResponse res = ch.readInbound(); assertThat(res.protocolVersion(), sameInstance(HttpVersion.HTTP_1_1)); assertThat(res.status(), is(HttpResponseStatus.OK)); - assertThat(res.headers().getAndConvert(Names.TRANSFER_ENCODING), is("chunked")); + assertThat(res.headers().getAndConvert(HttpHeaderNames.TRANSFER_ENCODING), is("chunked")); assertThat(ch.readInbound(), is(nullValue())); // Close the connection without sending anything. @@ -205,7 +204,7 @@ public class HttpResponseDecoderTest { HttpResponse res = ch.readInbound(); assertThat(res.protocolVersion(), sameInstance(HttpVersion.HTTP_1_1)); assertThat(res.status(), is(HttpResponseStatus.OK)); - assertThat(res.headers().getAndConvert(Names.TRANSFER_ENCODING), is("chunked")); + assertThat(res.headers().getAndConvert(HttpHeaderNames.TRANSFER_ENCODING), is("chunked")); // Read the partial content. HttpContent content = ch.readInbound(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseEncoderTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseEncoderTest.java index bf9f99d4ea..923ea36d50 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseEncoderTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpResponseEncoderTest.java @@ -36,13 +36,13 @@ public class HttpResponseEncoderTest { public void testLargeFileRegionChunked() throws Exception { EmbeddedChannel channel = new EmbeddedChannel(new HttpResponseEncoder()); HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); - response.headers().set(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); + response.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); assertTrue(channel.writeOutbound(response)); ByteBuf buffer = channel.readOutbound(); - assertEquals("HTTP/1.1 200 OK\r\n" + HttpHeaders.Names.TRANSFER_ENCODING + ": " + - HttpHeaders.Values.CHUNKED + "\r\n\r\n", buffer.toString(CharsetUtil.US_ASCII)); + assertEquals("HTTP/1.1 200 OK\r\n" + HttpHeaderNames.TRANSFER_ENCODING + ": " + + HttpHeaderValues.CHUNKED + "\r\n\r\n", buffer.toString(CharsetUtil.US_ASCII)); buffer.release(); assertTrue(channel.writeOutbound(FILE_REGION)); buffer = channel.readOutbound(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpServerCodecTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpServerCodecTest.java index 6c2df6e4be..2ab2b54614 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpServerCodecTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpServerCodecTest.java @@ -21,7 +21,6 @@ import io.netty.channel.embedded.EmbeddedChannel; import io.netty.util.CharsetUtil; import org.junit.Test; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @@ -92,7 +91,7 @@ public class HttpServerCodecTest { // Ensure the aggregator generates a full request. FullHttpRequest req = ch.readInbound(); - assertThat(req.headers().getAndConvert(CONTENT_LENGTH), is("1")); + assertThat(req.headers().getAndConvert(HttpHeaderNames.CONTENT_LENGTH), is("1")); assertThat(req.content().readableBytes(), is(1)); assertThat(req.content().readByte(), is((byte) 42)); req.release(); @@ -103,13 +102,13 @@ public class HttpServerCodecTest { // Send the actual response. FullHttpResponse res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CREATED); res.content().writeBytes("OK".getBytes(CharsetUtil.UTF_8)); - res.headers().setInt(CONTENT_LENGTH, 2); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 2); ch.writeOutbound(res); // Ensure the encoder handles the response after handling 100 Continue. ByteBuf encodedRes = ch.readOutbound(); - assertThat(encodedRes.toString(CharsetUtil.UTF_8), is("HTTP/1.1 201 Created\r\n" + - CONTENT_LENGTH + ": 2\r\n\r\nOK")); + assertThat(encodedRes.toString(CharsetUtil.UTF_8), + is("HTTP/1.1 201 Created\r\n" + HttpHeaderNames.CONTENT_LENGTH + ": 2\r\n\r\nOK")); encodedRes.release(); ch.finish(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsConfigTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsConfigTest.java index fc7e233870..a209d857e2 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsConfigTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsConfigTest.java @@ -15,7 +15,7 @@ */ package io.netty.handler.codec.http.cors; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpMethod; import org.junit.Test; @@ -107,8 +107,8 @@ public class CorsConfigTest { @Test public void defaultPreflightResponseHeaders() { final CorsConfig cors = withAnyOrigin().build(); - assertThat(cors.preflightResponseHeaders().get(Names.DATE), is(notNullValue())); - assertThat(cors.preflightResponseHeaders().getAndConvert(Names.CONTENT_LENGTH), is("0")); + assertThat(cors.preflightResponseHeaders().get(HttpHeaderNames.DATE), is(notNullValue())); + assertThat(cors.preflightResponseHeaders().getAndConvert(HttpHeaderNames.CONTENT_LENGTH), is("0")); } @Test diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsHandlerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsHandlerTest.java index ca6ffac160..11e71efae2 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsHandlerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/cors/CorsHandlerTest.java @@ -28,7 +28,7 @@ import org.junit.Test; import java.util.Arrays; import java.util.concurrent.Callable; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; +import static io.netty.handler.codec.http.HttpHeaderNames.*; import static io.netty.handler.codec.http.HttpMethod.*; import static io.netty.handler.codec.http.HttpResponseStatus.FORBIDDEN; import static io.netty.handler.codec.http.HttpResponseStatus.OK; diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoderTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoderTest.java index 500d47e386..ae54ffb34f 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoderTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestDecoderTest.java @@ -24,7 +24,8 @@ import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.DefaultHttpContent; import io.netty.handler.codec.http.DefaultHttpRequest; import io.netty.handler.codec.http.HttpContent; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpVersion; import io.netty.handler.codec.http.LastHttpContent; @@ -62,8 +63,8 @@ public class HttpPostRequestDecoderTest { "http://localhost"); req.setDecoderResult(DecoderResult.SUCCESS); - req.headers().add(HttpHeaders.Names.CONTENT_TYPE, contentTypeValue); - req.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); + req.headers().add(HttpHeaderNames.CONTENT_TYPE, contentTypeValue); + req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); // Force to use memory-based data. final DefaultHttpDataFactory inMemoryFactory = new DefaultHttpDataFactory(false); @@ -106,8 +107,8 @@ public class HttpPostRequestDecoderTest { "http://localhost"); req.setDecoderResult(DecoderResult.SUCCESS); - req.headers().add(HttpHeaders.Names.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); - req.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); + req.headers().add(HttpHeaderNames.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); + req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); // Force to use memory-based data. final DefaultHttpDataFactory inMemoryFactory = new DefaultHttpDataFactory(false); @@ -150,8 +151,8 @@ public class HttpPostRequestDecoderTest { final DefaultFullHttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "http://localhost"); req.setDecoderResult(DecoderResult.SUCCESS); - req.headers().add(HttpHeaders.Names.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); - req.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); + req.headers().add(HttpHeaderNames.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); + req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); final String body = "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"file" + i + "\"\r\n" + @@ -185,8 +186,8 @@ public class HttpPostRequestDecoderTest { "http://localhost"); req.setDecoderResult(DecoderResult.SUCCESS); - req.headers().add(HttpHeaders.Names.CONTENT_TYPE, "multipart/form-data; boundary=\"" + boundary + '"'); - req.headers().add(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); + req.headers().add(HttpHeaderNames.CONTENT_TYPE, "multipart/form-data; boundary=\"" + boundary + '"'); + req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); // Force to use memory-based data. final DefaultHttpDataFactory inMemoryFactory = new DefaultHttpDataFactory(false); @@ -218,10 +219,10 @@ public class HttpPostRequestDecoderTest { DefaultHttpRequest aRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "http://localhost"); - aRequest.headers().set(HttpHeaders.Names.CONTENT_TYPE, + aRequest.headers().set(HttpHeaderNames.CONTENT_TYPE, "multipart/form-data; boundary=" + boundary); - aRequest.headers().set(HttpHeaders.Names.TRANSFER_ENCODING, - HttpHeaders.Values.CHUNKED); + aRequest.headers().set(HttpHeaderNames.TRANSFER_ENCODING, + HttpHeaderValues.CHUNKED); HttpPostRequestDecoder aDecoder = new HttpPostRequestDecoder(aMemFactory, aRequest); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoderTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoderTest.java index a74e1c1ce3..242d3d5a59 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoderTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoderTest.java @@ -18,18 +18,17 @@ package io.netty.handler.codec.http.multipart; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.handler.codec.http.DefaultFullHttpRequest; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpVersion; import io.netty.handler.codec.http.multipart.HttpPostRequestEncoder.EncoderMode; import io.netty.util.CharsetUtil; import io.netty.util.internal.StringUtil; - import org.junit.Test; import java.io.File; import java.util.List; +import static io.netty.handler.codec.http.HttpHeaderNames.*; import static org.junit.Assert.*; /** {@link HttpPostRequestEncoder} test case. */ diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketRequestBuilder.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketRequestBuilder.java index 588e5710d6..0a0bbcdce3 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketRequestBuilder.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketRequestBuilder.java @@ -17,13 +17,13 @@ package io.netty.handler.codec.http.websocketx; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; -import io.netty.handler.codec.http.HttpHeaders.Names; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpVersion; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpVersion.*; public class WebSocketRequestBuilder { @@ -48,33 +48,57 @@ public class WebSocketRequestBuilder { return this; } - public WebSocketRequestBuilder uri(String uri) { - this.uri = uri; + public WebSocketRequestBuilder uri(CharSequence uri) { + if (uri == null) { + this.uri = null; + } else { + this.uri = uri.toString(); + } return this; } - public WebSocketRequestBuilder host(String host) { - this.host = host; + public WebSocketRequestBuilder host(CharSequence host) { + if (host == null) { + this.host = null; + } else { + this.host = host.toString(); + } return this; } - public WebSocketRequestBuilder upgrade(String upgrade) { - this.upgrade = upgrade; + public WebSocketRequestBuilder upgrade(CharSequence upgrade) { + if (upgrade == null) { + this.upgrade = null; + } else { + this.upgrade = upgrade.toString(); + } return this; } - public WebSocketRequestBuilder connection(String connection) { - this.connection = connection; + public WebSocketRequestBuilder connection(CharSequence connection) { + if (connection == null) { + this.connection = null; + } else { + this.connection = connection.toString(); + } return this; } - public WebSocketRequestBuilder key(String key) { - this.key = key; + public WebSocketRequestBuilder key(CharSequence key) { + if (key == null) { + this.key = null; + } else { + this.key = key.toString(); + } return this; } - public WebSocketRequestBuilder origin(String origin) { - this.origin = origin; + public WebSocketRequestBuilder origin(CharSequence origin) { + if (origin == null) { + this.origin = null; + } else { + this.origin = origin.toString(); + } return this; } @@ -102,32 +126,33 @@ public class WebSocketRequestBuilder { HttpHeaders headers = req.headers(); if (host != null) { - headers.set(Names.HOST, host); + headers.set(HttpHeaderNames.HOST, host); } if (upgrade != null) { - headers.set(Names.UPGRADE, upgrade); + headers.set(HttpHeaderNames.UPGRADE, upgrade); } if (connection != null) { - headers.set(Names.CONNECTION, connection); + headers.set(HttpHeaderNames.CONNECTION, connection); } if (key != null) { - headers.set(Names.SEC_WEBSOCKET_KEY, key); + headers.set(HttpHeaderNames.SEC_WEBSOCKET_KEY, key); } if (origin != null) { - headers.set(Names.SEC_WEBSOCKET_ORIGIN, origin); + headers.set(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, origin); } if (version != null) { - headers.set(Names.SEC_WEBSOCKET_VERSION, version.toHttpHeaderValue()); + headers.set(HttpHeaderNames.SEC_WEBSOCKET_VERSION, version.toHttpHeaderValue()); } return req; } public static HttpRequest sucessful() { - return new WebSocketRequestBuilder().httpVersion(HTTP_1_1) + return new WebSocketRequestBuilder() + .httpVersion(HTTP_1_1) .method(HttpMethod.GET) .uri("/test") .host("server.example.com") - .upgrade(WEBSOCKET.toString().toLowerCase()) + .upgrade(HttpHeaderValues.WEBSOCKET) .key("dGhlIHNhbXBsZSBub25jZQ==") .origin("http://example.com") .version13() diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00Test.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00Test.java index 62ced3ee31..6fbcc3afa8 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00Test.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00Test.java @@ -19,7 +19,8 @@ import io.netty.buffer.Unpooled; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; @@ -32,7 +33,6 @@ import io.netty.util.ReferenceCountUtil; import org.junit.Assert; import org.junit.Test; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpVersion.*; public class WebSocketServerHandshaker00Test { @@ -54,13 +54,13 @@ public class WebSocketServerHandshaker00Test { FullHttpRequest req = ReferenceCountUtil.releaseLater(new DefaultFullHttpRequest( HTTP_1_1, HttpMethod.GET, "/chat", Unpooled.copiedBuffer("^n:ds[4U", CharsetUtil.US_ASCII))); - req.headers().set(Names.HOST, "server.example.com"); - req.headers().set(Names.UPGRADE, WEBSOCKET.toString().toLowerCase()); - req.headers().set(Names.CONNECTION, "Upgrade"); - req.headers().set(Names.ORIGIN, "http://example.com"); - req.headers().set(Names.SEC_WEBSOCKET_KEY1, "4 @1 46546xW%0l 1 5"); - req.headers().set(Names.SEC_WEBSOCKET_KEY2, "12998 5 Y3 1 .P00"); - req.headers().set(Names.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); + req.headers().set(HttpHeaderNames.HOST, "server.example.com"); + req.headers().set(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + req.headers().set(HttpHeaderNames.CONNECTION, "Upgrade"); + req.headers().set(HttpHeaderNames.ORIGIN, "http://example.com"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_KEY1, "4 @1 46546xW%0l 1 5"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_KEY2, "12998 5 Y3 1 .P00"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); if (subProtocol) { new WebSocketServerHandshaker00( @@ -74,12 +74,12 @@ public class WebSocketServerHandshaker00Test { ch2.writeInbound(ch.readOutbound()); HttpResponse res = ch2.readInbound(); - Assert.assertEquals("ws://example.com/chat", res.headers().get(Names.SEC_WEBSOCKET_LOCATION)); + Assert.assertEquals("ws://example.com/chat", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_LOCATION)); if (subProtocol) { - Assert.assertEquals("chat", res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertEquals("chat", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } else { - Assert.assertNull(res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertNull(res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } LastHttpContent content = ch2.readInbound(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08Test.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08Test.java index a03f0c6881..c09dba8209 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08Test.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08Test.java @@ -19,7 +19,8 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; @@ -30,7 +31,6 @@ import io.netty.util.ReferenceCountUtil; import org.junit.Assert; import org.junit.Test; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpVersion.*; public class WebSocketServerHandshaker08Test { @@ -51,13 +51,13 @@ public class WebSocketServerHandshaker08Test { FullHttpRequest req = ReferenceCountUtil.releaseLater( new DefaultFullHttpRequest(HTTP_1_1, HttpMethod.GET, "/chat")); - req.headers().set(Names.HOST, "server.example.com"); - req.headers().set(Names.UPGRADE, WEBSOCKET.toString().toLowerCase()); - req.headers().set(Names.CONNECTION, "Upgrade"); - req.headers().set(Names.SEC_WEBSOCKET_KEY, "dGhlIHNhbXBsZSBub25jZQ=="); - req.headers().set(Names.SEC_WEBSOCKET_ORIGIN, "http://example.com"); - req.headers().set(Names.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); - req.headers().set(Names.SEC_WEBSOCKET_VERSION, "8"); + req.headers().set(HttpHeaderNames.HOST, "server.example.com"); + req.headers().set(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + req.headers().set(HttpHeaderNames.CONNECTION, "Upgrade"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_KEY, "dGhlIHNhbXBsZSBub25jZQ=="); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, "http://example.com"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_VERSION, "8"); if (subProtocol) { new WebSocketServerHandshaker08( @@ -74,11 +74,11 @@ public class WebSocketServerHandshaker08Test { HttpResponse res = ch2.readInbound(); Assert.assertEquals( - "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", res.headers().get(Names.SEC_WEBSOCKET_ACCEPT)); + "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT)); if (subProtocol) { - Assert.assertEquals("chat", res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertEquals("chat", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } else { - Assert.assertNull(res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertNull(res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } ReferenceCountUtil.release(res); } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13Test.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13Test.java index 5526bbf901..47ad4d7c3b 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13Test.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13Test.java @@ -19,7 +19,8 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; @@ -30,7 +31,6 @@ import io.netty.util.ReferenceCountUtil; import org.junit.Assert; import org.junit.Test; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpVersion.*; public class WebSocketServerHandshaker13Test { @@ -51,13 +51,13 @@ public class WebSocketServerHandshaker13Test { FullHttpRequest req = ReferenceCountUtil.releaseLater( new DefaultFullHttpRequest(HTTP_1_1, HttpMethod.GET, "/chat")); - req.headers().set(Names.HOST, "server.example.com"); - req.headers().set(Names.UPGRADE, WEBSOCKET.toString().toLowerCase()); - req.headers().set(Names.CONNECTION, "Upgrade"); - req.headers().set(Names.SEC_WEBSOCKET_KEY, "dGhlIHNhbXBsZSBub25jZQ=="); - req.headers().set(Names.SEC_WEBSOCKET_ORIGIN, "http://example.com"); - req.headers().set(Names.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); - req.headers().set(Names.SEC_WEBSOCKET_VERSION, "13"); + req.headers().set(HttpHeaderNames.HOST, "server.example.com"); + req.headers().set(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + req.headers().set(HttpHeaderNames.CONNECTION, "Upgrade"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_KEY, "dGhlIHNhbXBsZSBub25jZQ=="); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_ORIGIN, "http://example.com"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL, "chat, superchat"); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_VERSION, "13"); if (subProtocol) { new WebSocketServerHandshaker13( @@ -74,11 +74,11 @@ public class WebSocketServerHandshaker13Test { HttpResponse res = ch2.readInbound(); Assert.assertEquals( - "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", res.headers().get(Names.SEC_WEBSOCKET_ACCEPT)); + "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_ACCEPT)); if (subProtocol) { - Assert.assertEquals("chat", res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertEquals("chat", res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } else { - Assert.assertNull(res.headers().get(Names.SEC_WEBSOCKET_PROTOCOL)); + Assert.assertNull(res.headers().get(HttpHeaderNames.SEC_WEBSOCKET_PROTOCOL)); } ReferenceCountUtil.release(res); } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandlerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandlerTest.java index cd7ae7f25e..d29e5d7a25 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandlerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandlerTest.java @@ -23,6 +23,7 @@ import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpRequestDecoder; @@ -34,7 +35,6 @@ import org.junit.Test; import java.util.ArrayDeque; import java.util.Queue; -import static io.netty.handler.codec.http.HttpHeaders.Values.*; import static io.netty.handler.codec.http.HttpResponseStatus.*; import static io.netty.handler.codec.http.HttpVersion.*; import static org.junit.Assert.*; @@ -94,7 +94,7 @@ public class WebSocketServerProtocolHandlerTest { .uri("/test") .key(null) .connection("Upgrade") - .upgrade(WEBSOCKET.toString().toLowerCase()) + .upgrade(HttpHeaderValues.WEBSOCKET) .version13() .build(); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandlerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandlerTest.java index f0d623c7fc..e01ab6c626 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandlerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandlerTest.java @@ -15,21 +15,19 @@ */ package io.netty.handler.codec.http.websocketx.extensions; -import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.*; -import io.netty.channel.ChannelHandlerContext; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.CodecException; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; -import io.netty.handler.codec.http.websocketx.WebSocketFrame; +import org.junit.Test; import java.util.Collections; import java.util.List; -import org.junit.Test; +import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; +import static org.easymock.EasyMock.*; +import static org.junit.Assert.*; public class WebSocketClientExtensionHandlerTest { @@ -69,14 +67,14 @@ public class WebSocketClientExtensionHandlerTest { HttpRequest req2 = ch.readOutbound(); List reqExts = WebSocketExtensionUtil.extractExtensions( - req2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + req2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); HttpResponse res = newUpgradeResponse("main"); ch.writeInbound(res); HttpResponse res2 = ch.readInbound(); List resExts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); // test assertEquals(2, reqExts.size()); @@ -86,8 +84,8 @@ public class WebSocketClientExtensionHandlerTest { assertEquals(1, resExts.size()); assertEquals("main", resExts.get(0).name()); assertTrue(resExts.get(0).parameters().isEmpty()); - assertTrue(ch.pipeline().get(DummyDecoder.class) != null); - assertTrue(ch.pipeline().get(DummyEncoder.class) != null); + assertNotNull(ch.pipeline().get(DummyDecoder.class)); + assertNotNull(ch.pipeline().get(DummyEncoder.class)); } @Test @@ -119,14 +117,14 @@ public class WebSocketClientExtensionHandlerTest { HttpRequest req2 = ch.readOutbound(); List reqExts = WebSocketExtensionUtil.extractExtensions( - req2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + req2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); HttpResponse res = newUpgradeResponse("fallback"); ch.writeInbound(res); HttpResponse res2 = ch.readInbound(); List resExts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); // test assertEquals(2, reqExts.size()); @@ -136,8 +134,8 @@ public class WebSocketClientExtensionHandlerTest { assertEquals(1, resExts.size()); assertEquals("fallback", resExts.get(0).name()); assertTrue(resExts.get(0).parameters().isEmpty()); - assertTrue(ch.pipeline().get(DummyDecoder.class) != null); - assertTrue(ch.pipeline().get(DummyEncoder.class) != null); + assertNotNull(ch.pipeline().get(DummyDecoder.class)); + assertNotNull(ch.pipeline().get(DummyEncoder.class)); } @Test @@ -182,14 +180,14 @@ public class WebSocketClientExtensionHandlerTest { HttpRequest req2 = ch.readOutbound(); List reqExts = WebSocketExtensionUtil.extractExtensions( - req2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + req2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); HttpResponse res = newUpgradeResponse("main, fallback"); ch.writeInbound(res); HttpResponse res2 = ch.readInbound(); List resExts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); // test assertEquals(2, reqExts.size()); @@ -199,10 +197,10 @@ public class WebSocketClientExtensionHandlerTest { assertEquals(2, resExts.size()); assertEquals("main", resExts.get(0).name()); assertEquals("fallback", resExts.get(1).name()); - assertTrue(ch.pipeline().context(mainEncoder) != null); - assertTrue(ch.pipeline().context(mainDecoder) != null); - assertTrue(ch.pipeline().context(fallbackEncoder) != null); - assertTrue(ch.pipeline().context(fallbackDecoder) != null); + assertNotNull(ch.pipeline().context(mainEncoder)); + assertNotNull(ch.pipeline().context(mainDecoder)); + assertNotNull(ch.pipeline().context(fallbackEncoder)); + assertNotNull(ch.pipeline().context(fallbackDecoder)); } @Test(expected = CodecException.class) @@ -239,7 +237,7 @@ public class WebSocketClientExtensionHandlerTest { HttpRequest req2 = ch.readOutbound(); List reqExts = WebSocketExtensionUtil.extractExtensions( - req2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + req2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); HttpResponse res = newUpgradeResponse("main, fallback"); ch.writeInbound(res); diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionTestUtil.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionTestUtil.java index b802246a61..5e171f3cce 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionTestUtil.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionTestUtil.java @@ -15,23 +15,22 @@ */ package io.netty.handler.codec.http.websocketx.extensions; -import java.util.List; - -import org.easymock.EasyMock; -import org.easymock.IArgumentMatcher; - import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.DefaultHttpRequest; import io.netty.handler.codec.http.DefaultHttpResponse; -import io.netty.handler.codec.http.HttpHeaders.Names; -import io.netty.handler.codec.http.HttpHeaders.Values; -import io.netty.handler.codec.http.websocketx.WebSocketFrame; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; +import io.netty.handler.codec.http.websocketx.WebSocketFrame; import io.netty.util.ReferenceCountUtil; +import org.easymock.EasyMock; +import org.easymock.IArgumentMatcher; + +import java.util.List; public final class WebSocketExtensionTestUtil { @@ -39,12 +38,12 @@ public final class WebSocketExtensionTestUtil { HttpRequest req = ReferenceCountUtil.releaseLater(new DefaultHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.GET, "/chat")); - req.headers().set(Names.HOST, "server.example.com"); - req.headers().set(Names.UPGRADE, Values.WEBSOCKET.toString().toLowerCase()); - req.headers().set(Names.CONNECTION, "Upgrade"); - req.headers().set(Names.ORIGIN, "http://example.com"); + req.headers().set(HttpHeaderNames.HOST, "server.example.com"); + req.headers().set(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + req.headers().set(HttpHeaderNames.CONNECTION, "Upgrade"); + req.headers().set(HttpHeaderNames.ORIGIN, "http://example.com"); if (ext != null) { - req.headers().set(Names.SEC_WEBSOCKET_EXTENSIONS, ext); + req.headers().set(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS, ext); } return req; @@ -54,12 +53,12 @@ public final class WebSocketExtensionTestUtil { HttpResponse res = ReferenceCountUtil.releaseLater(new DefaultHttpResponse( HttpVersion.HTTP_1_1, HttpResponseStatus.SWITCHING_PROTOCOLS)); - res.headers().set(Names.HOST, "server.example.com"); - res.headers().set(Names.UPGRADE, Values.WEBSOCKET.toString().toLowerCase()); - res.headers().set(Names.CONNECTION, "Upgrade"); - res.headers().set(Names.ORIGIN, "http://example.com"); + res.headers().set(HttpHeaderNames.HOST, "server.example.com"); + res.headers().set(HttpHeaderNames.UPGRADE, HttpHeaderValues.WEBSOCKET); + res.headers().set(HttpHeaderNames.CONNECTION, "Upgrade"); + res.headers().set(HttpHeaderNames.ORIGIN, "http://example.com"); if (ext != null) { - res.headers().set(Names.SEC_WEBSOCKET_EXTENSIONS, ext); + res.headers().set(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS, ext); } return res; diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandlerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandlerTest.java index 7fb0125872..1282f5b7ef 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandlerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandlerTest.java @@ -15,21 +15,18 @@ */ package io.netty.handler.codec.http.websocketx.extensions; -import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.*; -import io.netty.channel.ChannelHandlerContext; import io.netty.channel.embedded.EmbeddedChannel; -import io.netty.handler.codec.CodecException; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; -import io.netty.handler.codec.http.websocketx.WebSocketFrame; +import org.junit.Test; import java.util.Collections; import java.util.List; -import org.junit.Test; +import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; +import static org.easymock.EasyMock.*; +import static org.junit.Assert.*; public class WebSocketServerExtensionHandlerTest { @@ -79,14 +76,14 @@ public class WebSocketServerExtensionHandlerTest { HttpResponse res2 = ch.readOutbound(); List resExts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); // test assertEquals(1, resExts.size()); assertEquals("main", resExts.get(0).name()); assertTrue(resExts.get(0).parameters().isEmpty()); - assertTrue(ch.pipeline().get(DummyDecoder.class) != null); - assertTrue(ch.pipeline().get(DummyEncoder.class) != null); + assertNotNull(ch.pipeline().get(DummyDecoder.class)); + assertNotNull(ch.pipeline().get(DummyEncoder.class)); } @Test @@ -130,16 +127,16 @@ public class WebSocketServerExtensionHandlerTest { HttpResponse res2 = ch.readOutbound(); List resExts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); // test assertEquals(2, resExts.size()); assertEquals("main", resExts.get(0).name()); assertEquals("fallback", resExts.get(1).name()); - assertTrue(ch.pipeline().get(DummyDecoder.class) != null); - assertTrue(ch.pipeline().get(DummyEncoder.class) != null); - assertTrue(ch.pipeline().get(Dummy2Decoder.class) != null); - assertTrue(ch.pipeline().get(Dummy2Encoder.class) != null); + assertNotNull(ch.pipeline().get(DummyDecoder.class)); + assertNotNull(ch.pipeline().get(DummyEncoder.class)); + assertNotNull(ch.pipeline().get(Dummy2Decoder.class)); + assertNotNull(ch.pipeline().get(Dummy2Encoder.class)); } @Test @@ -170,7 +167,7 @@ public class WebSocketServerExtensionHandlerTest { HttpResponse res2 = ch.readOutbound(); // test - assertFalse(res2.headers().contains(Names.SEC_WEBSOCKET_EXTENSIONS)); + assertFalse(res2.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); } } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketServerCompressionHandlerTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketServerCompressionHandlerTest.java index 7182e519e0..f6a02a67ad 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketServerCompressionHandlerTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketServerCompressionHandlerTest.java @@ -15,21 +15,21 @@ */ package io.netty.handler.codec.http.websocketx.extensions.compression; -import static io.netty.handler.codec.http.websocketx.extensions.compression. - PerMessageDeflateServerExtensionHandshaker.*; -import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionData; import io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionUtil; import io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler; -import io.netty.handler.codec.http.HttpHeaders.Names; +import org.junit.Test; import java.util.List; -import org.junit.Assert; -import org.junit.Test; +import static io.netty.handler.codec.http.websocketx.extensions.WebSocketExtensionTestUtil.*; +import static io.netty.handler.codec.http.websocketx.extensions.compression. + PerMessageDeflateServerExtensionHandshaker.*; +import static org.junit.Assert.*; public class WebSocketServerCompressionHandlerTest { @@ -45,12 +45,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertTrue(exts.get(0).parameters().isEmpty()); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertTrue(exts.get(0).parameters().isEmpty()); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -66,12 +66,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertEquals("10", exts.get(0).parameters().get(CLIENT_MAX_WINDOW)); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertEquals("10", exts.get(0).parameters().get(CLIENT_MAX_WINDOW)); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -87,12 +87,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertTrue(exts.get(0).parameters().isEmpty()); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertTrue(exts.get(0).parameters().isEmpty()); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -108,12 +108,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertEquals("10", exts.get(0).parameters().get(SERVER_MAX_WINDOW)); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertEquals("10", exts.get(0).parameters().get(SERVER_MAX_WINDOW)); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -129,9 +129,9 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); - Assert.assertFalse(res2.headers().contains(Names.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) == null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) == null); + assertFalse(res2.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); + assertNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -146,9 +146,9 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); - Assert.assertFalse(res2.headers().contains(Names.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) == null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) == null); + assertFalse(res2.headers().contains(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); + assertNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -163,12 +163,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertTrue(exts.get(0).parameters().isEmpty()); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertTrue(exts.get(0).parameters().isEmpty()); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } @Test @@ -185,12 +185,12 @@ public class WebSocketServerCompressionHandlerTest { HttpResponse res2 = ch.readOutbound(); List exts = WebSocketExtensionUtil.extractExtensions( - res2.headers().getAndConvert(Names.SEC_WEBSOCKET_EXTENSIONS)); + res2.headers().getAndConvert(HttpHeaderNames.SEC_WEBSOCKET_EXTENSIONS)); - Assert.assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); - Assert.assertTrue(exts.get(0).parameters().isEmpty()); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateDecoder.class) != null); - Assert.assertTrue(ch.pipeline().get(PerMessageDeflateEncoder.class) != null); + assertEquals(PERMESSAGE_DEFLATE_EXTENSION, exts.get(0).name()); + assertTrue(exts.get(0).parameters().isEmpty()); + assertNotNull(ch.pipeline().get(PerMessageDeflateDecoder.class)); + assertNotNull(ch.pipeline().get(PerMessageDeflateEncoder.class)); } } diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java index ae4aa47918..fdeaeb40d5 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.java @@ -14,13 +14,6 @@ */ package io.netty.handler.codec.http2; -import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_ENCODING; -import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_LENGTH; -import static io.netty.handler.codec.http.HttpHeaders.Values.DEFLATE; -import static io.netty.handler.codec.http.HttpHeaders.Values.GZIP; -import static io.netty.handler.codec.http.HttpHeaders.Values.IDENTITY; -import static io.netty.handler.codec.http.HttpHeaders.Values.XDEFLATE; -import static io.netty.handler.codec.http.HttpHeaders.Values.XGZIP; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; @@ -29,6 +22,8 @@ import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.compression.ZlibCodecFactory; import io.netty.handler.codec.compression.ZlibWrapper; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; /** * A HTTP2 frame listener that will decompress data frames according to the {@code content-encoding} header for each @@ -88,9 +83,9 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor if (nextBuf == null) { listener.onDataRead(ctx, streamId, buf, padding, endOfStream); break; - } else { - listener.onDataRead(ctx, streamId, buf, padding, false); } + + listener.onDataRead(ctx, streamId, buf, padding, false); buf = nextBuf; } } @@ -125,10 +120,12 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor * @throws Http2Exception If the specified encoding is not not supported and warrants an exception */ protected EmbeddedChannel newContentDecompressor(AsciiString contentEncoding) throws Http2Exception { - if (GZIP.equalsIgnoreCase(contentEncoding) || XGZIP.equalsIgnoreCase(contentEncoding)) { + if (HttpHeaderValues.GZIP.equalsIgnoreCase(contentEncoding) || + HttpHeaderValues.X_GZIP.equalsIgnoreCase(contentEncoding)) { return new EmbeddedChannel(ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP)); } - if (DEFLATE.equalsIgnoreCase(contentEncoding) || XDEFLATE.equalsIgnoreCase(contentEncoding)) { + if (HttpHeaderValues.DEFLATE.equalsIgnoreCase(contentEncoding) || + HttpHeaderValues.X_DEFLATE.equalsIgnoreCase(contentEncoding)) { final ZlibWrapper wrapper = strict ? ZlibWrapper.ZLIB : ZlibWrapper.ZLIB_OR_NONE; // To be strict, 'deflate' means ZLIB, but some servers were not implemented correctly. return new EmbeddedChannel(ZlibCodecFactory.newZlibDecoder(wrapper)); @@ -147,7 +144,7 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor */ protected AsciiString getTargetContentEncoding(@SuppressWarnings("UnusedParameters") AsciiString contentEncoding) throws Http2Exception { - return IDENTITY; + return HttpHeaderValues.IDENTITY; } /** @@ -169,9 +166,9 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor if (decompressor == null) { if (!endOfStream) { // Determine the content encoding. - AsciiString contentEncoding = headers.get(CONTENT_ENCODING); + AsciiString contentEncoding = headers.get(HttpHeaderNames.CONTENT_ENCODING); if (contentEncoding == null) { - contentEncoding = IDENTITY; + contentEncoding = HttpHeaderValues.IDENTITY; } decompressor = newContentDecompressor(contentEncoding); if (decompressor != null) { @@ -179,10 +176,10 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor // Decode the content and remove or replace the existing headers // so that the message looks like a decoded message. AsciiString targetContentEncoding = getTargetContentEncoding(contentEncoding); - if (IDENTITY.equalsIgnoreCase(targetContentEncoding)) { - headers.remove(CONTENT_ENCODING); + if (HttpHeaderValues.IDENTITY.equalsIgnoreCase(targetContentEncoding)) { + headers.remove(HttpHeaderNames.CONTENT_ENCODING); } else { - headers.set(CONTENT_ENCODING, targetContentEncoding); + headers.set(HttpHeaderNames.CONTENT_ENCODING, targetContentEncoding); } } } @@ -193,7 +190,7 @@ public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecor // The content length will be for the compressed data. Since we will decompress the data // this content-length will not be correct. Instead of queuing messages or delaying sending // header frames...just remove the content-length header - headers.remove(CONTENT_LENGTH); + headers.remove(HttpHeaderNames.CONTENT_LENGTH); } } diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/HttpUtil.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/HttpUtil.java index 07b4009e6f..7572fe46eb 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/HttpUtil.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/HttpUtil.java @@ -22,6 +22,7 @@ import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpMessage; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; @@ -49,11 +50,11 @@ public final class HttpUtil { private static final Set HTTP_TO_HTTP2_HEADER_BLACKLIST = new HashSet() { private static final long serialVersionUID = -5678614530214167043L; { - add(HttpHeaders.Names.CONNECTION); - add(HttpHeaders.Names.KEEP_ALIVE); - add(HttpHeaders.Names.PROXY_CONNECTION); - add(HttpHeaders.Names.TRANSFER_ENCODING); - add(HttpHeaders.Names.HOST); + add(HttpHeaderNames.CONNECTION); + add(HttpHeaderNames.KEEP_ALIVE); + add(HttpHeaderNames.PROXY_CONNECTION); + add(HttpHeaderNames.TRANSFER_ENCODING); + add(HttpHeaderNames.HOST); add(ExtensionHeaderNames.STREAM_ID.text()); add(ExtensionHeaderNames.AUTHORITY.text()); add(ExtensionHeaderNames.SCHEME.text()); @@ -139,7 +140,7 @@ public final class HttpUtil { private final AsciiString text; - private ExtensionHeaderNames(String text) { + ExtensionHeaderNames(String text) { this.text = new AsciiString(text); } @@ -156,7 +157,7 @@ public final class HttpUtil { * @throws Http2Exception If there is a problem translating from HTTP/2 to HTTP/1.x */ public static HttpResponseStatus parseStatus(AsciiString status) throws Http2Exception { - HttpResponseStatus result = null; + HttpResponseStatus result; try { result = HttpResponseStatus.parseLine(status); if (result == HttpResponseStatus.SWITCHING_PROTOCOLS) { @@ -164,7 +165,7 @@ public final class HttpUtil { } } catch (Http2Exception e) { throw e; - } catch (Exception e) { + } catch (Exception ignored) { throw Http2Exception.protocolError( "Unrecognized HTTP status code '%s' encountered in translation to HTTP/1.x", status); } @@ -181,7 +182,7 @@ public final class HttpUtil { *

  • {@code false} not to validate HTTP headers in the http-codec
  • * * @return A new response object which represents headers/data - * @throws Http2Exception see {@link #addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, Map)} + * @throws Http2Exception see {@link #addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)} */ public static FullHttpResponse toHttpResponse(int streamId, Http2Headers http2Headers, boolean validateHttpHeaders) throws Http2Exception { @@ -203,7 +204,7 @@ public final class HttpUtil { *
  • {@code false} not to validate HTTP headers in the http-codec
  • * * @return A new request object which represents headers/data - * @throws Http2Exception see {@link #addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, Map)} + * @throws Http2Exception see {@link #addHttp2ToHttpHeaders(int, Http2Headers, FullHttpMessage, boolean)} */ public static FullHttpRequest toHttpRequest(int streamId, Http2Headers http2Headers, boolean validateHttpHeaders) throws Http2Exception { @@ -237,8 +238,8 @@ public final class HttpUtil { PlatformDependent.throwException(ex); } - headers.remove(HttpHeaders.Names.TRANSFER_ENCODING); - headers.remove(HttpHeaders.Names.TRAILER); + headers.remove(HttpHeaderNames.TRANSFER_ENCODING); + headers.remove(HttpHeaderNames.TRAILER); if (!addToTrailer) { headers.setInt(ExtensionHeaderNames.STREAM_ID.text(), streamId); HttpHeaderUtil.setKeepAlive(destinationMessage, true); @@ -256,7 +257,7 @@ public final class HttpUtil { out.path(new AsciiString(request.uri())); out.method(new AsciiString(request.method().toString())); - String value = inHeaders.getAndConvert(HttpHeaders.Names.HOST); + String value = inHeaders.getAndConvert(HttpHeaderNames.HOST); if (value != null) { URI hostUri = URI.create(value); // The authority MUST NOT include the deprecated "userinfo" subcomponent @@ -336,7 +337,7 @@ public final class HttpUtil { * @param request if {@code true}, translates headers using the request translation map. Otherwise uses the * response translation map. */ - public Http2ToHttpHeaderTranslator(HttpHeaders output, boolean request) { + Http2ToHttpHeaderTranslator(HttpHeaders output, boolean request) { this.output = output; translations = request ? REQUEST_HEADER_TRANSLATIONS : RESPONSE_HEADER_TRANSLATIONS; } diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter.java index 293435240b..239bb6fdf1 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter.java @@ -14,18 +14,19 @@ */ package io.netty.handler.codec.http2; -import static io.netty.util.internal.ObjectUtil.checkNotNull; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.TooLongFrameException; import io.netty.handler.codec.http.FullHttpMessage; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; -import io.netty.handler.codec.http.HttpHeaders; import io.netty.util.collection.IntObjectHashMap; import io.netty.util.collection.IntObjectMap; +import static io.netty.util.internal.ObjectUtil.*; + /** * This adapter provides just header/data events from the HTTP message flow defined * here HTTP/2 Spec Message Flow @@ -36,8 +37,9 @@ public class InboundHttp2ToHttpAdapter extends Http2EventAdapter { public boolean mustSendImmediately(FullHttpMessage msg) { if (msg instanceof FullHttpResponse) { return ((FullHttpResponse) msg).status().isInformational(); - } else if (msg instanceof FullHttpRequest) { - return ((FullHttpRequest) msg).headers().contains(HttpHeaders.Names.EXPECT); + } + if (msg instanceof FullHttpRequest) { + return msg.headers().contains(HttpHeaderNames.EXPECT); } return false; } @@ -46,7 +48,7 @@ public class InboundHttp2ToHttpAdapter extends Http2EventAdapter { public FullHttpMessage copyIfNeeded(FullHttpMessage msg) { if (msg instanceof FullHttpRequest) { FullHttpRequest copy = ((FullHttpRequest) msg).copy(null); - copy.headers().remove(HttpHeaders.Names.EXPECT); + copy.headers().remove(HttpHeaderNames.EXPECT); return copy; } return null; @@ -172,7 +174,6 @@ public class InboundHttp2ToHttpAdapter extends Http2EventAdapter { *
  • {@code true} to validate HTTP headers in the http-codec
  • *
  • {@code false} not to validate HTTP headers in the http-codec
  • * - * @return * @throws Http2Exception */ protected FullHttpMessage newMessage(int streamId, Http2Headers headers, boolean validateHttpHeaders) @@ -334,7 +335,7 @@ public class InboundHttp2ToHttpAdapter extends Http2EventAdapter { * with a 'Expect: 100-continue' header. The message will be sent immediately, * and the data will be queued and sent at the end of the stream. * - * @param msg The message which has just been sent due to {@link #mustSendImmediatley} + * @param msg The message which has just been sent due to {@link #mustSendImmediately(FullHttpMessage)} * @return A modified copy of the {@code msg} or {@code null} if a copy is not needed. */ FullHttpMessage copyIfNeeded(FullHttpMessage msg); diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/DataCompressionHttp2Test.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/DataCompressionHttp2Test.java index d5f6d6e4a3..ca5fb29f8b 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/DataCompressionHttp2Test.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/DataCompressionHttp2Test.java @@ -14,18 +14,6 @@ */ package io.netty.handler.codec.http2; -import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_ENCODING; -import static io.netty.handler.codec.http.HttpHeaders.Values.DEFLATE; -import static io.netty.handler.codec.http.HttpHeaders.Values.GZIP; -import static io.netty.handler.codec.http2.Http2TestUtil.as; -import static io.netty.handler.codec.http2.Http2TestUtil.runInChannel; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; @@ -45,15 +33,10 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.AsciiString; import io.netty.handler.codec.compression.ZlibCodecFactory; import io.netty.handler.codec.compression.ZlibWrapper; -import io.netty.handler.codec.http2.Http2TestUtil.Http2Runnable; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.util.NetUtil; import io.netty.util.concurrent.Future; - -import java.net.InetSocketAddress; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -61,6 +44,15 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import static io.netty.handler.codec.http2.Http2TestUtil.*; +import static java.util.concurrent.TimeUnit.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + /** * Test for data decompression in the HTTP/2 codec. */ @@ -84,8 +76,8 @@ public class DataCompressionHttp2Test { private Channel clientChannel; private volatile CountDownLatch serverLatch; private volatile CountDownLatch clientLatch; - private Http2TestUtil.FrameAdapter serverAdapter; - private Http2TestUtil.FrameAdapter clientAdapter; + private FrameAdapter serverAdapter; + private FrameAdapter clientAdapter; private Http2Connection serverConnection; @Before @@ -102,9 +94,9 @@ public class DataCompressionHttp2Test { dataCapture = null; } serverChannel.close().sync(); - Future serverGroup = sb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future clientGroup = cb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); + Future serverGroup = sb.group().shutdownGracefully(0, 0, MILLISECONDS); + Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, MILLISECONDS); + Future clientGroup = cb.group().shutdownGracefully(0, 0, MILLISECONDS); serverGroup.sync(); serverChildGroup.sync(); clientGroup.sync(); @@ -117,10 +109,11 @@ public class DataCompressionHttp2Test { public void justHeadersNoData() throws Exception { bootstrapEnv(2, 1); final Http2Headers headers = - new DefaultHttp2Headers().method(GET).path(PATH).set(CONTENT_ENCODING, GZIP); + new DefaultHttp2Headers().method(GET).path(PATH) + .set(HttpHeaderNames.CONTENT_ENCODING, HttpHeaderValues.GZIP); // Required because the decompressor intercepts the onXXXRead events before // our {@link Http2TestUtil$FrameAdapter} does. - Http2TestUtil.FrameAdapter.getOrCreateStream(serverConnection, 3, false); + FrameAdapter.getOrCreateStream(serverConnection, 3, false); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -141,10 +134,11 @@ public class DataCompressionHttp2Test { try { final ByteBuf encodedData = encodeData(data, encoder); final Http2Headers headers = - new DefaultHttp2Headers().method(POST).path(PATH).set(CONTENT_ENCODING.toLowerCase(), GZIP); + new DefaultHttp2Headers().method(POST).path(PATH) + .set(HttpHeaderNames.CONTENT_ENCODING, HttpHeaderValues.GZIP); // Required because the decompressor intercepts the onXXXRead events before // our {@link Http2TestUtil$FrameAdapter} does. - Http2TestUtil.FrameAdapter.getOrCreateStream(serverConnection, 3, false); + FrameAdapter.getOrCreateStream(serverConnection, 3, false); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -175,10 +169,11 @@ public class DataCompressionHttp2Test { try { final ByteBuf encodedData = encodeData(data, encoder); final Http2Headers headers = - new DefaultHttp2Headers().method(POST).path(PATH).set(CONTENT_ENCODING.toLowerCase(), GZIP); + new DefaultHttp2Headers().method(POST).path(PATH) + .set(HttpHeaderNames.CONTENT_ENCODING, HttpHeaderValues.GZIP); // Required because the decompressor intercepts the onXXXRead events before // our {@link Http2TestUtil$FrameAdapter} does. - Http2TestUtil.FrameAdapter.getOrCreateStream(serverConnection, 3, false); + FrameAdapter.getOrCreateStream(serverConnection, 3, false); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -212,10 +207,11 @@ public class DataCompressionHttp2Test { final ByteBuf encodedData1 = encodeData(data1, encoder); final ByteBuf encodedData2 = encodeData(data2, encoder); final Http2Headers headers = - new DefaultHttp2Headers().method(POST).path(PATH).set(CONTENT_ENCODING.toLowerCase(), GZIP); + new DefaultHttp2Headers().method(POST).path(PATH) + .set(HttpHeaderNames.CONTENT_ENCODING, HttpHeaderValues.GZIP); // Required because the decompressor intercepts the onXXXRead events before // our {@link Http2TestUtil$FrameAdapter} does. - Http2TestUtil.FrameAdapter.getOrCreateStream(serverConnection, 3, false); + FrameAdapter.getOrCreateStream(serverConnection, 3, false); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -258,7 +254,7 @@ public class DataCompressionHttp2Test { final ByteBuf encodedData = encodeData(data, encoder); final Http2Headers headers = new DefaultHttp2Headers().method(POST).path(PATH) - .set(CONTENT_ENCODING.toLowerCase(), DEFLATE); + .set(HttpHeaderNames.CONTENT_ENCODING, HttpHeaderValues.DEFLATE); final Http2Settings settings = new Http2Settings(); // Assume the compression operation will reduce the size by at least 10 bytes settings.initialWindowSize(BUFFER_SIZE - 10); @@ -273,7 +269,7 @@ public class DataCompressionHttp2Test { // Required because the decompressor intercepts the onXXXRead events before // our {@link Http2TestUtil$FrameAdapter} does. - Http2TestUtil.FrameAdapter.getOrCreateStream(serverConnection, 3, false); + FrameAdapter.getOrCreateStream(serverConnection, 3, false); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -336,18 +332,20 @@ public class DataCompressionHttp2Test { frameWriter = new DefaultHttp2FrameWriter(); serverConnection = new DefaultHttp2Connection(true); + final CountDownLatch latch = new CountDownLatch(1); sb.group(new NioEventLoopGroup(), new NioEventLoopGroup()); sb.channel(NioServerSocketChannel.class); sb.childHandler(new ChannelInitializer() { @Override protected void initChannel(Channel ch) throws Exception { ChannelPipeline p = ch.pipeline(); - serverAdapter = new Http2TestUtil.FrameAdapter(serverConnection, + serverAdapter = new FrameAdapter(serverConnection, new DelegatingDecompressorFrameListener(serverConnection, serverListener), serverLatch); p.addLast("reader", serverAdapter); p.addLast(Http2CodecUtil.ignoreSettingsHandler()); serverConnectedChannel = ch; + latch.countDown(); } }); @@ -357,7 +355,7 @@ public class DataCompressionHttp2Test { @Override protected void initChannel(Channel ch) throws Exception { ChannelPipeline p = ch.pipeline(); - clientAdapter = new Http2TestUtil.FrameAdapter(clientListener, clientLatch); + clientAdapter = new FrameAdapter(clientListener, clientLatch); p.addLast("reader", clientAdapter); p.addLast(Http2CodecUtil.ignoreSettingsHandler()); } @@ -369,6 +367,8 @@ public class DataCompressionHttp2Test { ChannelFuture ccf = cb.connect(new InetSocketAddress(NetUtil.LOCALHOST, port)); assertTrue(ccf.awaitUninterruptibly().isSuccess()); clientChannel = ccf.channel(); + + assertTrue(latch.await(5, SECONDS)); } private void awaitClient() throws Exception { diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersDecoderTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersDecoderTest.java index 423082fb15..dd553feeb9 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersDecoderTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersDecoderTest.java @@ -15,19 +15,17 @@ package io.netty.handler.codec.http2; -import static io.netty.handler.codec.http2.Http2TestUtil.as; -import static io.netty.handler.codec.http2.Http2TestUtil.randomBytes; -import static io.netty.util.CharsetUtil.UTF_8; -import static org.junit.Assert.assertEquals; +import com.twitter.hpack.Encoder; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; - -import java.io.ByteArrayOutputStream; - import org.junit.Before; import org.junit.Test; -import com.twitter.hpack.Encoder; +import java.io.ByteArrayOutputStream; + +import static io.netty.handler.codec.http2.Http2TestUtil.*; +import static io.netty.util.CharsetUtil.*; +import static org.junit.Assert.*; /** * Tests for {@link DefaultHttp2HeadersDecoder}. @@ -54,11 +52,11 @@ public class DefaultHttp2HeadersDecoderTest { } } - private byte[] b(String string) { + private static byte[] b(String string) { return string.getBytes(UTF_8); } - private ByteBuf encode(byte[]... entries) throws Exception { + private static ByteBuf encode(byte[]... entries) throws Exception { Encoder encoder = new Encoder(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (int ix = 0; ix < entries.length;) { diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2ToHttpConnectionHandlerTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2ToHttpConnectionHandlerTest.java index ffa7bb2220..748060c4ae 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2ToHttpConnectionHandlerTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2ToHttpConnectionHandlerTest.java @@ -14,23 +14,6 @@ */ package io.netty.handler.codec.http2; -import static io.netty.handler.codec.http.HttpMethod.GET; -import static io.netty.handler.codec.http.HttpMethod.POST; -import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; -import static io.netty.handler.codec.http2.Http2CodecUtil.ignoreSettingsHandler; -import static io.netty.handler.codec.http2.Http2TestUtil.as; -import static io.netty.util.CharsetUtil.UTF_8; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyShort; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; @@ -46,18 +29,11 @@ import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequest; import io.netty.util.NetUtil; import io.netty.util.concurrent.Future; - -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -66,6 +42,21 @@ import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import static io.netty.handler.codec.http.HttpMethod.*; +import static io.netty.handler.codec.http.HttpVersion.*; +import static io.netty.handler.codec.http2.Http2CodecUtil.*; +import static io.netty.handler.codec.http2.Http2TestUtil.*; +import static io.netty.util.CharsetUtil.*; +import static java.util.concurrent.TimeUnit.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + /** * Testing the {@link Http2ToHttpConnectionHandler} for {@link FullHttpRequest} objects into HTTP/2 frames */ @@ -82,7 +73,7 @@ public class DefaultHttp2ToHttpConnectionHandlerTest { private Channel serverChannel; private Channel clientChannel; private volatile CountDownLatch requestLatch; - private Http2TestUtil.FrameCountDown serverFrameCountDown; + private FrameCountDown serverFrameCountDown; @Before public void setup() throws Exception { @@ -92,9 +83,9 @@ public class DefaultHttp2ToHttpConnectionHandlerTest { @After public void teardown() throws Exception { serverChannel.close().sync(); - Future serverGroup = sb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future clientGroup = cb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); + Future serverGroup = sb.group().shutdownGracefully(0, 0, MILLISECONDS); + Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, MILLISECONDS); + Future clientGroup = cb.group().shutdownGracefully(0, 0, MILLISECONDS); serverGroup.sync(); serverChildGroup.sync(); clientGroup.sync(); @@ -107,7 +98,7 @@ public class DefaultHttp2ToHttpConnectionHandlerTest { try { final HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 5); - httpHeaders.set(HttpHeaders.Names.HOST, + httpHeaders.set(HttpHeaderNames.HOST, "http://my-user_name@www.example.org:5555/example"); httpHeaders.set(HttpUtil.ExtensionHeaderNames.AUTHORITY.text(), "www.example.org:5555"); httpHeaders.set(HttpUtil.ExtensionHeaderNames.SCHEME.text(), "http"); @@ -153,7 +144,7 @@ public class DefaultHttp2ToHttpConnectionHandlerTest { try { final HttpRequest request = new DefaultFullHttpRequest(HTTP_1_1, POST, "/example", data.retain()); final HttpHeaders httpHeaders = request.headers(); - httpHeaders.set(HttpHeaders.Names.HOST, "http://your_user-name123@www.example.org:5555/example"); + httpHeaders.set(HttpHeaderNames.HOST, "http://your_user-name123@www.example.org:5555/example"); httpHeaders.add("foo", "goo"); httpHeaders.add("foo", "goo2"); httpHeaders.add("foo2", "goo2"); @@ -193,7 +184,7 @@ public class DefaultHttp2ToHttpConnectionHandlerTest { @Override protected void initChannel(Channel ch) throws Exception { ChannelPipeline p = ch.pipeline(); - serverFrameCountDown = new Http2TestUtil.FrameCountDown(serverListener, requestLatch); + serverFrameCountDown = new FrameCountDown(serverListener, requestLatch); p.addLast(new Http2ToHttpConnectionHandler(true, serverFrameCountDown)); p.addLast(ignoreSettingsHandler()); } diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapterTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapterTest.java index e03e1966f0..faa037269d 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapterTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/InboundHttp2ToHttpAdapterTest.java @@ -14,14 +14,6 @@ */ package io.netty.handler.codec.http2; -import static io.netty.handler.codec.http2.Http2TestUtil.as; -import static io.netty.handler.codec.http2.Http2TestUtil.runInChannel; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; @@ -40,20 +32,15 @@ import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpMessage; import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObject; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; -import io.netty.handler.codec.http2.Http2TestUtil.Http2Runnable; import io.netty.util.NetUtil; import io.netty.util.concurrent.Future; - -import java.net.InetSocketAddress; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -61,6 +48,15 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.net.InetSocketAddress; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import static io.netty.handler.codec.http2.Http2TestUtil.*; +import static java.util.concurrent.TimeUnit.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + /** * Testing the {@link InboundHttp2ToHttpPriorityAdapter} and base class {@link InboundHttp2ToHttpAdapter} for HTTP/2 * frames into {@link HttpObject}s @@ -148,9 +144,9 @@ public class InboundHttp2ToHttpAdapterTest { cleanupCapturedRequests(); cleanupCapturedResponses(); serverChannel.close().sync(); - Future serverGroup = sb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); - Future clientGroup = cb.group().shutdownGracefully(0, 0, TimeUnit.MILLISECONDS); + Future serverGroup = sb.group().shutdownGracefully(0, 0, MILLISECONDS); + Future serverChildGroup = sb.childGroup().shutdownGracefully(0, 0, MILLISECONDS); + Future clientGroup = cb.group().shutdownGracefully(0, 0, MILLISECONDS); serverGroup.sync(); serverChildGroup.sync(); clientGroup.sync(); @@ -170,7 +166,7 @@ public class InboundHttp2ToHttpAdapterTest { httpHeaders.set(HttpUtil.ExtensionHeaderNames.SCHEME.text(), "https"); httpHeaders.set(HttpUtil.ExtensionHeaderNames.AUTHORITY.text(), "example.org"); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("GET")).scheme(as("https")) .authority(as("example.org")) @@ -201,7 +197,7 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("GET")) .path(as("/some/path/resource2")); runInChannel(clientChannel, new Http2Runnable() { @@ -231,7 +227,7 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("GET")) .path(as("/some/path/resource2")); final int midPoint = text.length() / 2; @@ -265,7 +261,7 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("GET")) .path(as("/some/path/resource2")); runInChannel(clientChannel, new Http2Runnable() { @@ -299,7 +295,7 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); HttpHeaders trailingHeaders = request.trailingHeaders(); trailingHeaders.set("FoO", "goo"); trailingHeaders.set("foO2", "goo2"); @@ -339,7 +335,7 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); HttpHeaders trailingHeaders = request.trailingHeaders(); trailingHeaders.set("Foo", "goo"); trailingHeaders.set("fOo2", "goo2"); @@ -384,12 +380,12 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); HttpHeaders httpHeaders2 = request2.headers(); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 5); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_DEPENDENCY_ID.text(), 3); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_WEIGHT.text(), 123); - httpHeaders2.setInt(HttpHeaders.Names.CONTENT_LENGTH, text2.length()); + httpHeaders2.setInt(HttpHeaderNames.CONTENT_LENGTH, text2.length()); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("PUT")) .path(as("/some/path/resource")); final Http2Headers http2Headers2 = new DefaultHttp2Headers().method(as("PUT")) @@ -433,10 +429,10 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); HttpHeaders httpHeaders2 = request2.headers(); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 5); - httpHeaders2.setInt(HttpHeaders.Names.CONTENT_LENGTH, text2.length()); + httpHeaders2.setInt(HttpHeaderNames.CONTENT_LENGTH, text2.length()); final Http2Headers http2Headers = new DefaultHttp2Headers().method(as("PUT")) .path(as("/some/path/resource")); final Http2Headers http2Headers2 = new DefaultHttp2Headers().method(as("PUT")) @@ -445,7 +441,7 @@ public class InboundHttp2ToHttpAdapterTest { httpHeaders3.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 5); httpHeaders3.setInt(HttpUtil.ExtensionHeaderNames.STREAM_DEPENDENCY_ID.text(), 3); httpHeaders3.setInt(HttpUtil.ExtensionHeaderNames.STREAM_WEIGHT.text(), 222); - httpHeaders3.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders3.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -487,17 +483,17 @@ public class InboundHttp2ToHttpAdapterTest { try { HttpHeaders httpHeaders = response.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); HttpHeaders httpHeaders2 = response2.headers(); httpHeaders2.set(HttpUtil.ExtensionHeaderNames.SCHEME.text(), "https"); httpHeaders2.set(HttpUtil.ExtensionHeaderNames.AUTHORITY.text(), "example.org"); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 5); httpHeaders2.setInt(HttpUtil.ExtensionHeaderNames.STREAM_PROMISE_ID.text(), 3); - httpHeaders2.setInt(HttpHeaders.Names.CONTENT_LENGTH, text2.length()); + httpHeaders2.setInt(HttpHeaderNames.CONTENT_LENGTH, text2.length()); httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); final Http2Headers http2Headers3 = new DefaultHttp2Headers().method(as("GET")) .path(as("/push/test")); runInChannel(clientChannel, new Http2Runnable() { @@ -546,14 +542,13 @@ public class InboundHttp2ToHttpAdapterTest { true); HttpHeaders httpHeaders = request.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.set(HttpHeaders.Names.EXPECT, HttpHeaders.Values.CONTINUE); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders.set(HttpHeaderNames.EXPECT, HttpHeaderValues.CONTINUE); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); final Http2Headers http2Headers = new DefaultHttp2Headers() .method(as("PUT")) .path(as("/info/test")) - .set(as(HttpHeaders.Names.EXPECT.toString()), - as(HttpHeaders.Values.CONTINUE.toString())); + .set(as(HttpHeaderNames.EXPECT.toString()), as(HttpHeaderValues.CONTINUE.toString())); final FullHttpMessage response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE); final String text = "a big payload"; final ByteBuf payload = Unpooled.copiedBuffer(text.getBytes()); @@ -578,7 +573,7 @@ public class InboundHttp2ToHttpAdapterTest { httpHeaders = response.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); final Http2Headers http2HeadersResponse = new DefaultHttp2Headers().status(as("100")); runInChannel(serverConnectedChannel, new Http2Runnable() { @Override @@ -597,8 +592,8 @@ public class InboundHttp2ToHttpAdapterTest { setServerLatch(1); httpHeaders = request2.headers(); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, text.length()); - httpHeaders.remove(HttpHeaders.Names.EXPECT); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, text.length()); + httpHeaders.remove(HttpHeaderNames.EXPECT); runInChannel(clientChannel, new Http2Runnable() { @Override public void run() { @@ -615,7 +610,7 @@ public class InboundHttp2ToHttpAdapterTest { setClientLatch(1); httpHeaders = response2.headers(); httpHeaders.setInt(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), 3); - httpHeaders.setInt(HttpHeaders.Names.CONTENT_LENGTH, 0); + httpHeaders.setInt(HttpHeaderNames.CONTENT_LENGTH, 0); final Http2Headers http2HeadersResponse2 = new DefaultHttp2Headers().status(as("200")); runInChannel(serverConnectedChannel, new Http2Runnable() { @Override @@ -697,11 +692,11 @@ public class InboundHttp2ToHttpAdapterTest { void messageReceived(HttpObject obj); } - private final class HttpResponseDelegator extends SimpleChannelInboundHandler { + private static final class HttpResponseDelegator extends SimpleChannelInboundHandler { private final HttpResponseListener listener; private volatile CountDownLatch latch; - public HttpResponseDelegator(HttpResponseListener listener, CountDownLatch latch) { + HttpResponseDelegator(HttpResponseListener listener, CountDownLatch latch) { super(false); this.listener = listener; this.latch = latch; @@ -709,8 +704,8 @@ public class InboundHttp2ToHttpAdapterTest { @Override protected void messageReceived(ChannelHandlerContext ctx, HttpObject msg) throws Exception { - this.listener.messageReceived(msg); - this.latch.countDown(); + listener.messageReceived(msg); + latch.countDown(); } public void latch(CountDownLatch latch) { @@ -718,7 +713,7 @@ public class InboundHttp2ToHttpAdapterTest { } } - private final class HttpAdapterFrameAdapter extends Http2TestUtil.FrameAdapter { + private static final class HttpAdapterFrameAdapter extends FrameAdapter { HttpAdapterFrameAdapter(Http2Connection connection, Http2FrameListener listener, CountDownLatch latch) { super(connection, listener, latch); } diff --git a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java index 6f1286796a..f30fd5c215 100644 --- a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java +++ b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java @@ -28,9 +28,9 @@ import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.DefaultHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; -import io.netty.handler.codec.http.HttpHeaderUtil; import io.netty.handler.codec.http.HttpChunkedInput; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderUtil; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.LastHttpContent; @@ -53,7 +53,7 @@ import java.util.Locale; import java.util.TimeZone; import java.util.regex.Pattern; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; +import static io.netty.handler.codec.http.HttpHeaderNames.*; import static io.netty.handler.codec.http.HttpMethod.*; import static io.netty.handler.codec.http.HttpResponseStatus.*; import static io.netty.handler.codec.http.HttpVersion.*; @@ -179,7 +179,7 @@ public class HttpStaticFileServerHandler extends SimpleChannelInboundHandler response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes()); // Add keep alive header as per: // - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection - response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE); + response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE); } // Encode the cookie. diff --git a/example/src/main/java/io/netty/example/http/upload/HttpUploadClient.java b/example/src/main/java/io/netty/example/http/upload/HttpUploadClient.java index 31d402bb1d..89f4560cac 100644 --- a/example/src/main/java/io/netty/example/http/upload/HttpUploadClient.java +++ b/example/src/main/java/io/netty/example/http/upload/HttpUploadClient.java @@ -24,6 +24,8 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.http.ClientCookieEncoder; import io.netty.handler.codec.http.DefaultCookie; import io.netty.handler.codec.http.DefaultHttpRequest; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpRequest; @@ -162,21 +164,21 @@ public final class HttpUploadClient { URI uriGet = new URI(encoder.toString()); HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, uriGet.toASCIIString()); HttpHeaders headers = request.headers(); - headers.set(HttpHeaders.Names.HOST, host); - headers.set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE); - headers.set(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP + "," + HttpHeaders.Values.DEFLATE); + headers.set(HttpHeaderNames.HOST, host); + headers.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); + headers.set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP + "," + HttpHeaderValues.DEFLATE); - headers.set(HttpHeaders.Names.ACCEPT_CHARSET, "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); - headers.set(HttpHeaders.Names.ACCEPT_LANGUAGE, "fr"); - headers.set(HttpHeaders.Names.REFERER, uriSimple.toString()); - headers.set(HttpHeaders.Names.USER_AGENT, "Netty Simple Http Client side"); - headers.set(HttpHeaders.Names.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + headers.set(HttpHeaderNames.ACCEPT_CHARSET, "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); + headers.set(HttpHeaderNames.ACCEPT_LANGUAGE, "fr"); + headers.set(HttpHeaderNames.REFERER, uriSimple.toString()); + headers.set(HttpHeaderNames.USER_AGENT, "Netty Simple Http Client side"); + headers.set(HttpHeaderNames.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); //connection will not close but needed // headers.set("Connection","keep-alive"); headers.set( - HttpHeaders.Names.COOKIE, ClientCookieEncoder.encode( + HttpHeaderNames.COOKIE, ClientCookieEncoder.encode( new DefaultCookie("my-cookie", "foo"), new DefaultCookie("another-cookie", "bar")) ); diff --git a/example/src/main/java/io/netty/example/http/upload/HttpUploadServerHandler.java b/example/src/main/java/io/netty/example/http/upload/HttpUploadServerHandler.java index eeae2c5a82..bf70ec4a5e 100644 --- a/example/src/main/java/io/netty/example/http/upload/HttpUploadServerHandler.java +++ b/example/src/main/java/io/netty/example/http/upload/HttpUploadServerHandler.java @@ -26,8 +26,9 @@ import io.netty.handler.codec.http.CookieDecoder; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; -import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpHeaderValues; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObject; import io.netty.handler.codec.http.HttpRequest; @@ -60,7 +61,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import static io.netty.buffer.Unpooled.*; -import static io.netty.handler.codec.http.HttpHeaders.Names.*; public class HttpUploadServerHandler extends SimpleChannelInboundHandler { @@ -120,7 +120,7 @@ public class HttpUploadServerHandler extends SimpleChannelInboundHandler cookies; - String value = request.headers().getAndConvert(COOKIE); + String value = request.headers().getAndConvert(HttpHeaderNames.COOKIE); if (value == null) { cookies = Collections.emptySet(); } else { @@ -287,23 +287,23 @@ public class HttpUploadServerHandler extends SimpleChannelInboundHandler cookies; - String value = request.headers().getAndConvert(COOKIE); + String value = request.headers().getAndConvert(HttpHeaderNames.COOKIE); if (value == null) { cookies = Collections.emptySet(); } else { @@ -312,7 +312,7 @@ public class HttpUploadServerHandler extends SimpleChannelInboundHandler { if (!keepAlive) { ctx.write(response).addListener(ChannelFutureListener.CLOSE); } else { - response.headers().set(CONNECTION, Values.KEEP_ALIVE); + response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE); ctx.write(response); } } diff --git a/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java b/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java index 4cd9de41c4..55e450c0ed 100644 --- a/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java +++ b/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java @@ -25,7 +25,7 @@ import io.netty.handler.codec.base64.Base64; import io.netty.handler.codec.http.DefaultFullHttpRequest; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpClientCodec; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponseStatus; @@ -127,11 +127,11 @@ public final class HttpProxyHandler extends ProxyHandler { SocketAddress proxyAddress = proxyAddress(); if (proxyAddress instanceof InetSocketAddress) { InetSocketAddress hostAddr = (InetSocketAddress) proxyAddress; - req.headers().set(Names.HOST, hostAddr.getHostString() + ':' + hostAddr.getPort()); + req.headers().set(HttpHeaderNames.HOST, hostAddr.getHostString() + ':' + hostAddr.getPort()); } if (authorization != null) { - req.headers().set(Names.AUTHORIZATION, authorization); + req.headers().set(HttpHeaderNames.AUTHORIZATION, authorization); } return req; diff --git a/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java b/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java index 7cd96eb74c..5448d4c0f1 100644 --- a/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java +++ b/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java @@ -26,7 +26,7 @@ import io.netty.handler.codec.base64.Base64; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; -import io.netty.handler.codec.http.HttpHeaders.Names; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; @@ -86,7 +86,7 @@ final class HttpProxyServer extends ProxyServer { boolean authzSuccess = false; if (username != null) { - CharSequence authz = req.headers().get(Names.AUTHORIZATION); + CharSequence authz = req.headers().get(HttpHeaderNames.AUTHORIZATION); if (authz != null) { ByteBuf authzBuf64 = Unpooled.copiedBuffer(authz, CharsetUtil.US_ASCII); ByteBuf authzBuf = Base64.decode(authzBuf64); @@ -113,7 +113,7 @@ final class HttpProxyServer extends ProxyServer { FullHttpResponse res; if (!authenticate(ctx, req)) { res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.UNAUTHORIZED); - res.headers().setInt(Names.CONTENT_LENGTH, 0); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 0); } else { res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); String uri = req.uri(); @@ -144,10 +144,10 @@ final class HttpProxyServer extends ProxyServer { if (!authenticate(ctx, req)) { res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.UNAUTHORIZED); - res.headers().setInt(Names.CONTENT_LENGTH, 0); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 0); } else if (!req.uri().equals(destination.getHostString() + ':' + destination.getPort())) { res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN); - res.headers().setInt(Names.CONTENT_LENGTH, 0); + res.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 0); } else { res = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); sendGreeting = true; diff --git a/testsuite/src/test/java/io/netty/testsuite/websockets/autobahn/AutobahnServerHandler.java b/testsuite/src/test/java/io/netty/testsuite/websockets/autobahn/AutobahnServerHandler.java index b127e179d8..6944ab51a9 100644 --- a/testsuite/src/test/java/io/netty/testsuite/websockets/autobahn/AutobahnServerHandler.java +++ b/testsuite/src/test/java/io/netty/testsuite/websockets/autobahn/AutobahnServerHandler.java @@ -24,6 +24,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.HttpHeaderUtil; import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame; import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame; @@ -40,7 +41,6 @@ import io.netty.util.internal.StringUtil; import java.util.logging.Level; import java.util.logging.Logger; -import static io.netty.handler.codec.http.HttpHeaders.*; import static io.netty.handler.codec.http.HttpMethod.*; import static io.netty.handler.codec.http.HttpResponseStatus.*; import static io.netty.handler.codec.http.HttpVersion.*; @@ -143,6 +143,6 @@ public class AutobahnServerHandler extends ChannelHandlerAdapter { } private static String getWebSocketLocation(FullHttpRequest req) { - return "ws://" + req.headers().get(Names.HOST); + return "ws://" + req.headers().get(HttpHeaderNames.HOST); } }