View Javadoc

1   // ========================================================================
2   // Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.http;
15  
16  import org.eclipse.jetty.io.Buffer;
17  import org.eclipse.jetty.io.Buffers;
18  import org.eclipse.jetty.io.ThreadLocalBuffers;
19  import org.eclipse.jetty.util.component.AbstractLifeCycle;
20  
21  /* ------------------------------------------------------------ */
22  /** Abstract Buffer pool.
23   * simple unbounded pool of buffers for header, request and response sizes.
24   *
25   */
26  public abstract class HttpBuffers extends AbstractLifeCycle
27  {
28      
29      private final ThreadLocalBuffers _requestBuffers = new ThreadLocalBuffers()
30      {
31          @Override
32          protected Buffer newBuffer(int size)
33          {
34              return newRequestBuffer(size);
35          }
36  
37          @Override
38          protected Buffer newHeader(int size)
39          {
40              return newRequestHeader(size);
41          }
42          @Override
43          protected boolean isHeader(Buffer buffer)
44          {
45              return isRequestHeader(buffer);
46          }
47      };
48      
49      private final ThreadLocalBuffers _responseBuffers = new ThreadLocalBuffers()
50      {
51          @Override
52          protected Buffer newBuffer(int size)
53          {
54              return newResponseBuffer(size);
55          }
56  
57          @Override
58          protected Buffer newHeader(int size)
59          {
60              return newResponseHeader(size);
61          }
62          @Override
63          protected boolean isHeader(Buffer buffer)
64          {
65              return isResponseHeader(buffer);
66          }
67      };
68      
69      public HttpBuffers()
70      {
71          super();
72          _requestBuffers.setBufferSize(12*1024);
73          _requestBuffers.setHeaderSize(6*1024);
74          _responseBuffers.setBufferSize(32*1024);
75          _responseBuffers.setHeaderSize(6*1024);
76      }
77  
78      @Override
79      protected void doStart()
80          throws Exception
81      {
82          super.doStart();
83      }
84      
85      /**
86       * @return Returns the headerBufferSize.
87       * @deprecated use {@link #getRequestHeaderSize()} or {@link #getResponseHeaderSize()}
88       */
89      @Deprecated
90      public int getHeaderBufferSize()
91      {
92          return _requestBuffers.getHeaderSize();
93      }
94  
95      public Buffers getRequestBuffers()
96      {
97          return _requestBuffers;
98      }
99      
100     /**
101      * @return Returns the requestBufferSize.
102      */
103     public int getRequestBufferSize()
104     {
105         return _requestBuffers.getBufferSize();
106     }
107     
108     /**
109      * @return Returns the request header size.
110      */
111     public int getRequestHeaderSize()
112     {
113         return _requestBuffers.getHeaderSize();
114     }
115 
116     public Buffers getResponseBuffers()
117     {
118         return _responseBuffers;
119     }
120     
121     /**
122      * @return Returns the responseBufferSize.
123      */
124     public int getResponseBufferSize()
125     {
126         return _responseBuffers.getBufferSize();
127     }
128     
129     /**
130      * @return Returns the response header size.
131      */
132     public int getResponseHeaderSize()
133     {
134         return _responseBuffers.getHeaderSize();
135     }
136 
137     protected abstract Buffer newRequestBuffer(int size);
138 
139     protected abstract Buffer newRequestHeader(int size);
140 
141     protected abstract Buffer newResponseBuffer(int size);
142 
143     protected abstract Buffer newResponseHeader(int size);
144     
145     /* ------------------------------------------------------------ */
146     /**
147      * @param buffer
148      * @return True if the buffer is the correct type for a request header buffer
149      */
150     protected abstract boolean isRequestHeader(Buffer buffer);
151 
152     /* ------------------------------------------------------------ */
153     /**
154      * @param buffer
155      * @return True if the buffer is the correct type for a response header buffer
156      */
157     protected abstract boolean isResponseHeader(Buffer buffer);
158     
159     
160 
161     /**
162      * @param headerBufferSize The headerBufferSize to set.
163      * @deprecated 
164      */
165     @Deprecated
166     public void setHeaderBufferSize( int headerBufferSize )
167     {
168         setRequestHeaderSize(headerBufferSize);
169         setResponseHeaderSize(headerBufferSize);
170     }
171     
172     /**
173      * @param size The requestBufferSize to set.
174      */
175     public void setRequestBufferSize( int size )
176     {
177         if (isStarted())
178           throw new IllegalStateException();
179         _requestBuffers.setBufferSize(size);
180     }
181     /**
182      * @param size 
183      */
184     public void setRequestHeaderSize( int size )
185     {
186         if (isStarted())
187             throw new IllegalStateException();
188         _requestBuffers.setHeaderSize(size);
189     }
190     
191     /**
192      * @param size The response buffer size in bytes.
193      */
194     public void setResponseBufferSize( int size )
195     {
196         if (isStarted())
197           throw new IllegalStateException();
198         _responseBuffers.setBufferSize(size);
199     }
200     /**
201      * @param size 
202      */
203     public void setResponseHeaderSize( int size )
204     {
205         if (isStarted())
206             throw new IllegalStateException();
207         _responseBuffers.setHeaderSize(size);
208     }
209     
210 }