package com.limegroup.gnutella.uploader;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.limegroup.gnutella.http.ConstantHTTPHeaderValue;
import com.limegroup.gnutella.http.HTTPHeaderName;
import com.limegroup.gnutella.http.HTTPUtils;
import com.limegroup.gnutella.util.CommonUtils;
/**
* This class handles the case where the request was malformed.
* Rather than abruptly disconnecting,
* it writes the appropriate HTTP header
* error codes to the requesting client indicating that this is the
* case.
*/
public final class MalformedRequestState extends UploadState {
private static final Log LOG = LogFactory.getLog(MalformedRequestState.class);
/**
* Constant for the error message to send.
*/
private static final byte[] ERROR_MESSAGE =
"Malformed Request".getBytes();
public void writeMessageHeaders(OutputStream ostream) throws IOException {
LOG.debug("writing headers");
String str;
str = "HTTP/1.1 400 Malformed Request\r\n";
ostream.write(str.getBytes());
str = "Server: " + CommonUtils.getHttpServer() + "\r\n";
ostream.write(str.getBytes());
str = "Content-Type: text/plain\r\n";
ostream.write(str.getBytes());
str = "Content-Length: " + ERROR_MESSAGE.length + "\r\n";
ostream.write(str.getBytes());
HTTPUtils.writeHeader(HTTPHeaderName.CONNECTION,
ConstantHTTPHeaderValue.CLOSE_VALUE,
ostream);
str = "\r\n";
ostream.write(str.getBytes());
}
public void writeMessageBody(OutputStream ostream) throws IOException {
LOG.debug("writing body");
ostream.write(ERROR_MESSAGE);
}
public boolean getCloseConnection() {
return true;
}
}