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 2005/03/26 17:52:47 UTC
svn commit: r159112 - in jakarta/httpclient/trunk/http-common/src:
java/org/apache/http/ java/org/apache/http/impl/ test/org/apache/http/impl/
Author: olegk
Date: Sat Mar 26 08:52:45 2005
New Revision: 159112
URL: http://svn.apache.org/viewcvs?view=rev&rev=159112
Log:
Added HttpDataReceiver#read() and HttpDataTransmitter#write(int) methods
Modified:
jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataReceiver.java
jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataTransmitter.java
jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataReceiver.java
jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataTransmitter.java
jakarta/httpclient/trunk/http-common/src/test/org/apache/http/impl/TestNIOHttpTransmitterAndReceiver.java
Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataReceiver.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataReceiver.java?view=diff&r1=159111&r2=159112
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataReceiver.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataReceiver.java Sat Mar 26 08:52:45 2005
@@ -50,6 +50,8 @@
int read(byte[] b) throws IOException;
+ int read() throws IOException;
+
String readLine() throws IOException;
boolean isDataAvailable(int timeout) throws IOException;
Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataTransmitter.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataTransmitter.java?view=diff&r1=159111&r2=159112
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataTransmitter.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/HttpDataTransmitter.java Sat Mar 26 08:52:45 2005
@@ -50,6 +50,8 @@
void write(byte[] b) throws IOException;
+ void write(int b) throws IOException;
+
void writeLine(String s) throws IOException;
void flush() throws IOException;
Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataReceiver.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataReceiver.java?view=diff&r1=159111&r2=159112
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataReceiver.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataReceiver.java Sat Mar 26 08:52:45 2005
@@ -70,6 +70,7 @@
buffersize = 2048;
}
this.buffer = ByteBuffer.allocateDirect(buffersize);
+ this.buffer.flip();
this.charset = Charset.forName("US-ASCII");
}
@@ -97,14 +98,6 @@
return 0;
}
int noRead = 0;
- // prefill the buffer if necessary
- if (this.buffer.position() == 0) {
- noRead = fillBuffer();
- if (noRead == -1) {
- // end of stream
- return -1;
- }
- }
if (!this.buffer.hasRemaining()) {
this.buffer.clear();
noRead = fillBuffer();
@@ -127,6 +120,18 @@
return read(b, 0, b.length);
}
+ public int read() throws IOException {
+ int noRead = 0;
+ if (!this.buffer.hasRemaining()) {
+ this.buffer.clear();
+ noRead = fillBuffer();
+ if (noRead == -1) {
+ return -1;
+ }
+ }
+ return this.buffer.get();
+ }
+
private int locateLF() {
for (int i = this.buffer.position(); i < this.buffer.limit(); i++) {
int b = this.buffer.get(i);
@@ -139,14 +144,6 @@
public String readLine() throws IOException {
int noRead = 0;
- // prefill the buffer if necessary
- if (this.buffer.position() == 0) {
- noRead = fillBuffer();
- if (noRead == -1) {
- // end of stream
- return null;
- }
- }
CharsetDecoder chardecoder = createCharDecoder();
StringBuffer line = new StringBuffer();
CharBuffer tmp = CharBuffer.allocate(128);
@@ -175,7 +172,6 @@
retry = false;
// terminate the decoding process
chardecoder.decode(this.buffer, tmp, true);
- this.buffer.clear();
}
}
// append the decoded content to the line buffer
Modified: jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataTransmitter.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataTransmitter.java?view=diff&r1=159111&r2=159112
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataTransmitter.java (original)
+++ jakarta/httpclient/trunk/http-common/src/java/org/apache/http/impl/NIOHttpDataTransmitter.java Sat Mar 26 08:52:45 2005
@@ -150,6 +150,13 @@
write(CRLF);
}
+ public void write(int b) throws IOException {
+ if (!this.buffer.hasRemaining()) {
+ flushBuffer();
+ }
+ this.buffer.put((byte)b);
+ }
+
private void flushCharEncoder(final CharsetEncoder charencoder) throws IOException {
boolean retry = true;
while (retry) {
Modified: jakarta/httpclient/trunk/http-common/src/test/org/apache/http/impl/TestNIOHttpTransmitterAndReceiver.java
URL: http://svn.apache.org/viewcvs/jakarta/httpclient/trunk/http-common/src/test/org/apache/http/impl/TestNIOHttpTransmitterAndReceiver.java?view=diff&r1=159111&r2=159112
==============================================================================
--- jakarta/httpclient/trunk/http-common/src/test/org/apache/http/impl/TestNIOHttpTransmitterAndReceiver.java (original)
+++ jakarta/httpclient/trunk/http-common/src/test/org/apache/http/impl/TestNIOHttpTransmitterAndReceiver.java Sat Mar 26 08:52:45 2005
@@ -244,4 +244,40 @@
assertEquals(-1, receiver.read(tmp));
assertEquals(-1, receiver.read(tmp));
}
+
+ public void testReadWriteByte() throws Exception {
+ // make the buffer larger than that of transmitter
+ byte[] out = new byte[40];
+ for (int i = 0; i < out.length; i++) {
+ out[i] = (byte)('0' + i);
+ }
+ ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+ HttpDataTransmitter transmitter =
+ new NIOHttpDataTransmitter(Channels.newChannel(outstream), 16);
+ for (int i = 0; i < out.length; i++) {
+ transmitter.write(out[i]);
+ }
+ transmitter.flush();
+
+ byte[] tmp = outstream.toByteArray();
+ assertEquals(out.length, tmp.length);
+ for (int i = 0; i < out.length; i++) {
+ assertEquals(out[i], tmp[i]);
+ }
+
+ ByteArrayInputStream instream = new ByteArrayInputStream(tmp);
+ HttpDataReceiver receiver =
+ new NIOHttpDataReceiver(Channels.newChannel(instream), 16);
+
+ byte[] in = new byte[40];
+ for (int i = 0; i < in.length; i++) {
+ in[i] = (byte)receiver.read();
+ }
+ for (int i = 0; i < out.length; i++) {
+ assertEquals(out[i], in[i]);
+ }
+ assertEquals(-1, receiver.read());
+ assertEquals(-1, receiver.read());
+ }
+
}