/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wps.executor;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.input.CountingInputStream;
import org.geoserver.wps.WPSException;
/**
* Input stream wrapper that ensures we won't read more than maxSize bytes for a given input
*
* @author Andrea Aime - GeoSolutions
*/
class MaxSizeInputStream extends CountingInputStream {
private long maxSize;
private String inputId;
protected MaxSizeInputStream(InputStream in, String inputId, long maxSize) {
super(in);
this.inputId = inputId;
this.maxSize = maxSize;
}
@Override
public int read() throws IOException {
int result = super.read();
checkSize();
return result;
}
@Override
public int read(byte[] bts) throws IOException {
int result = super.read(bts);
checkSize();
return result;
}
@Override
public int read(byte[] bts, int off, int len) throws IOException {
int result = super.read(bts, off, len);
checkSize();
return result;
}
private void checkSize() {
if (getByteCount() > maxSize) {
throw new WPSException("Exceeded maximum input size of " + maxSize
+ " bytes while reading input " + inputId, "NoApplicableCode", inputId);
}
}
}