net.i2p.i2ptunnel
Class I2PTunnelIRCClient

java.lang.Object
  extended by net.i2p.util.EventDispatcherImpl
      extended by net.i2p.i2ptunnel.I2PTunnelTask
          extended by net.i2p.i2ptunnel.I2PTunnelClientBase
              extended by net.i2p.i2ptunnel.I2PTunnelIRCClient
All Implemented Interfaces:
Runnable, EventDispatcher

public class I2PTunnelIRCClient
extends I2PTunnelClientBase

Todo: Can we extend I2PTunnelClient instead and remove some duplicated code?


Field Summary
static String PROP_DCC
           
protected  long readTimeout
           
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
_clientId, _context, _log, _ownDest, DEFAULT_CONNECT_TIMEOUT, dest, l, listenerReady, mySockets, PROP_USE_SSL, sockLock, sockMgr, ss
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask
open
 
Constructor Summary
I2PTunnelIRCClient(int localPort, String destinations, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)
          As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
 
Method Summary
protected  void clientConnectionRun(Socket s)
          Manage a connection in a separate thread.
 boolean close(boolean forced)
          Note that the tunnel can be reopened after this by calling startRunning().
 void optionsUpdated(I2PTunnel tunnel)
          Update the dests then call super.
 void startRunning()
          Actually open the local socket and start working on incoming connections.
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelClientBase
addSubsession, buildSocketManager, buildSocketManager, buildSocketManager, buildSocketManager, closeSocket, createI2PSocket, createI2PSocket, createI2PSocket, destroy, getDefaultOptions, getDefaultOptions, getListenHost, getLocalPort, getSocketManager, getSocketManager, getSocketManager, killSharedClient, manageConnection, run, verifySocketManager
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask
connected, disconnected, errorOccurred, getId, getTunnel, isOpen, reportAbuse, routerDisconnected, setId, setName, setTunnel, toString
 
Methods inherited from class net.i2p.util.EventDispatcherImpl
attachEventDispatcher, detachEventDispatcher, getEventDispatcher, getEvents, getEventValue, ignoreEvents, notifyEvent, unIgnoreEvents, waitEventValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

readTimeout

protected long readTimeout

PROP_DCC

public static final String PROP_DCC
Since:
0.8.9
See Also:
Constant Field Values
Constructor Detail

I2PTunnelIRCClient

public I2PTunnelIRCClient(int localPort,
                          String destinations,
                          Logging l,
                          boolean ownDest,
                          EventDispatcher notifyThis,
                          I2PTunnel tunnel,
                          String pkf)
                   throws IllegalArgumentException
As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket. You MUST call startRunning() for that.

Parameters:
destinations - peers we target, comma- or space-separated. Since 0.9.9, each dest may be appended with :port
Throws:
IllegalArgumentException - if the I2PTunnel does not contain valid config to contact the router
Method Detail

clientConnectionRun

protected void clientConnectionRun(Socket s)
Description copied from class: I2PTunnelClientBase
Manage a connection in a separate thread. This only works if you do not override manageConnection(). This is run in a thread from an unlimited-size thread pool, so it may block or run indefinitely.

Specified by:
clientConnectionRun in class I2PTunnelClientBase

optionsUpdated

public void optionsUpdated(I2PTunnel tunnel)
Update the dests then call super.

Overrides:
optionsUpdated in class I2PTunnelClientBase
Since:
0.9.9

startRunning

public void startRunning()
Description copied from class: I2PTunnelClientBase
Actually open the local socket and start working on incoming connections. *Must* be called by derived classes after initialization. (this wasn't actually true until 0.9.20) This will be fast if i2cp.delayOpen is true, but could take a LONG TIME if it is false, as it connects to the router and builds tunnels. Extending classes must check the value of boolean open after calling super.startRunning(), if false then something went wrong.

Overrides:
startRunning in class I2PTunnelClientBase

close

public boolean close(boolean forced)
Description copied from class: I2PTunnelClientBase
Note that the tunnel can be reopened after this by calling startRunning(). This may not release all resources. In particular, the I2PSocketManager remains and it may have timer threads that continue running. To release all resources permanently, call destroy(). Does nothing if open is already false. Sets open = false but does not notifyAll().

Overrides:
close in class I2PTunnelClientBase
Returns:
success