Problem with LineInputStream.readLine()
Xavier Poinsard <[email protected]> Thu, 30 Jun 2005 16:32:12 +0200
| Newsgroups | gmane.comp.java.classpath.extensions.javamail |
|---|---|
| Message-ID | <[email protected]> |
Hi, I had a problem with POP3 retrieving of a message. After the "RETR 1" commande, readline returns a string with only a LINE_FEED, but if readline is called twice the second time it returns the correct answer. To workaround this problem, I had to force (in the code) the char by char read. I attached a patch which may not be applied entirely since it contains various things : - check returns of readline to report End Of Stream - possible offset bug fix in indexOfCRLF() - javadoc for readline return - my workaround By the way, could you describe somewhere how to activate the logging ? Thanks. Xavier Poinsard _______________________________________________ Classpathx-javamail mailing list Classpathx-javamail-mXXj517/[email protected] http://lists.gnu.org/mailman/listinfo/classpathx-javamail
noblock.diff
(text/plain, 1.9 KB)
Index: gnu/inet/pop3/POP3Connection.java
===================================================================
RCS file: /cvsroot/classpath/inetlib/source/gnu/inet/pop3/POP3Connection.java,v
retrieving revision 1.19
diff -u -r1.19 POP3Connection.java
--- gnu/inet/pop3/POP3Connection.java 6 Jun 2005 21:00:25 -0000 1.19
+++ gnu/inet/pop3/POP3Connection.java 30 Jun 2005 14:20:26 -0000
@@ -770,6 +770,8 @@
throws IOException
{
response = in.readLine();
+ if (null==response)
+ throw new IOException("unexpected end of stream");
logger.log(POP3_TRACE, "< " + response);
if (response.indexOf(_OK) == 0)
{
Index: gnu/inet/util/CRLFInputStream.java
===================================================================
RCS file: /cvsroot/classpath/inetlib/source/gnu/inet/util/CRLFInputStream.java,v
retrieving revision 1.6
diff -u -r1.6 CRLFInputStream.java
--- gnu/inet/util/CRLFInputStream.java 6 Apr 2005 18:55:41 -0000 1.6
+++ gnu/inet/util/CRLFInputStream.java 30 Jun 2005 14:20:26 -0000
@@ -146,7 +146,7 @@
throws IOException
{
doReset = false;
- int lm1 = len - 1;
+ int lm1 = off+ len - 1;
for (int i = off; i < len; i++)
{
if (b[i] == CR)
Index: gnu/inet/util/LineInputStream.java
===================================================================
RCS file: /cvsroot/classpath/inetlib/source/gnu/inet/util/LineInputStream.java,v
retrieving revision 1.8
diff -u -r1.8 LineInputStream.java
--- gnu/inet/util/LineInputStream.java 7 Dec 2004 11:15:35 -0000 1.8
+++ gnu/inet/util/LineInputStream.java 30 Jun 2005 14:20:26 -0000
@@ -92,11 +92,12 @@
buf = new ByteArrayOutputStream();
this.encoding = encoding;
eof = false;
- blockReads = in.markSupported();
+ blockReads = false;//in.markSupported();
}
/**
* Read a line of input.
+ * @return the response as string or null if end of stream reached
*/
public String readLine()
throws IOException