protected OutputStream doSerialize(HttpDataTransmitter datatransmitter,
HttpMessage message) throws HttpException, IOException {
Header transferEncodingHeader = message.getFirstHeader(HTTP.TRANSFER_ENCODING);
Header contentLengthHeader = message.getFirstHeader(HTTP.CONTENT_LEN);
if (transferEncodingHeader != null) {
String s = transferEncodingHeader.getValue();
if (HTTP.CHUNK_CODING.equalsIgnoreCase(s)) {
if (message.getHttpVersion().lessEquals(HttpVersion.HTTP_1_0)) {
throw new ProtocolException(
"Chunked transfer encoding not allowed for " +
message.getHttpVersion());
}
return new ChunkedOutputStream(datatransmitter);
} else if (HTTP.IDENTITY_CODING.equalsIgnoreCase(s)) {
return new IdentityOutputStream(datatransmitter);
} else {
throw new ProtocolException(
"Unsupported transfer encoding: " + s);
}
} else if (contentLengthHeader != null) {
String s = contentLengthHeader.getValue();
try {
long len = Long.parseLong(s);
return new ContentLengthOutputStream(datatransmitter, len);
} catch (NumberFormatException e) {
throw new ProtocolException("Invalid content length: " + s);
}
} else {
return new IdentityOutputStream(datatransmitter);
}
}
|