## net.i2p.i2ptunnel
Class I2PTunnelHTTPClientRunner

    java.lang.Object
      java.lang.Thread
          net.i2p.util.I2PThread
              net.i2p.util.I2PAppThread
                  net.i2p.i2ptunnel.I2PTunnelRunner
                      net.i2p.i2ptunnel.I2PTunnelHTTPClientRunner

All Implemented Interfaces:
  Runnable, I2PSocket.SocketErrorListener

    public class I2PTunnelHTTPClientRunner

extends I2PTunnelRunner

Override the response with a stream filtering the HTTP headers received. Specifically, this makes sure we get Connection: close, so the browser knows they really shouldn't try to use persistent connections. The HTTP server *should* already be setting this, since the HTTP headers sent by the browser specify Connection: close, and the server should echo it. However, both broken and malicious servers could ignore that, potentially confusing the user.

Nested Class Summary

Nested classes/interfaces inherited from class net.i2p.util.I2PThread
`I2PThread.OOMEventListener`

Nested classes/interfaces inherited from class java.lang.Thread
`Thread.State, Thread.UncaughtExceptionHandler`

Field Summary

Fields inherited from class net.i2p.i2ptunnel.I2PTunnelRunner
`finished, finishLock, initialI2PData, initialSocketData, MAX_PACKET_SIZE, NETWORK_BUFFER_SIZE, ostreams, slock, sockets`

Fields inherited from class java.lang.Thread
`MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY`

Constructor Summary
`I2PTunnelHTTPClientRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, List sockList, Runnable onTimeout)`

Method Summary
`protected void` `close(OutputStream out, InputStream in, OutputStream i2pout, InputStream i2pin, Socket s, I2PSocket i2ps, Thread t1, Thread t2)`
`protected OutputStream` `getSocketOut()`

Methods inherited from class net.i2p.i2ptunnel.I2PTunnelRunner
`errorOccurred, getLastActivityOn, getSocketIn, getStartedOn, isFinished, run`

Methods inherited from class net.i2p.util.I2PAppThread
`addOOMEventThreadListener, fireOOM, removeOOMEventThreadListener`

Methods inherited from class net.i2p.util.I2PThread
`addOOMEventListener, finalize, main, removeOOMEventListener`

Methods inherited from class java.lang.Thread

`activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield`

Methods inherited from class java.lang.Object
`clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### I2PTunnelHTTPClientRunner

    public I2PTunnelHTTPClientRunner(Socket s,
                                     I2PSocket i2ps,
                                     Object slock,
                                     byte[] initialI2PData,
                                     List sockList,
                                     Runnable onTimeout)

Method Detail

### getSocketOut

    protected OutputStream getSocketOut()
                                 throws IOException

  Overrides:
    `getSocketOut` in class `I2PTunnelRunner`
  Throws:
    `IOException`

### close

    protected void close(OutputStream out,
                         InputStream in,
                         OutputStream i2pout,
                         InputStream i2pin,
                         Socket s,
                         I2PSocket i2ps,
                         Thread t1,
                         Thread t2)
                  throws InterruptedException,
                         IOException

  Overrides:
    `close` in class `I2PTunnelRunner`
  Throws:
    `InterruptedException`
    `IOException`