diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpMethod.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpMethod.java index 8d5f3878bf..35782663cd 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpMethod.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpMethod.java @@ -15,76 +15,75 @@ */ package io.netty.handler.codec.http; -import io.netty.buffer.ByteBuf; -import io.netty.util.CharsetUtil; +import io.netty.handler.codec.AsciiString; import java.util.HashMap; import java.util.Map; /** - * The request getMethod of HTTP or its derived protocols, such as + * The request method of HTTP or its derived protocols, such as * RTSP and * ICAP. */ public class HttpMethod implements Comparable { /** - * The OPTIONS getMethod represents a request for information about the communication options - * available on the request/response chain identified by the Request-URI. This getMethod allows + * The OPTIONS method represents a request for information about the communication options + * available on the request/response chain identified by the Request-URI. This method allows * the client to determine the options and/or requirements associated with a resource, or the * capabilities of a server, without implying a resource action or initiating a resource * retrieval. */ - public static final HttpMethod OPTIONS = new HttpMethod("OPTIONS", true); + public static final HttpMethod OPTIONS = new HttpMethod("OPTIONS"); /** - * The GET getMethod means retrieve whatever information (in the form of an entity) is identified + * The GET method means retrieve whatever information (in the form of an entity) is identified * by the Request-URI. If the Request-URI refers to a data-producing process, it is the * produced data which shall be returned as the entity in the response and not the source text * of the process, unless that text happens to be the output of the process. */ - public static final HttpMethod GET = new HttpMethod("GET", true); + public static final HttpMethod GET = new HttpMethod("GET"); /** - * The HEAD getMethod is identical to GET except that the server MUST NOT return a message-body + * The HEAD method is identical to GET except that the server MUST NOT return a message-body * in the response. */ - public static final HttpMethod HEAD = new HttpMethod("HEAD", true); + public static final HttpMethod HEAD = new HttpMethod("HEAD"); /** - * The POST getMethod is used to request that the origin server accept the entity enclosed in the + * The POST method is used to request that the origin server accept the entity enclosed in the * request as a new subordinate of the resource identified by the Request-URI in the * Request-Line. */ - public static final HttpMethod POST = new HttpMethod("POST", true); + public static final HttpMethod POST = new HttpMethod("POST"); /** - * The PUT getMethod requests that the enclosed entity be stored under the supplied Request-URI. + * The PUT method requests that the enclosed entity be stored under the supplied Request-URI. */ - public static final HttpMethod PUT = new HttpMethod("PUT", true); + public static final HttpMethod PUT = new HttpMethod("PUT"); /** - * The PATCH getMethod requests that a set of changes described in the + * The PATCH method requests that a set of changes described in the * request entity be applied to the resource identified by the Request-URI. */ - public static final HttpMethod PATCH = new HttpMethod("PATCH", true); + public static final HttpMethod PATCH = new HttpMethod("PATCH"); /** - * The DELETE getMethod requests that the origin server delete the resource identified by the + * The DELETE method requests that the origin server delete the resource identified by the * Request-URI. */ - public static final HttpMethod DELETE = new HttpMethod("DELETE", true); + public static final HttpMethod DELETE = new HttpMethod("DELETE"); /** - * The TRACE getMethod is used to invoke a remote, application-layer loop- back of the request + * The TRACE method is used to invoke a remote, application-layer loop- back of the request * message. */ - public static final HttpMethod TRACE = new HttpMethod("TRACE", true); + public static final HttpMethod TRACE = new HttpMethod("TRACE"); /** - * This specification reserves the getMethod name CONNECT for use with a proxy that can dynamically + * This specification reserves the method name CONNECT for use with a proxy that can dynamically * switch to being a tunnel */ - public static final HttpMethod CONNECT = new HttpMethod("CONNECT", true); + public static final HttpMethod CONNECT = new HttpMethod("CONNECT"); private static final Map methodMap = new HashMap(); @@ -103,7 +102,7 @@ public class HttpMethod implements Comparable { /** * Returns the {@link HttpMethod} represented by the specified name. - * If the specified name is a standard HTTP getMethod name, a cached instance + * If the specified name is a standard HTTP method name, a cached instance * will be returned. Otherwise, a new instance will be returned. */ public static HttpMethod valueOf(String name) { @@ -124,21 +123,17 @@ public class HttpMethod implements Comparable { } } - private final String name; - private final byte[] bytes; + private final AsciiString name; + private final String nameAsString; /** - * Creates a new HTTP getMethod with the specified name. You will not need to - * create a new getMethod unless you are implementing a protocol derived from + * Creates a new HTTP method with the specified name. You will not need to + * create a new method unless you are implementing a protocol derived from * HTTP, such as * RTSP and * ICAP */ public HttpMethod(String name) { - this(name, false); - } - - private HttpMethod(String name, boolean bytes) { if (name == null) { throw new NullPointerException("name"); } @@ -155,18 +150,14 @@ public class HttpMethod implements Comparable { } } - this.name = name; - if (bytes) { - this.bytes = name.getBytes(CharsetUtil.US_ASCII); - } else { - this.bytes = null; - } + this.name = new AsciiString(name); + nameAsString = name; } /** - * Returns the name of this getMethod. + * Returns the name of this method. */ - public String name() { + public AsciiString name() { return name; } @@ -187,19 +178,11 @@ public class HttpMethod implements Comparable { @Override public String toString() { - return name(); + return nameAsString; } @Override public int compareTo(HttpMethod o) { return name().compareTo(o.name()); } - - void encode(ByteBuf buf) { - if (bytes == null) { - HttpHeaderUtil.encodeAscii0(name, buf); - } else { - buf.writeBytes(bytes); - } - } } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestEncoder.java index 3d8fdabc82..b784bb2eb8 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestEncoder.java @@ -16,6 +16,7 @@ package io.netty.handler.codec.http; import io.netty.buffer.ByteBuf; +import io.netty.handler.codec.AsciiString; import io.netty.util.CharsetUtil; import static io.netty.handler.codec.http.HttpConstants.*; @@ -36,7 +37,9 @@ public class HttpRequestEncoder extends HttpObjectEncoder { @Override protected void encodeInitialLine(ByteBuf buf, HttpRequest request) throws Exception { - request.method().encode(buf); + AsciiString method = request.method().name(); + buf.writeBytes(method.array(), method.arrayOffset(), method.length()); + buf.writeByte(SP); // Add / as absolute path if no is present.