Author: norman
Date: Thu May  5 19:38:54 2011
New Revision: 1099936

URL: http://svn.apache.org/viewvc?rev=1099936&view=rev
Log:
Make sure we don't send anything except 7bit over the wire when handle the 
message content via pop3. See hopefully fix JAMES-1222

Added:
    
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/ReadByteFilterInputStream.java
      - copied, changed from r1097906, 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ReadByteFilterInputStream.java
    
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/Ascii7BitInputStream.java
Removed:
    
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ReadByteFilterInputStream.java
Modified:
    
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ExtraDotInputStream.java
    
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java

Copied: 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/ReadByteFilterInputStream.java
 (from r1097906, 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ReadByteFilterInputStream.java)
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/ReadByteFilterInputStream.java?p2=james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/ReadByteFilterInputStream.java&p1=james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ReadByteFilterInputStream.java&r1=1097906&r2=1099936&rev=1099936&view=diff
==============================================================================
--- 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ReadByteFilterInputStream.java
 (original)
+++ 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/ReadByteFilterInputStream.java
 Thu May  5 19:38:54 2011
@@ -17,12 +17,17 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.pop3server.core;
+package org.apache.james.pop3server;
 
 import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+/**
+ * {@link FilterInputStream} which delagates every {@link #read(byte[])} and 
{@link #read(byte[], int, int)} to the {@link #read()} method
+ * 
+ *
+ */
 public class ReadByteFilterInputStream extends FilterInputStream {
 
     protected ReadByteFilterInputStream(InputStream in) {

Modified: 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ExtraDotInputStream.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ExtraDotInputStream.java?rev=1099936&r1=1099935&r2=1099936&view=diff
==============================================================================
--- 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ExtraDotInputStream.java
 (original)
+++ 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ExtraDotInputStream.java
 Thu May  5 19:38:54 2011
@@ -22,6 +22,8 @@ package org.apache.james.pop3server.core
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.james.pop3server.ReadByteFilterInputStream;
+
 /**
  * Adds extra dot if dot occurs in message body at beginning of line (according
  * to RFC1939)

Added: 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/Ascii7BitInputStream.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/Ascii7BitInputStream.java?rev=1099936&view=auto
==============================================================================
--- 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/Ascii7BitInputStream.java
 (added)
+++ 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/Ascii7BitInputStream.java
 Thu May  5 19:38:54 2011
@@ -0,0 +1,60 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.netty;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.james.pop3server.ReadByteFilterInputStream;
+
+/**
+ *
+ *  {@link FilterInputStream} which replace every char which is not a 7-bit 
ASCII char 
+ *  in the stream. Thats makes sure we don't try to send a char over the wire 
which is not supported
+ *  by the POP3 rfc.
+ *  
+ *
+ */
+public class Ascii7BitInputStream extends ReadByteFilterInputStream{
+
+    private final char replacementChar;
+    public final static char DEFAULT_REPLACEMENT_CHAR = '?';
+    
+    public Ascii7BitInputStream(InputStream in, char replacementChar) {
+        super(in);
+        this.replacementChar = replacementChar;
+    }
+
+    public Ascii7BitInputStream(InputStream in) {
+        this(in, DEFAULT_REPLACEMENT_CHAR);
+    }
+
+    @Override
+    public int read() throws IOException {
+        int i = in.read();
+        // check if we need to replace it with the replacement char
+        if (i > 127) {
+            return replacementChar;
+        } else {
+            return i;
+        }
+    }
+
+}

Modified: 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java?rev=1099936&r1=1099935&r2=1099936&view=diff
==============================================================================
--- 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
 (original)
+++ 
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
 Thu May  5 19:38:54 2011
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.pop3server.netty;
 
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -118,4 +119,9 @@ public class POP3NettySession extends Ab
         this.mailbox = mailbox;
     }
 
+    @Override
+    public void writeStream(InputStream stream) {
+        super.writeStream(new Ascii7BitInputStream(stream));
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to