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