View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the 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.Collections;
    19  import java.util.List;
    20  import java.util.Map;
    21  import java.util.Set;
    22
    23  import org.jboss.netty.buffer.ChannelBuffer;
    24  import org.jboss.netty.buffer.ChannelBuffers;
    25  import org.jboss.netty.channel.ChannelPipeline;
    26
    27  /**
    28   * An HTTP chunk which is used for HTTP chunked transfer-encoding.
    29   * {@link HttpMessageDecoder} generates {@link HttpChunk} after
    30   * {@link HttpMessage} when the content is large or the encoding of the content
    31   * is 'chunked.  If you prefer not to receive {@link HttpChunk} in your handler,
    32   * please {@link HttpChunkAggregator} after {@link HttpMessageDecoder} in the
    33   * {@link ChannelPipeline}.
    34   * @apiviz.landmark
    35   */
    36  public interface HttpChunk {
    37
    38      /**
    39       * The 'end of content' marker in chunked encoding.
    40       */
    41      HttpChunkTrailer LAST_CHUNK = new HttpChunkTrailer() {
    42          public ChannelBuffer getContent() {
    43              return ChannelBuffers.EMPTY_BUFFER;
    44          }
    45
    46          public void setContent(ChannelBuffer content) {
    47              throw new IllegalStateException("read-only");
    48          }
    49
    50          public boolean isLast() {
    51              return true;
    52          }
    53
    54          public void addHeader(String name, Object value) {
    55              throw new IllegalStateException("read-only");
    56          }
    57
    58          public void clearHeaders() {
    59              // NOOP
    60          }
    61
    62          public boolean containsHeader(String name) {
    63              return false;
    64          }
    65
    66          public String getHeader(String name) {
    67              return null;
    68          }
    69
    70          public Set<String> getHeaderNames() {
    71              return Collections.emptySet();
    72          }
    73
    74          public List<String> getHeaders(String name) {
    75              return Collections.emptyList();
    76          }
    77
    78          public List<Map.Entry<String, String>> getHeaders() {
    79              return Collections.emptyList();
    80          }
    81
    82          public void removeHeader(String name) {
    83              // NOOP
    84          }
    85
    86          public void setHeader(String name, Object value) {
    87              throw new IllegalStateException("read-only");
    88          }
    89
    90          public void setHeader(String name, Iterable<?> values) {
    91              throw new IllegalStateException("read-only");
    92          }
    93      };
    94
    95      /**
    96       * Returns {@code true} if and only if this chunk is the 'end of content'
    97       * marker.
    98       */
    99      boolean isLast();
    100
    101     /**
    102      * Returns the content of this chunk.  If this is the 'end of content'
    103      * marker, {@link ChannelBuffers#EMPTY_BUFFER} will be returned.
    104      */
    105     ChannelBuffer getContent();
    106
    107     /**
    108      * Sets the content of this chunk.  If an empty buffer is specified,
    109      * this chunk becomes the 'end of content' marker.
    110      */
    111     void setContent(ChannelBuffer content);
    112 }