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/03/07 19:26:37 UTC
svn commit: r515681 - in
/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio:
protocol/ util/
Author: olegk
Date: Wed Mar 7 10:26:36 2007
New Revision: 515681
URL: http://svn.apache.org/viewvc?view=rev&rev=515681
Log:
Refactored connection state classes
Removed:
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
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentInputBuffer.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentOutputBuffer.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=515681&r1=515680&r2=515681
==============================================================================
--- 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 Wed Mar 7 10:26:36 2007
@@ -130,10 +130,7 @@
initialize(conn, attachment);
- ClientConnState connState = new ClientConnState(
- new SimpleInputBuffer(2048),
- new SimpleOutputBuffer(2048));
-
+ ClientConnState connState = new ClientConnState();
context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
@@ -441,11 +438,103 @@
if (!this.connStrategy.keepAlive(response, context)) {
conn.close();
- connState.shutdown();
} else {
// Ready for another request
connState.resetInput();
conn.requestOutput();
+ }
+ }
+
+ static class ClientConnState {
+
+ 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 SimpleInputBuffer inbuffer;
+ private ContentOutputBuffer outbuffer;
+
+ private volatile int inputState;
+ private volatile int outputState;
+
+ private volatile HttpRequest request;
+ private volatile HttpResponse response;
+
+ private int timeout;
+
+ public ClientConnState() {
+ super();
+ }
+
+ public ContentInputBuffer getInbuffer() {
+ if (this.inbuffer == null) {
+ this.inbuffer = new SimpleInputBuffer(2048);
+ }
+ return this.inbuffer;
+ }
+
+ public ContentOutputBuffer getOutbuffer() {
+ if (this.outbuffer == null) {
+ this.outbuffer = new SimpleOutputBuffer(2048);
+ }
+ 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 int getTimeout() {
+ return this.timeout;
+ }
+
+ public void setTimeout(int timeout) {
+ this.timeout = timeout;
+ }
+
+ public void resetInput() {
+ this.inbuffer = null;
+ this.response = null;
+ this.inputState = READY;
+ }
+
+ public void resetOutput() {
+ this.outbuffer = null;
+ this.request = null;
+ this.outputState = READY;
}
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java?view=diff&rev=515681&r1=515680&r2=515681
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java Wed Mar 7 10:26:36 2007
@@ -132,10 +132,7 @@
public void connected(final NHttpServerConnection conn) {
HttpContext context = conn.getContext();
- ServerConnState connState = new ServerConnState(
- new SimpleInputBuffer(2048),
- new SimpleOutputBuffer(2048));
-
+ ServerConnState connState = new ServerConnState();
context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
@@ -317,6 +314,7 @@
buffer.produceContent(encoder);
if (encoder.isCompleted()) {
connState.setOutputState(ServerConnState.RESPONSE_BODY_DONE);
+ connState.resetOutput();
if (!this.connStrategy.keepAlive(response, context)) {
conn.close();
}
@@ -423,9 +421,8 @@
conn.submitResponse(response);
// Update connection state
- connState.resetOutput();
connState.setResponse(response);
- connState.setInputState(ServerConnState.RESPONSE_SENT);
+ connState.setOutputState(ServerConnState.RESPONSE_SENT);
if (response.getEntity() != null) {
HttpEntity entity = response.getEntity();
@@ -435,7 +432,94 @@
outstream.flush();
outstream.close();
}
+ } else {
+ connState.resetOutput();
}
}
+ static class ServerConnState {
+
+ public static final int READY = 0;
+ public static final int REQUEST_RECEIVED = 1;
+ public static final int REQUEST_BODY_STREAM = 2;
+ public static final int REQUEST_BODY_DONE = 4;
+ public static final int RESPONSE_SENT = 8;
+ public static final int RESPONSE_BODY_STREAM = 16;
+ public static final int RESPONSE_BODY_DONE = 32;
+
+ private SimpleInputBuffer inbuffer;
+ private ContentOutputBuffer outbuffer;
+
+ private volatile int inputState;
+ private volatile int outputState;
+
+ private volatile HttpRequest request;
+ private volatile HttpResponse response;
+
+ public ServerConnState() {
+ super();
+ this.inputState = READY;
+ this.outputState = READY;
+ }
+
+ public ContentInputBuffer getInbuffer() {
+ if (this.inbuffer == null) {
+ this.inbuffer = new SimpleInputBuffer(2048);
+ }
+ return this.inbuffer;
+ }
+
+ public ContentOutputBuffer getOutbuffer() {
+ if (this.outbuffer == null) {
+ this.outbuffer = new SimpleOutputBuffer(2048);
+ }
+ 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 resetInput() {
+ this.inbuffer = null;
+ this.request = null;
+ this.inputState = READY;
+ }
+
+ public void resetOutput() {
+ this.outbuffer = null;
+ this.response = null;
+ this.outputState = READY;
+ }
+
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java?view=diff&rev=515681&r1=515680&r2=515681
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java Wed Mar 7 10:26:36 2007
@@ -153,11 +153,7 @@
if (bufsize < 0) {
bufsize = 20480;
}
-
- ServerConnState connState = new ServerConnState(
- new SharedInputBuffer(bufsize, conn),
- new SharedOutputBuffer(bufsize, conn));
-
+ ServerConnState connState = new ServerConnState(bufsize, conn);
context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
@@ -554,5 +550,94 @@
connState.resetOutput();
}
}
+
+ static class ServerConnState {
+
+ public static final int SHUTDOWN = -1;
+ public static final int READY = 0;
+ public static final int REQUEST_RECEIVED = 1;
+ public static final int REQUEST_BODY_STREAM = 2;
+ public static final int REQUEST_BODY_DONE = 4;
+ public static final int RESPONSE_SENT = 8;
+ public static final int RESPONSE_BODY_STREAM = 16;
+ public static final int RESPONSE_BODY_DONE = 32;
+
+ private final SharedInputBuffer inbuffer;
+ private final SharedOutputBuffer outbuffer;
+
+ private volatile int inputState;
+ private volatile int outputState;
+
+ private volatile HttpRequest request;
+ private volatile HttpResponse response;
+
+ public ServerConnState(int bufsize, final IOControl ioControl) {
+ super();
+ this.inbuffer = new SharedInputBuffer(bufsize, ioControl);
+ this.outbuffer = new SharedOutputBuffer(bufsize, ioControl);
+ this.inputState = READY;
+ this.outputState = READY;
+ }
+
+ public ContentInputBuffer getInbuffer() {
+ return this.inbuffer;
+ }
+
+ public ContentOutputBuffer getOutbuffer() {
+ 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 resetInput() {
+ this.inbuffer.reset();
+ this.request = null;
+ this.inputState = READY;
+ }
+
+ public void resetOutput() {
+ this.outbuffer.reset();
+ this.response = null;
+ this.outputState = READY;
+ }
+
+ }
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentInputBuffer.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentInputBuffer.java?view=diff&rev=515681&r1=515680&r2=515681
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentInputBuffer.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentInputBuffer.java Wed Mar 7 10:26:36 2007
@@ -39,8 +39,6 @@
int consumeContent(ContentDecoder decoder) throws IOException;
- void shutdown();
-
void reset();
int read(byte[] b, int off, int len) throws IOException;
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentOutputBuffer.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentOutputBuffer.java?view=diff&rev=515681&r1=515680&r2=515681
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentOutputBuffer.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/ContentOutputBuffer.java Wed Mar 7 10:26:36 2007
@@ -39,8 +39,6 @@
int produceContent(ContentEncoder encoder) throws IOException;
- void shutdown();
-
void reset();
public void flush() throws IOException;