## net.i2p.i2ptunnel.udpTunnel
Class I2PTunnelUDPServerBase

    java.lang.Object
      net.i2p.i2ptunnel.I2PTunnelTask
          net.i2p.i2ptunnel.udpTunnel.I2PTunnelUDPServerBase

All Implemented Interfaces:
  Sink, Source, EventDispatcher

Direct Known Subclasses:
  StreamrProducer

    public class I2PTunnelUDPServerBase

extends I2PTunnelTask
implements Source, Sink

Base client class that sets up an I2P Datagram server destination. The UDP side is not implemented here, as there are at least two possibilities: 1) UDP side is a "client" Example: Streamr Producer - configure an inbound port - External application receives no data - Extending class must have a constructor with a port argument 2) UDP side is a client/server Example: DNS - configure an inbound port and a destination host and port - External application sends and receives data - Extending class must have a constructor with host and 2 port arguments So the implementing class must create a UDPSource and/or UDPSink, and must call setSink().

Author:
  zzz with portions from welterde's streamr

Field Summary
`protected Logging` `l`
`protected long` `readTimeout` default timeout to 3 minutes - override if desired
`protected Object` `slock`

Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask
`open`

Constructor Summary
`I2PTunnelUDPServerBase(boolean verify, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`

Method Summary
`boolean` `close(boolean forced)` I2PTunnelTask Methods Classes should override to close UDP side as well
`long` `getReadTimeout()` Get the read idle timeout for newly-created connections (in milliseconds).
`void` `send(Destination to, byte[] data)` Sink Methods
`void` `setReadTimeout(long ms)` Set the read idle timeout for newly-created connections (in milliseconds).
`void` `setSink(Sink s)` Source Methods Sets the receiver of the UDP datagrams from I2P Subclass must call this after constructor and before start()
`void` `start()` start the source
`void` `startRunning()` Classes should override to start UDP side as well.

Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask
`attachEventDispatcher, detachEventDispatcher, disconnected, errorOccurred, getEventDispatcher, getEvents, getEventValue, getId, getTunnel, ignoreEvents, isOpen, notifyEvent, reportAbuse, routerDisconnected, setId, setName, setTunnel, toString, unIgnoreEvents, waitEventValue`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### slock

    protected Object slock

### l

    protected Logging l

### readTimeout

    protected long readTimeout

  default timeout to 3 minutes - override if desired

Constructor Detail

### I2PTunnelUDPServerBase

    public I2PTunnelUDPServerBase(boolean verify,
                                  File privkey,
                                  String privkeyname,
                                  Logging l,
                                  EventDispatcher notifyThis,
                                  I2PTunnel tunnel)

Throws:
  `IllegalArgumentException` - if the I2CP configuration is b0rked so badly that we cant create a socketManager

Method Detail

### startRunning

    public void startRunning()

  Classes should override to start UDP side as well. Not specified in I2PTunnelTask but used in both I2PTunnelClientBase and I2PTunnelServer so let's implement it here too.

### 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.

### getReadTimeout

    public long getReadTimeout()

  Get the read idle timeout for newly-created connections (in milliseconds).

  Returns:
    The read timeout used for connections

### close

    public boolean close(boolean forced)

  I2PTunnelTask Methods Classes should override to close UDP side as well

  Specified by:
    `close` in class `I2PTunnelTask`

### setSink

    public void setSink(Sink s)

  Source Methods Sets the receiver of the UDP datagrams from I2P Subclass must call this after constructor and before start()

  Specified by:
    `setSink` in interface `Source`

### start

    public void start()

  start the source

  Specified by:
    `start` in interface `Source`

### send

    public void send(Destination to,
                     byte[] data)

  Sink Methods

  Specified by:
    `send` in interface `Sink`
  Parameters:
    `to` -