From: adam Date: Sat, 9 Sep 2006 01:54:53 +0000 (+0000) Subject: IMAP: added better handling of asynchronous stream closing X-Git-Url: http://git.megacz.com/?p=org.ibex.mail.git;a=commitdiff_plain;h=e6dfdb0b5586774ea87f2e2e1313e23fd85c4a72 IMAP: added better handling of asynchronous stream closing darcs-hash:20060909015453-5007d-813b99af11ef995fae20ba5577120c28266dfc53.gz --- diff --git a/src/org/ibex/mail/protocol/IMAP.java b/src/org/ibex/mail/protocol/IMAP.java index e00f2d5..9730436 100644 --- a/src/org/ibex/mail/protocol/IMAP.java +++ b/src/org/ibex/mail/protocol/IMAP.java @@ -150,7 +150,6 @@ public class IMAP { if (s.charAt(0) != pre.charAt(0)) break; s = s.substring(1); pre = pre.substring(1); continue; } - break; } } } @@ -281,7 +280,7 @@ public class IMAP { parser = new Parser(conn); conn.setTimeout(30 * 60 * 1000); println("* OK " + conn.vhost + " " + IMAP.class.getName() + " IMAP4rev1 [RFC3501] v" + version + " server ready"); - for(String tag = null;; newline()) try { + for(String tag = null;;) try { conn.flush(); boolean uid = false; tag = null; Parser.Token tok = token(); if (tok == null) return; tag = tok.astring(); @@ -369,9 +368,14 @@ public class IMAP { } println(tag+" OK "+command+" Completed. " + (commandKey == LOGIN ? ("[CAPABILITY "+Printer.join(" ", api.capability())+"]") : "")); - Log.error("[imap]", conn.dumpLog()); - } catch (Server.Bad b) { println(tag==null ? "* BAD Invalid tag":(tag + " Bad " + b.toString())); - } catch (Server.No n) { println(tag==null?"* BAD Invalid tag":(tag+" No " + n.toString())); } + try { + newline(); + } catch (Stream.EOF e) { + Log.info(this, "connection closed"); + return; + } + } catch (Server.Bad b) { println(tag==null ? "* BAD Invalid tag":(tag + " Bad " + b.toString())); Log.warn(this,b); + } catch (Server.No n) { println(tag==null?"* BAD Invalid tag":(tag+" No " + n.toString())); Log.warn(this,n); } } private Parser.Token[] lastfetch = null; // hack @@ -698,12 +702,7 @@ public class IMAP { } } - public void newline() { - while (stream.peekc() == '\r' || stream.peekc() == '\n' || stream.peekc() == ' ') { - for(char c = stream.peekc(); c == ' ';) { stream.getc(); c = stream.peekc(); }; - for(char c = stream.peekc(); c == '\r' || c == '\n';) { stream.getc(); c = stream.peekc(); }; - } - } + public void newline() { stream.readln(); } public Token token() { return token(true); } public Token token(boolean freak) {