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          @Deprecated
55          public void addHeader(String name, Object value) {
56              throw new IllegalStateException("read-only");
57          }
58  
59          @Deprecated
60          public void clearHeaders() {
61              // NOOP
62          }
63  
64          @Deprecated
65          public boolean containsHeader(String name) {
66              return false;
67          }
68  
69          @Deprecated
70          public String getHeader(String name) {
71              return null;
72          }
73  
74          @Deprecated
75          public Set<String> getHeaderNames() {
76              return Collections.emptySet();
77          }
78  
79          @Deprecated
80          public List<String> getHeaders(String name) {
81              return Collections.emptyList();
82          }
83  
84          @Deprecated
85          public List<Map.Entry<String, String>> getHeaders() {
86              return Collections.emptyList();
87          }
88  
89          @Deprecated
90          public void removeHeader(String name) {
91              // NOOP
92          }
93  
94          @Deprecated
95          public void setHeader(String name, Object value) {
96              throw new IllegalStateException("read-only");
97          }
98  
99          @Deprecated
100         public void setHeader(String name, Iterable<?> values) {
101             throw new IllegalStateException("read-only");
102         }
103 
104         public HttpHeaders trailingHeaders() {
105             return HttpHeaders.EMPTY_HEADERS;
106         }
107     };
108 
109     /**
110      * Returns {@code true} if and only if this chunk is the 'end of content'
111      * marker.
112      */
113     boolean isLast();
114 
115     /**
116      * Returns the content of this chunk.  If this is the 'end of content'
117      * marker, {@link ChannelBuffers#EMPTY_BUFFER} will be returned.
118      */
119     ChannelBuffer getContent();
120 
121     /**
122      * Sets the content of this chunk.  If an empty buffer is specified,
123      * this chunk becomes the 'end of content' marker.
124      */
125     void setContent(ChannelBuffer content);
126 }