/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.client.filter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
/**
* Data filter for a specific MIME type.
*/
public interface ContentDataFilter {
/** Filter data for reading. Objective is to ensure the data is safe if
* rendered by e.g. a web browser, and to guarantee that it is of the
* correct type. Filters should usually be implemented as "white list",
* that is, they should parse everything, and when encountering
* anything they cannot parse, should delete it, or throw a DataFilterException.
* IMPORTANT Implementation note: The InputStream may be a PipedInputStream
* (or conceivably even a network stream). Implementations MUST NOT ASSUME
* that input.available() == 0 => EOF!
* @param input Stream to read potentially unsafe data from.
* @param output Stream to write safe (but possibly incomplete) data to.
* @param charset Character set of the data if appropriate for this MIME type.
* @param otherParams Other type parameters if appropriate.
* @param cb Filter callback for modifying HTML tags. Irrelevant for most MIME types. In future we
* might need this for other types.
* @throws DataFilterException If the data cannot be filtered. Any data
* written so far should be discarded if possible.
* @throws IOException If there was a failure to read from the input data
* or write to the output data. Implementations should not throw this
* if data is merely badly formatted - any such exceptions should be
* caught and converted to a DataFilterException.
*/
public void readFilter(InputStream input, OutputStream output, String charset, HashMap<String, String> otherParams,
FilterCallback cb) throws DataFilterException, IOException;
/**
* Filter data for writing. Objective is to minimise accidental loss of
* anonymity when uploading files. Obviously we won't catch everything.
* Also, usually we want to do everything the read filter does at the
* same time, since external links etc are usually useless as they will
* be deleted by the read filter anyway, and may give away additional
* information for no good reason.
* IMPORTANT Implementation note: The InputStream may be a PipedInputStream
* (or conceivably even a network stream). Implementations MUST NOT ASSUME
* that input.available() == 0 => EOF!
* @param input Stream to read potentially unsafe data to be uploaded from.
* @param output Stream to write filtered data which is slightly less
* likely to contain accidental privacy breaches, and which should pass
* through readFilter() with minimal to no changes.
* @param charset Character set of the data if appropriate for this MIME type.
* @param otherParams Other type parameters if appropriate.
* @param cb Filter callback for modifying HTML tags. Irrelevant for most MIME types. In future we
* might need this for other types.
* @throws DataFilterException If the data cannot be filtered. Any data
* written so far should be discarded if possible.
* @throws IOException If there was a failure to read from the input data
* or write to the output data. Implementations should not throw this
* if data is merely badly formatted - any such exceptions should be
* caught and converted to a DataFilterException.
*/
public void writeFilter(InputStream input, OutputStream output, String charset, HashMap<String, String> otherParams,
FilterCallback cb) throws DataFilterException, IOException;
}