net.i2p.i2ptunnel
Class HTTPResponseOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
net.i2p.i2ptunnel.HTTPResponseOutputStream
- All Implemented Interfaces:
- Closeable, Flushable
class HTTPResponseOutputStream
- extends FilterOutputStream
This does the transparent gzip decompression on the client side.
Extended in I2PTunnelHTTPServer to do the compression on the server side.
Simple stream for delivering an HTTP response to
the client, trivially filtered to make sure "Connection: close"
is always in the response. Perhaps add transparent handling of the
Content-encoding: x-i2p-gzip, adjusting the headers to say Content-encoding: identity?
Content-encoding: gzip is trivial as well, but Transfer-encoding: chunked makes it
more work than is worthwhile at the moment.
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
_headerBuffer
protected ByteArray _headerBuffer
_gzip
protected boolean _gzip
_dataExpected
protected long _dataExpected
_contentType
protected String _contentType
- lower-case, trimmed
_contentEncoding
protected String _contentEncoding
- lower-case, trimmed
HTTPResponseOutputStream
public HTTPResponseOutputStream(OutputStream raw)
write
public void write(int c)
throws IOException
- Overrides:
write
in class FilterOutputStream
- Throws:
IOException
write
public void write(byte[] buf)
throws IOException
- Overrides:
write
in class FilterOutputStream
- Throws:
IOException
write
public void write(byte[] buf,
int off,
int len)
throws IOException
- Overrides:
write
in class FilterOutputStream
- Throws:
IOException
filterResponseLine
protected String filterResponseLine(String line)
- Possibly tweak that first HTTP response line (HTTP/1.0 200 OK, etc).
Overridden on server side.
shouldCompress
protected boolean shouldCompress()
finishHeaders
protected void finishHeaders()
throws IOException
- Throws:
IOException
close
public void close()
throws IOException
- Specified by:
close
in interface Closeable
- Overrides:
close
in class FilterOutputStream
- Throws:
IOException
beginProcessing
protected void beginProcessing()
throws IOException
- Throws:
IOException