## net.i2p.i2ptunnel.udpTunnel
Class I2PTunnelUDPClientBase

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

All Implemented Interfaces:
  Sink, Source, EventDispatcher

Direct Known Subclasses:
  SOCKSUDPTunnel, StreamrConsumer

    public abstract class I2PTunnelUDPClientBase

extends I2PTunnelTask
implements Source, Sink

Base client class that sets up an I2P Datagram client destination. The UDP side is not implemented here, as there are at least two possibilities: 1) UDP side is a "server" Example: Streamr Consumer - Configure a destination host and port - External application sends no data - Extending class must have a constructor with host and port arguments 2) UDP side is a client/server Example: SOCKS UDP (DNS requests?) - 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 long` `_clientId`
`protected I2PAppContext` `_context`
`(package private) static long` `DEFAULT_CONNECT_TIMEOUT`
`protected Destination` `dest`
`protected Logging` `l`

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

Constructor Summary
`I2PTunnelUDPClientBase(String destination, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`

Method Summary
`boolean` `close(boolean forced)` I2PTunnelTask Methods Classes should override to close UDP side as well
`void` `send(Destination to, byte[] data)` Sink Methods
`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()` Actually start working on outgoing connections.

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

### _context

    protected I2PAppContext _context

### l

    protected Logging l

### DEFAULT_CONNECT_TIMEOUT

    static final long DEFAULT_CONNECT_TIMEOUT

See Also:
  Constant Field Values

### _clientId

    protected long _clientId

### dest

    protected Destination dest

Constructor Detail

### I2PTunnelUDPClientBase

    public I2PTunnelUDPClientBase(String destination,
                                  Logging l,
                                  EventDispatcher notifyThis,
                                  I2PTunnel tunnel)
                           throws IllegalArgumentException

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

Method Detail

### startRunning

    public void startRunning()

  Actually start working on outgoing connections. 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.

### 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` - - ignored if configured for a single destination (we use the dest specified in the constructor)