package org.mailster.smtp.util;
import java.io.InputStream;
import javax.mail.util.SharedByteArrayInputStream;
/**
* Shared streams utility methods.
*
* @author De Oliveira Edouard <doe_wanted@yahoo.fr>
*/
public class SharedStreamUtils
{
public final static char[] SMTP_TERMINATOR = {'\r', '\n', '.', '\r', '\n'};
/**
* Calls @link {@link #getPrivateInputStream(boolean, InputStream)}
* with the useCopy parameter set to true.
*/
public static InputStream getPrivateInputStream(InputStream data)
{
return getPrivateInputStream(true, data);
}
/**
* Provides a private unstuffed {@link InputStream} for each invocation unless
* <code>useCopy</code> is false in which case the <code>data</code> stream
* is unstuffed and returned. Unstuffing is made by encapsulating the stream within
* special streams.
*
* @see org.mailster.smtp.util.CharTerminatedInputStream
* @see org.mailster.smtp.util.DotUnstuffingInputStream
*/
public static InputStream getPrivateInputStream(boolean useCopy, InputStream data)
{
InputStream in = data;
if (useCopy)
{
if (data instanceof SharedByteArrayInputStream)
in = ((SharedByteArrayInputStream) data).newStream(0, -1);
else
if (data instanceof SharedTmpFileInputStream)
in = ((SharedTmpFileInputStream) data).newStream(0, -1);
else
throw new IllegalArgumentException("Unexpected data stream type : "
+data.getClass().getName());
}
in = new CharTerminatedInputStream(in, SMTP_TERMINATOR);
in = new DotUnstuffingInputStream(in);
return in;
}
}