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

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

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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, clone, 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

      `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`