Package net.i2p.i2ptunnel
Class I2PTunnelServer
- java.lang.Object
-
- net.i2p.util.EventDispatcherImpl
-
- net.i2p.i2ptunnel.I2PTunnelTask
-
- net.i2p.i2ptunnel.I2PTunnelServer
-
- All Implemented Interfaces:
Runnable,EventDispatcher
- Direct Known Subclasses:
I2PTunnelDCCServer,I2PTunnelHTTPServer,I2PTunnelIRCServer
public class I2PTunnelServer extends I2PTunnelTask implements Runnable
-
-
Field Summary
Fields Modifier and Type Field Description protected static long__serverIdapparently unusedprotected ThreadPoolExecutor_clientExecutorprotected Log_logprotected booleanbidirprotected I2PServerSocketi2pssprotected Logginglprotected intlocalPortstatic StringPROP_ALT_PKFstatic StringPROP_UNIQUE_LOCALstatic StringPROP_USE_SSLprotected longreadTimeoutdefault timeout - override if desiredprotected InetAddressremoteHostprotected intremotePortprotected Objectslockprotected I2PSocketManagersockMgrprotected ObjectsslLockprotected I2PTunnelTasktask-
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask
open
-
-
Constructor Summary
Constructors Constructor Description I2PTunnelServer(InetAddress host, int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)Non-blockingI2PTunnelServer(InetAddress host, int port, InputStream privData, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)Non-blockingI2PTunnelServer(InetAddress host, int port, String privData, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)Non-blockingI2PTunnelServer(InetAddress host, int port, I2PSocketManager sktMgr, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)Non-blocking
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidblockingHandle(I2PSocket socket)This is run in a thread from a limited-size thread pool via Handler.run(), except for a standard server (this class, no extension, as determined in getUsePool()), it is run directly in the acceptor thread (see run()).booleanclose(boolean forced)Note that the tunnel can be reopened after this by calling startRunning().booleandestroy()Note that the tunnel cannot be reopened after this by calling startRunning(), as it will destroy the underlying socket manager.protected intgetHandlerCount()longgetReadTimeout()Get the read idle timeout for newly-created connections (in milliseconds).protected SocketgetSocket(Hash from, int incomingPort)Get a regular or SSL socket depending on config and the incoming port.protected SocketgetSocket(Hash from, InetAddress remoteHost, int remotePort)Get a regular or SSL socket depending on config.voidoptionsUpdated(I2PTunnel tunnel)Update the I2PSocketManager.voidrun()If usePool is set, this starts the executor pool.voidsetReadTimeout(long ms)Set the read idle timeout for newly-created connections (in milliseconds).booleanshouldUsePool()voidstartRunning()Start running the I2PTunnelServer.-
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
-
-
-
-
Field Detail
-
_log
protected final Log _log
-
sockMgr
protected final I2PSocketManager sockMgr
-
i2pss
protected volatile I2PServerSocket i2pss
-
slock
protected final Object slock
-
sslLock
protected final Object sslLock
-
remoteHost
protected InetAddress remoteHost
-
remotePort
protected int remotePort
-
l
protected final Logging l
-
readTimeout
protected long readTimeout
default timeout - override if desired
-
PROP_USE_SSL
public static final String PROP_USE_SSL
- See Also:
- Constant Field Values
-
PROP_UNIQUE_LOCAL
public static final String PROP_UNIQUE_LOCAL
- See Also:
- Constant Field Values
-
PROP_ALT_PKF
public static final String PROP_ALT_PKF
- Since:
- 0.9.30
- See Also:
- Constant Field Values
-
__serverId
protected static volatile long __serverId
apparently unused
-
task
protected I2PTunnelTask task
-
bidir
protected boolean bidir
-
_clientExecutor
protected volatile ThreadPoolExecutor _clientExecutor
-
localPort
protected int localPort
-
-
Constructor Detail
-
I2PTunnelServer
public I2PTunnelServer(InetAddress host, int port, String privData, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
Non-blocking- Parameters:
privData- Base64-encoded private key data, format is specified inPrivateKeyFile- Throws:
IllegalArgumentException- if the I2CP configuration is b0rked so badly that we cant create a socketManager
-
I2PTunnelServer
public I2PTunnelServer(InetAddress host, int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
Non-blocking- Parameters:
privkey- file containing the private key data, format is specified inPrivateKeyFileprivkeyname- the name of the privKey file, just for logging- Throws:
IllegalArgumentException- if the I2CP configuration is b0rked so badly that we cant create a socketManager
-
I2PTunnelServer
public I2PTunnelServer(InetAddress host, int port, InputStream privData, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
Non-blocking- Parameters:
privData- stream containing the private key data, format is specified inPrivateKeyFileprivkeyname- the name of the privKey file, just for logging- Throws:
IllegalArgumentException- if the I2CP configuration is b0rked so badly that we cant create a socketManager
-
I2PTunnelServer
public I2PTunnelServer(InetAddress host, int port, I2PSocketManager sktMgr, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
Non-blocking- Parameters:
sktMgr- the existing socket manager- Since:
- 0.8.9
-
-
Method Detail
-
startRunning
public void startRunning()
Start running the I2PTunnelServer. Warning, blocks while connecting to router and building tunnels;- Throws:
IllegalArgumentException- if the I2CP configuration is b0rked so badly that we cant create a socketManager
-
setReadTimeout
public void setReadTimeout(long ms)
Set the read idle timeout for newly-created connections (in milliseconds). After this time expires without data being reached from the I2P network, the connection itself will be closed. Less than or equal to 0 means forever. Default -1 (forever) as of 0.9.36 for standard tunnels, but extending classes may override. Prior to that, default was 5 minutes, but did not work due to streaming bugs. Applies only to future connections; calling this does not affect existing connections.- Parameters:
ms- in ms
-
getReadTimeout
public long getReadTimeout()
Get the read idle timeout for newly-created connections (in milliseconds). Less than or equal to 0 means forever. Default -1 (forever) as of 0.9.36 for standard tunnels, but extending classes may override. Prior to that, default was 5 minutes, but did not work due to streaming bugs.- Returns:
- The read timeout used for connections
-
close
public boolean close(boolean forced)
Note that the tunnel can be reopened after this by calling startRunning(). This does 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().- Specified by:
closein classI2PTunnelTask- Returns:
- success
-
destroy
public boolean destroy()
Note that the tunnel cannot be reopened after this by calling startRunning(), as it will destroy the underlying socket manager. This releases all resources.- Overrides:
destroyin classI2PTunnelTask- Returns:
- success
- Since:
- 0.9.17
-
optionsUpdated
public void optionsUpdated(I2PTunnel tunnel)
Update the I2PSocketManager. And since 0.9.15, the target host and port.- Overrides:
optionsUpdatedin classI2PTunnelTask- Since:
- 0.9.1
-
getHandlerCount
protected int getHandlerCount()
-
run
public void run()
If usePool is set, this starts the executor pool. Then, do the accept() loop, and either hands each I2P socket to the executor or runs it in-line.
-
shouldUsePool
public boolean shouldUsePool()
-
blockingHandle
protected void blockingHandle(I2PSocket socket)
This is run in a thread from a limited-size thread pool via Handler.run(), except for a standard server (this class, no extension, as determined in getUsePool()), it is run directly in the acceptor thread (see run()). In either case, this method and any overrides must spawn a thread and return quickly. If blocking while reading the headers (as in HTTP and IRC), the thread pool may be exhausted. See PROP_USE_POOL, DEFAULT_USE_POOL, PROP_HANDLER_COUNT, DEFAULT_HANDLER_COUNT
-
getSocket
protected Socket getSocket(Hash from, int incomingPort) throws IOException
Get a regular or SSL socket depending on config and the incoming port. To configure a specific host:port as the server for incoming port xx, set option targetForPort.xx=host:port- Parameters:
from- may be used to construct local address since 0.9.13- Throws:
IOException- Since:
- 0.9.9
-
getSocket
protected Socket getSocket(Hash from, InetAddress remoteHost, int remotePort) throws IOException
Get a regular or SSL socket depending on config. The SSL config applies to all hosts/ports.- Parameters:
from- may be used to construct local address since 0.9.13- Throws:
IOException- Since:
- 0.9.9
-
-