blob: 41d7d54c987a0e53a77ac8c4d3402c419b7ff4d4 [file] [log] [blame]
package org.bouncycastle.mime;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.bouncycastle.mime.smime.SMimeParserContext;
public class CanonicalOutputStream
extends FilterOutputStream
{
protected int lastb;
protected static byte newline[];
private final boolean is7Bit;
public CanonicalOutputStream(SMimeParserContext parserContext, Headers headers, OutputStream outputstream)
{
super(outputstream);
lastb = -1;
// TODO: eventually may need to handle multiparts with binary...
if (headers.getContentType() != null)
{
is7Bit = headers.getContentType() != null && !headers.getContentType().equals("binary");
}
else
{
is7Bit = parserContext.getDefaultContentTransferEncoding().equals("7bit");
}
}
public void write(int i)
throws IOException
{
if (is7Bit)
{
if (i == '\r')
{
out.write(newline);
}
else if (i == '\n')
{
if (lastb != '\r')
{
out.write(newline);
}
}
else
{
out.write(i);
}
}
else
{
out.write(i);
}
lastb = i;
}
public void write(byte[] buf)
throws IOException
{
this.write(buf, 0, buf.length);
}
public void write(byte buf[], int off, int len)
throws IOException
{
for (int i = off; i != off + len; i++)
{
this.write(buf[i]);
}
}
public void writeln()
throws IOException
{
super.out.write(newline);
}
static
{
newline = new byte[2];
newline[0] = '\r';
newline[1] = '\n';
}
}