From 3f35e927ddfa2124eecea0d45f2a5072dd16df69 Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 17 Apr 2014 18:48:07 +0000 Subject: [PATCH] SusiMail: - Initializer cleanup, finals - Escape "--" inside HTML comments - Log errors to router log too - Notes on ticket #508 header line issues --- .../src/src/i2p/susi/debug/Debug.java | 6 ++++ .../src/src/i2p/susi/util/Config.java | 4 +-- .../src/src/i2p/susi/util/Folder.java | 5 +-- .../src/src/i2p/susi/util/HexTable.java | 4 +-- .../src/src/i2p/susi/webmail/Mail.java | 2 -- .../src/src/i2p/susi/webmail/MailCache.java | 6 ++-- .../src/src/i2p/susi/webmail/MailPart.java | 6 ++-- .../src/i2p/susi/webmail/RequestWrapper.java | 13 +++----- .../src/src/i2p/susi/webmail/WebMail.java | 8 +++-- .../webmail/encoding/EncodingFactory.java | 4 +-- .../i2p/susi/webmail/encoding/HeaderLine.java | 9 ++++++ .../i2p/susi/webmail/pop3/POP3MailBox.java | 32 ++++++++++++------- 12 files changed, 58 insertions(+), 41 deletions(-) diff --git a/apps/susimail/src/src/i2p/susi/debug/Debug.java b/apps/susimail/src/src/i2p/susi/debug/Debug.java index aadfefdc7e..cc24f48f9d 100644 --- a/apps/susimail/src/src/i2p/susi/debug/Debug.java +++ b/apps/susimail/src/src/i2p/susi/debug/Debug.java @@ -23,6 +23,8 @@ */ package i2p.susi.debug; +import net.i2p.I2PAppContext; + /** * @author susi23 */ @@ -31,13 +33,17 @@ public class Debug { public static final int ERROR = 1; public static final int DEBUG = 2; private static int level = ERROR; + public static void setLevel( int newLevel ) { level = newLevel; } + public static void debug( int msgLevel, String msg ) { if( msgLevel <= level ) System.err.println( msg ); + if (msgLevel <= ERROR) + I2PAppContext.getGlobalContext().logManager().getLog(Debug.class).error(msg); } } diff --git a/apps/susimail/src/src/i2p/susi/util/Config.java b/apps/susimail/src/src/i2p/susi/util/Config.java index 8564cbfad8..eeff33a0f5 100644 --- a/apps/susimail/src/src/i2p/susi/util/Config.java +++ b/apps/susimail/src/src/i2p/susi/util/Config.java @@ -37,8 +37,8 @@ import net.i2p.I2PAppContext; */ public class Config { - private static Properties properties = null, config = null; - private static String configPrefix = null; + private static Properties properties, config; + private static String configPrefix; /** * * @param name diff --git a/apps/susimail/src/src/i2p/susi/util/Folder.java b/apps/susimail/src/src/i2p/susi/util/Folder.java index 81fad05ff8..c2c126a5b8 100644 --- a/apps/susimail/src/src/i2p/susi/util/Folder.java +++ b/apps/susimail/src/src/i2p/susi/util/Folder.java @@ -51,19 +51,16 @@ public class Folder { private int pages, pageSize, currentPage; private O[] unsortedElements, elements; - private Hashtable> sorter; + private final Hashtable> sorter; private boolean sortingDirection; Comparator currentSorter; public Folder() { pages = 1; - pageSize = 0; currentPage = 1; - unsortedElements = null; sorter = new Hashtable>(); sortingDirection = UP; - currentSorter = null; } /** diff --git a/apps/susimail/src/src/i2p/susi/util/HexTable.java b/apps/susimail/src/src/i2p/susi/util/HexTable.java index cf3efd3bb2..8d08e8ceb6 100644 --- a/apps/susimail/src/src/i2p/susi/util/HexTable.java +++ b/apps/susimail/src/src/i2p/susi/util/HexTable.java @@ -28,10 +28,9 @@ package i2p.susi.util; */ public class HexTable { - public static String[] table = null; + public static final String[] table = new String[256]; static { - table = new String[256]; for( int i = 0; i < 256; i++ ) { String str = intToHex( i ); if( str.length() == 1 ) @@ -39,6 +38,7 @@ public class HexTable { table[i] = "=" + str; } } + private static String intToHex( int b ) { if( b == 0 ) diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java index 02fd3b383b..9bd67ed424 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java @@ -65,8 +65,6 @@ public class Mail { public boolean deleted; public Mail() { - id = 0; - size = 0; formattedSender = unknown; formattedSubject = unknown; formattedDate = unknown; diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java index 813457e07c..dc3fb8cf3b 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java +++ b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java @@ -35,9 +35,9 @@ public class MailCache { public static final boolean FETCH_HEADER = true; public static final boolean FETCH_ALL = false; - private POP3MailBox mailbox; - private Hashtable mails; - private Object synchronizer; + private final POP3MailBox mailbox; + private final Hashtable mails; + private final Object synchronizer; MailCache( POP3MailBox mailbox ) { this.mailbox = mailbox; diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailPart.java b/apps/susimail/src/src/i2p/susi/webmail/MailPart.java index ac7d8cefca..2e81c95ccb 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/MailPart.java +++ b/apps/susimail/src/src/i2p/susi/webmail/MailPart.java @@ -37,9 +37,9 @@ public class MailPart { public String headerLines[], type, boundary, encoding, name, filename, description, disposition, charset, version; public int beginBody, begin, end; - public ArrayList parts = null; - public boolean multipart = false, message = false; - public ReadBuffer buffer = null; + public ArrayList parts; + public boolean multipart, message; + public ReadBuffer buffer; public void parse( ReadBuffer readBuffer ) { diff --git a/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java b/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java index 30e8bb4466..a9e81be67e 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java +++ b/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java @@ -53,16 +53,11 @@ import org.mortbay.servlet.MultiPartRequest; */ public class RequestWrapper { - private HttpServletRequest httpRequest = null; - private MultiPartRequest multiPartRequest = null; - private Hashtable cache; + private final HttpServletRequest httpRequest; + private MultiPartRequest multiPartRequest; + private final Hashtable cache; private Hashtable cachedParameterNames; - /** - * do not call - */ - private RequestWrapper() - { - } + /** * @param httpRequest */ diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 3f724b3a15..a403751e35 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -403,9 +403,10 @@ public class WebMail extends HttpServlet if( html ) { out.println( "" ); } @@ -1742,6 +1743,7 @@ public class WebMail extends HttpServlet } if( !RELEASE ) { out.println( "" ); } diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java index fbc6d1a4b8..f42506ee34 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java +++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java @@ -35,9 +35,9 @@ import java.util.Set; */ public class EncodingFactory { - public static final String CONFIG_ENCODING = "encodings"; + private static final String CONFIG_ENCODING = "encodings"; - private static Hashtable encodings = null; + private static final Hashtable encodings; static { encodings = new Hashtable(); diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java index 7f9db2e822..2e6599c217 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java +++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/HeaderLine.java @@ -31,6 +31,10 @@ import java.io.IOException; import java.io.InputStream; /** + * Ref: + * http://en.wikipedia.org/wiki/MIME#Encoded-Word + * http://tools.ietf.org/html/rfc2047 + * * @author susi */ public class HeaderLine implements Encoding { @@ -167,6 +171,7 @@ public class HeaderLine implements Encoding { if( in[offset] == '?' ) { // System.err.println( "=? found at " + ( offset -1 ) ); int f2 = offset + 1; + // FIXME save charset here ticket #508 for( ; f2 < end && in[f2] != '?'; f2++ ); if( f2 < end ) { /* @@ -196,6 +201,7 @@ public class HeaderLine implements Encoding { try { // System.err.println( "decode(" + (f3 + 1) + "," + ( f4 - f3 - 1 ) + ")" ); tmp = e.decode( in, f3 + 1, f4 - f3 - 1 ); + // FIXME use saved charset here ticket #508 for( int j = 0; j < tmp.length; j++ ) { byte d = tmp.content[ tmp.offset + j ]; out[written++] = ( d == '_' ? 32 : d ); @@ -287,6 +293,8 @@ public class HeaderLine implements Encoding { public ReadBuffer decode(ReadBuffer in) throws DecodingException { return decode( in.content, in.offset, in.length ); } + +/***** public static void main( String[] args ) throws EncodingException { String text = "Subject: test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test \r\n" + "From: Smörebröd \r\n" + @@ -296,4 +304,5 @@ public class HeaderLine implements Encoding { System.out.println( hl.encode( "test ÄÖÜ" ) ); System.out.println( hl.encode( "Здравствуйте" ) ); } +****/ } diff --git a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java index e6a47cc0c2..7882b4624f 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java +++ b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java @@ -24,6 +24,7 @@ package i2p.susi.webmail.pop3; import i2p.susi.debug.Debug; +import i2p.susi.webmail.Messages; import i2p.susi.util.ReadBuffer; import java.io.IOException; @@ -40,24 +41,26 @@ public class POP3MailBox { private static final int DEFAULT_BUFSIZE = 4096; - private String host = null, user = null, pass = null; + private final String host, user, pass; - private String lastLine = "-ERR No response from server", lastError = null; + private static final String ERR = "-ERR "; + private String lastLine, lastError; - private int port = 0, mails = 0, read = 0; + private final int port; + private int mails, read; - private boolean connected = false; + private boolean connected; - private Hashtable headerList = null, bodyList = null; - private Hashtable sizes = null; - private Hashtable uidlToID = null; - private ArrayList uidlList = null; + private final Hashtable headerList, bodyList; + private Hashtable sizes; + private final Hashtable uidlToID; + private final ArrayList uidlList; - private Socket socket = null; + private Socket socket; - private byte[] buffer = new byte[DEFAULT_BUFSIZE]; + private final byte[] buffer = new byte[DEFAULT_BUFSIZE]; - private Object synchronizer = null; + private final Object synchronizer; /** * @param host @@ -79,6 +82,8 @@ public class POP3MailBox { uidlToID = new Hashtable(); sizes = new Hashtable(); synchronizer = new Object(); + // this appears in the UI so translate + lastLine = ERR + _("No response from server"); connect(); } @@ -687,4 +692,9 @@ public class POP3MailBox { close(); connect(); } + + /** translate */ + private static String _(String s) { + return Messages.getString(s); + } }