View Javadoc

    1   /*
    2    * Copyright 2009 Red Hat, Inc.
    3    *
    4    * Red Hat licenses this file to you under the Apache License, version 2.0
    5    * (the "License"); you may not use this file except in compliance with the
    6    * License.  You may obtain a copy of the License at:
    7    *
    8    *    http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.handler.codec.http;
    17
    18  import java.util.List;
    19  import java.util.Map;
    20  import java.util.Set;
    21
    22  import org.jboss.netty.buffer.ChannelBuffer;
    23  import org.jboss.netty.buffer.ChannelBuffers;
    24
    25  /**
    26   * An HTTP message which provides common properties for {@link HttpRequest} and
    27   * {@link HttpResponse}.
    28   *
    29   * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
    30   * @author Andy Taylor (andy.taylor@jboss.org)
    31   * @author <a href="http://gleamynode.net/">Trustin Lee</a>
    32   * @version $Rev: 2088 $, $Date: 2010-01-27 11:38:17 +0900 (Wed, 27 Jan 2010) $
    33   *
    34   * @see HttpHeaders
    35   *
    36   * @apiviz.landmark
    37   * @apiviz.has org.jboss.netty.handler.codec.http.HttpChunk oneway - - is followed by
    38   */
    39  public interface HttpMessage {
    40
    41      /**
    42       * Returns the header value with the specified header name.  If there are
    43       * more than one header value for the specified header name, the first
    44       * value is returned.
    45       *
    46       * @return the header value or {@code null} if there is no such header
    47       *
    48       */
    49      String getHeader(String name);
    50
    51      /**
    52       * Returns the header values with the specified header name.
    53       *
    54       * @return the {@link List} of header values.  An empty list if there is no
    55       *         such header.
    56       */
    57      List<String> getHeaders(String name);
    58
    59      /**
    60       * Returns the all header names and values that this message contains.
    61       *
    62       * @return the {@link List} of the header name-value pairs.  An empty list
    63       *         if there is no header in this message.
    64       */
    65      List<Map.Entry<String, String>> getHeaders();
    66
    67      /**
    68       * Returns {@code true} if and only if there is a header with the specified
    69       * header name.
    70       */
    71      boolean containsHeader(String name);
    72
    73      /**
    74       * Returns the {@link Set} of all header names that this message contains.
    75       */
    76      Set<String> getHeaderNames();
    77
    78      /**
    79       * Returns the protocol version of this message.
    80       */
    81      HttpVersion getProtocolVersion();
    82
    83      /**
    84       * Sets the protocol version of this message.
    85       */
    86      void setProtocolVersion(HttpVersion version);
    87
    88      /**
    89       * Returns the content of this message.  If there is no content or
    90       * {@link #isChunked()} returns {@code true}, an
    91       * {@link ChannelBuffers#EMPTY_BUFFER} is returned.
    92       */
    93      ChannelBuffer getContent();
    94
    95      /**
    96       * Sets the content of this message.  If {@code null} is specified,
    97       * the content of this message will be set to {@link ChannelBuffers#EMPTY_BUFFER}.
    98       */
    99      void setContent(ChannelBuffer content);
    100
    101     /**
    102      * Adds a new header with the specified name and value.
    103      */
    104     void addHeader(String name, Object value);
    105
    106     /**
    107      * Sets a new header with the specified name and value.  If there is an
    108      * existing header with the same name, the existing header is removed.
    109      */
    110     void setHeader(String name, Object value);
    111
    112     /**
    113      * Sets a new header with the specified name and values.  If there is an
    114      * existing header with the same name, the existing header is removed.
    115      */
    116     void setHeader(String name, Iterable<?> values);
    117
    118     /**
    119      * Removes the header with the specified name.
    120      */
    121     void removeHeader(String name);
    122
    123     /**
    124      * Removes all headers from this message.
    125      */
    126     void clearHeaders();
    127
    128     /**
    129      * @deprecated Use {@link HttpHeaders#getContentLength(HttpMessage)} instead.
    130      */
    131     @Deprecated
    132     long getContentLength();
    133
    134     /**
    135      * @deprecated Use {@link HttpHeaders#getContentLength(HttpMessage, long)} instead.
    136      */
    137     @Deprecated
    138     long getContentLength(long defaultValue);
    139
    140     /**
    141      * Returns {@code true} if and only if this message does not have any
    142      * content but the {@link HttpChunk}s, which is generated by
    143      * {@link HttpMessageDecoder} consecutively, contain the actual content.
    144      * <p>
    145      * Please note that this method will keep returning {@code true} if the
    146      * {@code "Transfer-Encoding"} of this message is {@code "chunked"}, even if
    147      * you attempt to override this property by calling {@link #setChunked(boolean)}
    148      * with {@code false}.
    149      */
    150     boolean isChunked();
    151
    152     /**
    153      * Sets if this message does not have any content but the
    154      * {@link HttpChunk}s, which is generated by {@link HttpMessageDecoder}
    155      * consecutively, contain the actual content.
    156      * <p>
    157      * If this method is called with {@code true}, the content of this message
    158      * becomes {@link ChannelBuffers#EMPTY_BUFFER}.
    159      * <p>
    160      * Even if this method is called with {@code false}, {@link #isChunked()}
    161      * will keep returning {@code true} if the {@code "Transfer-Encoding"} of
    162      * this message is {@code "chunked"}.
    163      */
    164     void setChunked(boolean chunked);
    165
    166     /**
    167      * @deprecated Use {@link HttpHeaders#isKeepAlive(HttpMessage)} instead.
    168      */
    169     @Deprecated
    170     boolean isKeepAlive();
    171 }