You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/02/20 11:21:16 UTC
svn commit: r509494 - in
/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol:
BufferingHttpClientHandler.java ClientConnState.java ServerConnState.java
Author: olegk
Date: Tue Feb 20 02:21:15 2007
New Revision: 509494
URL: http://svn.apache.org/viewvc?view=rev&rev=509494
Log:
HTTPCORE-42: Some refactoring in the BufferingHttpClientHandler laying the groundwork for an implementation of the 'expect-continue' handshake
Modified:
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ClientConnState.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ServerConnState.java
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java?view=diff&rev=509494&r1=509493&r2=509494
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java Tue Feb 20 02:21:15 2007
@@ -174,11 +174,10 @@
HttpContext context = conn.getContext();
ClientConnState connState = (ClientConnState) context.getAttribute(CONN_STATE);
- ContentOutputBuffer buffer = connState.getOutbuffer();
try {
- submitRequest(conn, buffer);
+ submitRequest(conn, connState);
} catch (IOException ex) {
shutdownConnection(conn);
@@ -197,6 +196,8 @@
HttpContext context = conn.getContext();
ClientConnState connState = (ClientConnState) context.getAttribute(CONN_STATE);
+
+ connState.setInputState(ClientConnState.RESPONSE_BODY_STREAM);
ContentInputBuffer buffer = connState.getInbuffer();
try {
@@ -204,12 +205,12 @@
buffer.consumeContent(decoder);
if (decoder.isCompleted()) {
- processResponse(conn, buffer);
-
+ connState.setInputState(ClientConnState.RESPONSE_BODY_DONE);
+ processResponse(conn, connState);
// Ready for another request
- connState.reset();
-
- conn.requestOutput();
+ connState.resetInput();
+ conn.requestOutput();
+
}
} catch (IOException ex) {
@@ -229,11 +230,18 @@
HttpContext context = conn.getContext();
ClientConnState connState = (ClientConnState) context.getAttribute(CONN_STATE);
+
+ connState.setInputState(ClientConnState.REQUEST_BODY_STREAM);
ContentOutputBuffer buffer = connState.getOutbuffer();
try {
buffer.produceContent(encoder);
+ if (encoder.isCompleted()) {
+
+ connState.setInputState(ClientConnState.REQUEST_BODY_DONE);
+
+ }
} catch (IOException ex) {
shutdownConnection(conn);
@@ -246,11 +254,12 @@
public void responseReceived(final NHttpClientConnection conn) {
HttpContext context = conn.getContext();
HttpResponse response = conn.getHttpResponse();
- HttpRequest request = (HttpRequest) context.getAttribute(
- HttpExecutionContext.HTTP_REQUEST);
ClientConnState connState = (ClientConnState) context.getAttribute(CONN_STATE);
- ContentInputBuffer buffer = connState.getInbuffer();
+
+ connState.setResponse(response);
+ connState.setInputState(ClientConnState.RESPONSE_RECEIVED);
+ HttpRequest request = connState.getRequest();
if (response.getStatusLine().getStatusCode() < HttpStatus.SC_OK) {
// Just ignore 1xx responses;
@@ -260,11 +269,9 @@
if (!canResponseHaveBody(request, response)) {
try {
- processResponse(conn, buffer);
-
+ processResponse(conn, connState);
// Ready for another request
- connState.reset();
-
+ connState.resetOutput();
conn.requestOutput();
} catch (IOException ex) {
@@ -303,7 +310,9 @@
private void submitRequest(
final NHttpClientConnection conn,
- final ContentOutputBuffer outbuffer) throws IOException, HttpException {
+ final ClientConnState connState) throws IOException, HttpException {
+
+ connState.resetOutput();
HttpContext context = conn.getContext();
HttpRequest request = this.execHandler.submitRequest(context);
@@ -314,27 +323,26 @@
request.getParams().setDefaults(this.params);
context.setAttribute(HttpExecutionContext.HTTP_REQUEST, request);
-
this.httpProcessor.process(request, context);
-
+ connState.setRequest(request);
conn.submitRequest(request);
+ connState.setOutputState(ClientConnState.REQUEST_SENT);
if (request instanceof HttpEntityEnclosingRequest) {
HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
if (entity != null) {
- OutputStream outstream = new ContentOutputStream(outbuffer);
+ OutputStream outstream = new ContentOutputStream(connState.getOutbuffer());
entity.writeTo(outstream);
outstream.flush();
outstream.close();
}
}
-
}
protected boolean canResponseHaveBody(
final HttpRequest request, final HttpResponse response) {
- if ("HEAD".equalsIgnoreCase(request.getRequestLine().getMethod())) {
+ if (request != null && "HEAD".equalsIgnoreCase(request.getRequestLine().getMethod())) {
return false;
}
@@ -347,7 +355,7 @@
private void processResponse(
final NHttpClientConnection conn,
- final ContentInputBuffer inbuffer) throws IOException, HttpException {
+ final ClientConnState connState) throws IOException, HttpException {
HttpContext context = conn.getContext();
HttpResponse response = conn.getHttpResponse();
@@ -355,7 +363,7 @@
if (response.getEntity() != null) {
response.setEntity(new BufferedContent(
response.getEntity(),
- inbuffer));
+ connState.getInbuffer()));
}
context.setAttribute(HttpExecutionContext.HTTP_RESPONSE, response);
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ClientConnState.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ClientConnState.java?view=diff&rev=509494&r1=509493&r2=509494
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ClientConnState.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ClientConnState.java Tue Feb 20 02:21:15 2007
@@ -31,6 +31,8 @@
package org.apache.http.nio.protocol;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
import org.apache.http.nio.util.ContentInputBuffer;
import org.apache.http.nio.util.ContentOutputBuffer;
@@ -41,12 +43,27 @@
* @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
*
*/
-
-public class ClientConnState {
+class ClientConnState {
+
+ public static final int SHUTDOWN = -1;
+ public static final int READY = 0;
+ public static final int REQUEST_SENT = 1;
+ public static final int EXPECT_CONTINUE = 2;
+ public static final int REQUEST_BODY_STREAM = 4;
+ public static final int REQUEST_BODY_DONE = 8;
+ public static final int RESPONSE_RECEIVED = 16;
+ public static final int RESPONSE_BODY_STREAM = 32;
+ public static final int RESPONSE_BODY_DONE = 64;
private final ContentInputBuffer inbuffer;
private final ContentOutputBuffer outbuffer;
+ private volatile int inputState;
+ private volatile int outputState;
+
+ private volatile HttpRequest request;
+ private volatile HttpResponse response;
+
public ClientConnState(
final ContentInputBuffer inbuffer,
final ContentOutputBuffer outbuffer) {
@@ -69,14 +86,55 @@
return this.outbuffer;
}
+ public int getInputState() {
+ return this.inputState;
+ }
+
+ public void setInputState(int inputState) {
+ this.inputState = inputState;
+ }
+
+ public int getOutputState() {
+ return this.outputState;
+ }
+
+ public void setOutputState(int outputState) {
+ this.outputState = outputState;
+ }
+
+ public HttpRequest getRequest() {
+ return this.request;
+ }
+
+ public void setRequest(final HttpRequest request) {
+ this.request = request;
+ }
+
+ public HttpResponse getResponse() {
+ return this.response;
+ }
+
+ public void setResponse(final HttpResponse response) {
+ this.response = response;
+ }
+
public void shutdown() {
this.inbuffer.shutdown();
this.outbuffer.shutdown();
+ this.inputState = SHUTDOWN;
+ this.outputState = SHUTDOWN;
}
- public void reset() {
+ public void resetInput() {
this.inbuffer.reset();
- this.outbuffer.reset();
+ this.response = null;
+ this.inputState = READY;
}
+ public void resetOutput() {
+ this.outbuffer.reset();
+ this.request = null;
+ this.outputState = READY;
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ServerConnState.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ServerConnState.java?view=diff&rev=509494&r1=509493&r2=509494
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ServerConnState.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ServerConnState.java Tue Feb 20 02:21:15 2007
@@ -43,7 +43,7 @@
* @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
*
*/
-public class ServerConnState {
+class ServerConnState {
public static final int SHUTDOWN = -1;
public static final int READY = 0;