1 36 package org.columba.ristretto.smtp; 37 38 import java.io.FilterInputStream ; 39 import java.io.IOException ; 40 import java.io.InputStream ; 41 42 43 52 public class StopWordSafeInputStream extends FilterInputStream { 53 54 private static final int CLRF = 0; 55 private static final int NORMAL = 1; 56 private static final int BUFFER = 2; 57 58 59 private int buffer; 60 private int mode; 61 62 67 public StopWordSafeInputStream(InputStream arg0) { 68 super(arg0); 69 mode = CLRF; 70 } 71 72 75 public int read() throws IOException { 76 if( mode == BUFFER ) { 77 mode = NORMAL; 78 return buffer; 79 } 80 81 buffer = in.read(); 82 83 if( mode == CLRF && buffer == '.') { 84 mode = BUFFER; 85 86 return '.'; 88 } 89 90 if( buffer == '\n') { 91 mode = CLRF; 92 } else { 93 mode = NORMAL; 94 } 95 96 return buffer; 97 } 98 99 102 public int read(byte[] arg0, int arg1, int arg2) throws IOException { 103 int next; 104 for( int i=0; i<arg2; i++) { 105 next = read(); 106 if( next == -1 ) { 107 if( i == 0 ) { 108 return -1; 109 } else { 110 return i; 111 } 112 } 113 arg0[arg1+i] = (byte) next; 114 } 115 return arg2; 116 } 117 118 } 119 | Popular Tags |