net.i2p.i2ptunnel
Class I2PTunnelRunner

java.lang.Object
  extended by java.lang.Thread
      extended by net.i2p.util.I2PThread
          extended by net.i2p.util.I2PAppThread
              extended by net.i2p.i2ptunnel.I2PTunnelRunner
All Implemented Interfaces:
Runnable, I2PSocket.SocketErrorListener
Direct Known Subclasses:
I2PTunnelHTTPClientRunner

public class I2PTunnelRunner
extends I2PAppThread
implements I2PSocket.SocketErrorListener

A thread that starts two more threads, one to forward traffic in each direction. Warning - not maintained as a stable API for external use.


Nested Class Summary
static interface I2PTunnelRunner.FailCallback
          For use in new constructor
 
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
protected  Log _log
           
(package private) static int MAX_PACKET_SIZE
          max bytes streamed in a packet - smaller ones might be filled up to this size.
(package private) static int NETWORK_BUFFER_SIZE
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
I2PTunnelRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, byte[] initialSocketData, List<I2PSocket> sockList)
          Deprecated. use FailCallback constructor
I2PTunnelRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, byte[] initialSocketData, List<I2PSocket> sockList, I2PTunnelRunner.FailCallback onFail)
          Recommended new constructor.
I2PTunnelRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, byte[] initialSocketData, List<I2PSocket> sockList, Runnable onTimeout)
          Deprecated. use FailCallback constructor
I2PTunnelRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, List<I2PSocket> sockList)
          Deprecated. use FailCallback constructor
I2PTunnelRunner(Socket s, I2PSocket i2ps, Object slock, byte[] initialI2PData, List<I2PSocket> sockList, Runnable onTimeout)
          Deprecated. use FailCallback constructor
 
Method Summary
protected  void close(OutputStream out, InputStream in, OutputStream i2pout, InputStream i2pin, Socket s, I2PSocket i2ps, Thread t1, Thread t2)
           
 void errorOccurred()
          Deprecated, unimplemented in streaming, never called.
 long getLastActivityOn()
          Deprecated. unused
protected  InputStream getSocketIn()
           
protected  OutputStream getSocketOut()
           
 long getStartedOn()
          When this runner started up transferring data
 boolean isFinished()
          Deprecated. unused
 void run()
           
 
Methods inherited from class net.i2p.util.I2PAppThread
addOOMEventThreadListener, fireOOM, removeOOMEventThreadListener
 
Methods inherited from class net.i2p.util.I2PThread
addOOMEventListener, removeOOMEventListener, start
 
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, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_log

protected final Log _log

MAX_PACKET_SIZE

static int MAX_PACKET_SIZE
max bytes streamed in a packet - smaller ones might be filled up to this size. Larger ones are not split (at least not on Sun's impl of BufferedOutputStream), but that is the streaming api's job...


NETWORK_BUFFER_SIZE

static final int NETWORK_BUFFER_SIZE
Constructor Detail

I2PTunnelRunner

public I2PTunnelRunner(Socket s,
                       I2PSocket i2ps,
                       Object slock,
                       byte[] initialI2PData,
                       List<I2PSocket> sockList)
Deprecated. use FailCallback constructor

Starts itself

Parameters:
slock - the socket lock, non-null
initialI2PData - may be null
sockList - may be null. Caller must add i2ps to the list! It will be removed here on completion. Will synchronize on slock when removing.

I2PTunnelRunner

public I2PTunnelRunner(Socket s,
                       I2PSocket i2ps,
                       Object slock,
                       byte[] initialI2PData,
                       byte[] initialSocketData,
                       List<I2PSocket> sockList)
Deprecated. use FailCallback constructor

Starts itself

Parameters:
slock - the socket lock, non-null
initialI2PData - may be null
initialSocketData - may be null
sockList - may be null. Caller must add i2ps to the list! It will be removed here on completion. Will synchronize on slock when removing.

I2PTunnelRunner

public I2PTunnelRunner(Socket s,
                       I2PSocket i2ps,
                       Object slock,
                       byte[] initialI2PData,
                       List<I2PSocket> sockList,
                       Runnable onTimeout)
Deprecated. use FailCallback constructor

Starts itself

Parameters:
slock - the socket lock, non-null
initialI2PData - may be null
sockList - may be null. Caller must add i2ps to the list! It will be removed here on completion. Will synchronize on slock when removing.
onTimeout - May be null. If non-null and no data (except initial data) was received, it will be run before closing s.

I2PTunnelRunner

public I2PTunnelRunner(Socket s,
                       I2PSocket i2ps,
                       Object slock,
                       byte[] initialI2PData,
                       byte[] initialSocketData,
                       List<I2PSocket> sockList,
                       Runnable onTimeout)
Deprecated. use FailCallback constructor

Starts itself

Parameters:
slock - the socket lock, non-null
initialI2PData - may be null
initialSocketData - may be null
sockList - may be null. Caller must add i2ps to the list! It will be removed here on completion. Will synchronize on slock when removing.
onTimeout - May be null. If non-null and no data (except initial data) was received, it will be run before closing s.

I2PTunnelRunner

public I2PTunnelRunner(Socket s,
                       I2PSocket i2ps,
                       Object slock,
                       byte[] initialI2PData,
                       byte[] initialSocketData,
                       List<I2PSocket> sockList,
                       I2PTunnelRunner.FailCallback onFail)
Recommended new constructor. Does NOT start itself. Caller must call start().

Parameters:
slock - the socket lock, non-null
initialI2PData - may be null
initialSocketData - may be null
sockList - may be null. Caller must add i2ps to the list! It will be removed here on completion. Will synchronize on slock when removing.
onFail - May be null. If non-null and no data (except initial data) was received, it will be run before closing s.
Method Detail

isFinished

public boolean isFinished()
Deprecated. unused

have we closed at least one (if not both) of the streams [aka we're done running the streams]?


getLastActivityOn

public long getLastActivityOn()
Deprecated. unused

When was the last data for this runner sent or received? As of 0.9.20, returns -1 always!

Returns:
date (ms since the epoch), or -1 if no data has been transferred yet

getStartedOn

public long getStartedOn()
When this runner started up transferring data


getSocketIn

protected InputStream getSocketIn()
                           throws IOException
Throws:
IOException

getSocketOut

protected OutputStream getSocketOut()
                             throws IOException
Throws:
IOException

run

public void run()
Specified by:
run in interface Runnable
Overrides:
run in class I2PThread

close

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

errorOccurred

public void errorOccurred()
Deprecated, unimplemented in streaming, never called.

Specified by:
errorOccurred in interface I2PSocket.SocketErrorListener