Author: remy.maucherat(a)jboss.com
Date: 2008-02-14 08:08:39 -0500 (Thu, 14 Feb 2008)
New Revision: 424
Modified:
trunk/java/org/apache/catalina/connector/InputBuffer.java
trunk/java/org/apache/catalina/connector/Request.java
Log:
- With non blocking IO, it is possible to implement a real available method.
Modified: trunk/java/org/apache/catalina/connector/InputBuffer.java
===================================================================
--- trunk/java/org/apache/catalina/connector/InputBuffer.java 2008-02-14 11:15:19 UTC (rev
423)
+++ trunk/java/org/apache/catalina/connector/InputBuffer.java 2008-02-14 13:08:39 UTC (rev
424)
@@ -135,6 +135,12 @@
/**
+ * Associated request.
+ */
+ private org.apache.catalina.connector.Request request;
+
+
+ /**
* Buffer position.
*/
private int markPos = -1;
@@ -152,9 +158,9 @@
/**
* Default constructor. Allocate the buffer with the default buffer size.
*/
- public InputBuffer() {
+ public InputBuffer(org.apache.catalina.connector.Request request) {
- this(DEFAULT_BUFFER_SIZE);
+ this(request, DEFAULT_BUFFER_SIZE);
}
@@ -164,8 +170,9 @@
*
* @param size Buffer size to use
*/
- public InputBuffer(int size) {
+ public InputBuffer(org.apache.catalina.connector.Request request, int size) {
+ this.request = request;
this.size = size;
bb = new ByteChunk(size);
bb.setLimit(size);
@@ -261,13 +268,29 @@
int available = 0;
if (state == BYTE_STATE) {
available = bb.getLength();
+ if (request.isComet() && available == 0) {
+ try {
+ available = realReadBytes(null, 0, 0);
+ } catch (IOException e) {
+ // Ignore, will return 0, and another error
+ // will occur elsewhere
+ }
+ }
} else if (state == CHAR_STATE) {
available = cb.getLength();
+ if (request.isComet() && available == 0) {
+ try {
+ available = realReadChars(null, 0, cb.getBuffer().length);
+ } catch (IOException e) {
+ // Ignore, will return 0, and another error
+ // will occur elsewhere
+ }
+ }
}
- if (available == 0) {
+ /*if (available == 0) {
coyoteRequest.action(ActionCode.ACTION_AVAILABLE, null);
available = (coyoteRequest.getAvailable() > 0) ? 1 : 0;
- }
+ }*/
return available;
}
Modified: trunk/java/org/apache/catalina/connector/Request.java
===================================================================
--- trunk/java/org/apache/catalina/connector/Request.java 2008-02-14 11:15:19 UTC (rev
423)
+++ trunk/java/org/apache/catalina/connector/Request.java 2008-02-14 13:08:39 UTC (rev
424)
@@ -223,7 +223,7 @@
/**
* The associated input buffer.
*/
- protected InputBuffer inputBuffer = new InputBuffer();
+ protected InputBuffer inputBuffer = new InputBuffer(this);
/**
@@ -464,7 +464,7 @@
/**
- * Clear cached encoders (to save memory for Comet requests).
+ * Read bytes into the low level buffer.
*/
public boolean read()
throws IOException {
Show replies by date