• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java $
3  * $Revision: 618017 $
4  * $Date: 2008-02-03 08:42:22 -0800 (Sun, 03 Feb 2008) $
5  *
6  * ====================================================================
7  * Licensed to the Apache Software Foundation (ASF) under one
8  * or more contributor license agreements.  See the NOTICE file
9  * distributed with this work for additional information
10  * regarding copyright ownership.  The ASF licenses this file
11  * to you under the Apache License, Version 2.0 (the
12  * "License"); you may not use this file except in compliance
13  * with the License.  You may obtain a copy of the License at
14  *
15  *   http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing,
18  * software distributed under the License is distributed on an
19  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20  * KIND, either express or implied.  See the License for the
21  * specific language governing permissions and limitations
22  * under the License.
23  * ====================================================================
24  *
25  * This software consists of voluntary contributions made by many
26  * individuals on behalf of the Apache Software Foundation.  For more
27  * information on the Apache Software Foundation, please see
28  * <http://www.apache.org/>.
29  *
30  */
31 
32 package org.apache.http.impl;
33 
34 import java.io.IOException;
35 
36 import org.apache.http.HttpConnectionMetrics;
37 import org.apache.http.HttpEntity;
38 import org.apache.http.HttpEntityEnclosingRequest;
39 import org.apache.http.HttpException;
40 import org.apache.http.HttpRequest;
41 import org.apache.http.HttpRequestFactory;
42 import org.apache.http.HttpResponse;
43 import org.apache.http.HttpServerConnection;
44 import org.apache.http.impl.entity.EntityDeserializer;
45 import org.apache.http.impl.entity.EntitySerializer;
46 import org.apache.http.impl.entity.LaxContentLengthStrategy;
47 import org.apache.http.impl.entity.StrictContentLengthStrategy;
48 import org.apache.http.impl.io.HttpRequestParser;
49 import org.apache.http.impl.io.HttpResponseWriter;
50 import org.apache.http.io.HttpMessageParser;
51 import org.apache.http.io.HttpMessageWriter;
52 import org.apache.http.io.SessionInputBuffer;
53 import org.apache.http.io.SessionOutputBuffer;
54 import org.apache.http.params.HttpParams;
55 
56 /**
57  * Abstract server-side HTTP connection capable of transmitting and receiving data
58  * using arbitrary {@link SessionInputBuffer} and {@link SessionOutputBuffer}
59  *
60  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
61  *
62  * @version $Revision: 618017 $
63  *
64  * @since 4.0
65  *
66  * @deprecated Please use {@link java.net.URL#openConnection} instead.
67  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
68  *     for further details.
69  */
70 @Deprecated
71 public abstract class AbstractHttpServerConnection implements HttpServerConnection {
72 
73     private final EntitySerializer entityserializer;
74     private final EntityDeserializer entitydeserializer;
75 
76     private SessionInputBuffer inbuffer = null;
77     private SessionOutputBuffer outbuffer = null;
78     private HttpMessageParser requestParser = null;
79     private HttpMessageWriter responseWriter = null;
80     private HttpConnectionMetricsImpl metrics = null;
81 
82 
83 
AbstractHttpServerConnection()84     public AbstractHttpServerConnection() {
85         super();
86         this.entityserializer = createEntitySerializer();
87         this.entitydeserializer = createEntityDeserializer();
88     }
89 
assertOpen()90     protected abstract void assertOpen() throws IllegalStateException;
91 
createEntityDeserializer()92     protected EntityDeserializer createEntityDeserializer() {
93         return new EntityDeserializer(new LaxContentLengthStrategy());
94     }
95 
createEntitySerializer()96     protected EntitySerializer createEntitySerializer() {
97         return new EntitySerializer(new StrictContentLengthStrategy());
98     }
99 
createHttpRequestFactory()100     protected HttpRequestFactory createHttpRequestFactory() {
101         return new DefaultHttpRequestFactory();
102     }
103 
createRequestParser( final SessionInputBuffer buffer, final HttpRequestFactory requestFactory, final HttpParams params)104     protected HttpMessageParser createRequestParser(
105             final SessionInputBuffer buffer,
106             final HttpRequestFactory requestFactory,
107             final HttpParams params) {
108         // override in derived class to specify a line parser
109         return new HttpRequestParser(buffer, null, requestFactory, params);
110     }
111 
createResponseWriter( final SessionOutputBuffer buffer, final HttpParams params)112     protected HttpMessageWriter createResponseWriter(
113             final SessionOutputBuffer buffer,
114             final HttpParams params) {
115         // override in derived class to specify a line formatter
116         return new HttpResponseWriter(buffer, null, params);
117     }
118 
119 
init( final SessionInputBuffer inbuffer, final SessionOutputBuffer outbuffer, final HttpParams params)120     protected void init(
121             final SessionInputBuffer inbuffer,
122             final SessionOutputBuffer outbuffer,
123             final HttpParams params) {
124         if (inbuffer == null) {
125             throw new IllegalArgumentException("Input session buffer may not be null");
126         }
127         if (outbuffer == null) {
128             throw new IllegalArgumentException("Output session buffer may not be null");
129         }
130         this.inbuffer = inbuffer;
131         this.outbuffer = outbuffer;
132         this.requestParser = createRequestParser(
133                 inbuffer,
134                 createHttpRequestFactory(),
135                 params);
136         this.responseWriter = createResponseWriter(
137                 outbuffer, params);
138         this.metrics = new HttpConnectionMetricsImpl(
139                 inbuffer.getMetrics(),
140                 outbuffer.getMetrics());
141     }
142 
receiveRequestHeader()143     public HttpRequest receiveRequestHeader()
144             throws HttpException, IOException {
145         assertOpen();
146         HttpRequest request = (HttpRequest) this.requestParser.parse();
147         this.metrics.incrementRequestCount();
148         return request;
149     }
150 
receiveRequestEntity(final HttpEntityEnclosingRequest request)151     public void receiveRequestEntity(final HttpEntityEnclosingRequest request)
152             throws HttpException, IOException {
153         if (request == null) {
154             throw new IllegalArgumentException("HTTP request may not be null");
155         }
156         assertOpen();
157         HttpEntity entity = this.entitydeserializer.deserialize(this.inbuffer, request);
158         request.setEntity(entity);
159     }
160 
doFlush()161     protected void doFlush() throws IOException  {
162         this.outbuffer.flush();
163     }
164 
flush()165     public void flush() throws IOException {
166         assertOpen();
167         doFlush();
168     }
169 
sendResponseHeader(final HttpResponse response)170     public void sendResponseHeader(final HttpResponse response)
171             throws HttpException, IOException {
172         if (response == null) {
173             throw new IllegalArgumentException("HTTP response may not be null");
174         }
175         assertOpen();
176         this.responseWriter.write(response);
177         if (response.getStatusLine().getStatusCode() >= 200) {
178             this.metrics.incrementResponseCount();
179         }
180     }
181 
sendResponseEntity(final HttpResponse response)182     public void sendResponseEntity(final HttpResponse response)
183             throws HttpException, IOException {
184         if (response.getEntity() == null) {
185             return;
186         }
187         this.entityserializer.serialize(
188                 this.outbuffer,
189                 response,
190                 response.getEntity());
191     }
192 
isStale()193     public boolean isStale() {
194         assertOpen();
195         try {
196             this.inbuffer.isDataAvailable(1);
197             return false;
198         } catch (IOException ex) {
199             return true;
200         }
201     }
202 
getMetrics()203     public HttpConnectionMetrics getMetrics() {
204         return this.metrics;
205     }
206 
207 }
208