k-9/k9mail-library/src/main/java/com/fsck/k9/mail/filter/SmtpDataStuffing.java

34 lines
964 B
Java
Raw Normal View History

package com.fsck.k9.mail.filter;
2010-02-04 21:32:32 -05:00
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class SmtpDataStuffing extends FilterOutputStream {
2010-02-04 21:32:32 -05:00
private static final int STATE_NORMAL = 0;
private static final int STATE_CR = 1;
private static final int STATE_CRLF = 2;
2010-02-04 21:32:32 -05:00
private int state = STATE_NORMAL;
public SmtpDataStuffing(OutputStream out) {
2010-02-04 21:32:32 -05:00
super(out);
}
@Override
public void write(int oneByte) throws IOException {
if (oneByte == '\r') {
2010-02-04 21:32:32 -05:00
state = STATE_CR;
} else if ((state == STATE_CR) && (oneByte == '\n')) {
2010-02-04 21:32:32 -05:00
state = STATE_CRLF;
} else if ((state == STATE_CRLF) && (oneByte == '.')) {
2010-02-04 21:32:32 -05:00
// Read <CR><LF><DOT> so this line needs an additional period.
super.write('.');
state = STATE_NORMAL;
} else {
2010-02-04 21:32:32 -05:00
state = STATE_NORMAL;
}
super.write(oneByte);
}
}