throw( new Exception( "Content-Length missing" ));
}
int content_length = Integer.parseInt( cl_str );
ByteArrayOutputStream baos = null;
FileOutputStream fos = null;
OutputStream data_os;
if ( content_length <= 256*1024 ){
baos = new ByteArrayOutputStream();
data_os = baos;
}else{
post_file = AETemporaryFileHandler.createTempFile();
post_file.deleteOnExit();
fos = new FileOutputStream( post_file );
data_os = fos;
}
while( content_length > 0 ){
int len = is.read( buffer, 0, Math.min( content_length, buffer.length ));
if ( len < 0 ){
throw( new TRTrackerServerException( "premature end of input stream" ));
}
data_os.write( buffer, 0, len );
content_length -= len;
}
if ( baos != null ){
post_is = new ByteArrayInputStream(baos.toByteArray());
}else{
fos.close();
post_is = new BufferedInputStream( new FileInputStream( post_file ), 256*1024 );
}
// System.out.println( "TRTrackerServerProcessorTCP: request data = " + baos.size());
}else{
int pos = header.indexOf(' ');
if ( pos == -1 ){
throw( new TRTrackerServerException( "header doesn't have space in right place" ));
}
timeout_ticks = 1;
lowercase_header = header.toLowerCase();
url_start = pos+1;
}
setTaskState( "processing request" );
current_request = header;
try{
if ( post_is == null ){
// set up a default input stream
post_is = new ByteArrayInputStream(new byte[0]);
}
int url_end = header.indexOf( " ", url_start );
if ( url_end == -1 ){
throw( new TRTrackerServerException( "header doesn't have space in right place" ));
}
String url = header.substring( url_start, url_end ).trim();
int nl_pos = header.indexOf( NL, url_end );
if ( nl_pos == -1 ){
throw( new TRTrackerServerException( "header doesn't have nl in right place" ));
}
String http_ver = header.substring( url_end, nl_pos ).trim();
String con_str = getHeaderField( header, lowercase_header, "connection:" );
if ( con_str == null ){
if ( http_ver.equalsIgnoreCase( "HTTP/1.0" )){
keep_alive = false;
}
}else if ( con_str.equalsIgnoreCase( "close" )){
keep_alive = false;
}
if ( head ){
ByteArrayOutputStream head_response = new ByteArrayOutputStream(4096);
if ( !processRequest(
header,
lowercase_header,
url,
(InetSocketAddress)socket.getLocalSocketAddress(),
(InetSocketAddress)socket.getRemoteSocketAddress(),
false,
keep_alive,
post_is,
head_response,
null )){
keep_alive = false;
}
byte[] head_data = head_response.toByteArray();
int header_length = head_data.length;
for (int i=3;i<head_data.length;i++){