net.i2p.i2ptunnel
Class HTTPResponseOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by java.io.FilterOutputStream
          extended by 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.


Field Summary
protected  String _contentType
           
protected  long _dataExpected
           
protected  boolean _gzip
           
protected  ByteArray _headerBuffer
           
 
Fields inherited from class java.io.FilterOutputStream
out
 
Constructor Summary
HTTPResponseOutputStream(OutputStream raw)
           
 
Method Summary
protected  void beginProcessing()
           
 void close()
           
protected  String filterResponseLine(String line)
          Possibly tweak that first HTTP response line (HTTP/1.0 200 OK, etc).
protected  void finishHeaders()
           
protected  boolean shouldCompress()
           
 void write(byte[] buf)
           
 void write(byte[] buf, int off, int len)
           
 void write(int c)
           
 
Methods inherited from class java.io.FilterOutputStream
flush
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_headerBuffer

protected ByteArray _headerBuffer

_gzip

protected boolean _gzip

_dataExpected

protected long _dataExpected

_contentType

protected String _contentType
Constructor Detail

HTTPResponseOutputStream

public HTTPResponseOutputStream(OutputStream raw)
Method Detail

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