package com.limegroup.gnutella.uploader;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import com.limegroup.gnutella.Constants;
import com.limegroup.gnutella.http.ConstantHTTPHeaderValue;
import com.limegroup.gnutella.http.HTTPHeaderName;
import com.limegroup.gnutella.http.HTTPUtils;
import com.limegroup.gnutella.util.CommonUtils;
public class UpdateFileState extends UploadState {
//this will be populated with the contents of the file.
//this need not be created everytime we get a request for a file.
//rather it should be cached and updated everytime the file gets updated.
byte[] updateContents;
public UpdateFileState(HTTPUploader uploader) {
super(uploader);
}
public void writeMessageHeaders(OutputStream ostream) throws IOException {
//If any of this throws an exception, we will not send the headers.
File f = new File(CommonUtils.getUserSettingsDir(),"update.xml");
RandomAccessFile raf = new RandomAccessFile(f,"r");
int len = (int)raf.length();//not a very long file so no risk
updateContents = new byte[len];
raf.read(updateContents);
raf.close();
//Read the file OK. Now send the headers.
String str;
str = "HTTP/1.1 200 OK\r\n";
ostream.write(str.getBytes());
str = "User-Agent: " + CommonUtils.getHttpServer() + "\r\n";
ostream.write(str.getBytes());
str = "Content-Type: " + Constants.QUERYREPLY_MIME_TYPE + "\r\n";
ostream.write(str.getBytes());
str = "Content-Length: " + updateContents.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 {
ostream.write(updateContents);
UPLOADER.setAmountUploaded(updateContents.length);
}
public boolean getCloseConnection() {
return true;
}
}