net.i2p.i2ptunnel.udpTunnel

## Class I2PTunnelUDPServerBase

- java.lang.Object
- - net.i2p.util.EventDispatcherImpl
  - - 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().

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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, tunnel`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `I2PTunnelUDPServerBase(File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `close(boolean forced)` Closes the tunnel and destroys the session.
    `long` | `getReadTimeout()` Get the read idle timeout for newly-created connections (in milliseconds).
    `void` | `send(Destination to, int fromPort, int toPort, byte[] data)` Sink Methods
    `void` | `setReadTimeout(long ms)` Set the read idle timeout for newly-created connections (in milliseconds).
    `void` | `setSink(Sink s)` Sets the receiver of the UDP datagrams from I2P.
    `void` | `start()` Starts the I2P source to begin receiving datagrams.
    `void` | `startRunning()` Starts the tunnel and begins processing datagrams.

    - ### Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask

      `connected, destroy, disconnected, errorOccurred, getBooleanOption, getId, getTunnel, isOpen, optionsUpdated, 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

    - #### l

          protected Logging l

    - #### readTimeout

          protected long readTimeout

      default timeout to 3 minutes - override if desired

    - #### slock

          protected Object slock

  - ### Constructor Detail

    - #### I2PTunnelUDPServerBase

          public I2PTunnelUDPServerBase(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

    - #### close

          public boolean close(boolean forced)

      Closes the tunnel and destroys the session.
      Specified by:
        `close` in class `I2PTunnelTask`
      Parameters:
        `forced` - if true, force immediate close without graceful shutdown
      Returns:
        true if closed successfully

    - #### getReadTimeout

          public long getReadTimeout()

      Get the read idle timeout for newly-created connections (in milliseconds).
      Returns:
        The read timeout used for connections

    - #### send

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

      Sink Methods
      Specified by:
        `send` in interface `Sink`
      Parameters:
        `to` -
        `fromPort` - I2CP source port, 0-65535
        `toPort` - I2CP destination port, 0-65535
      Throws:
        `RuntimeException` - if session is closed

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

    - #### setSink

          public void setSink(Sink s)

      Sets the receiver of the UDP datagrams from I2P. Subclass must call this after constructor and before start().
      Specified by:
        `setSink` in interface `Source`
      Parameters:
        `s` - the sink to receive incoming datagrams

    - #### start

          public void start()

      Starts the I2P source to begin receiving datagrams.
      Specified by:
        `start` in interface `Source`

    - #### startRunning

          public void startRunning()

      Starts the tunnel and begins processing datagrams. Classes should override to start UDP side as well.