net.i2p.i2ptunnel.irc

## Class I2PTunnelDCCServer

- java.lang.Object
- - net.i2p.util.EventDispatcherImpl
  - - net.i2p.i2ptunnel.I2PTunnelTask
    - - net.i2p.i2ptunnel.I2PTunnelServer
      - - net.i2p.i2ptunnel.irc.I2PTunnelDCCServer

- All Implemented Interfaces:
    Runnable, EventDispatcher

      public class I2PTunnelDCCServer
      extends I2PTunnelServer

  A standard server that only answers for registered ports, and each port can only be used once.

                                                  direct conn
                      <---> I2PTunnelDCCServer <--------------->I2PTunnelDCCClient <---->
         originating                                                                     responding
         chat client                                                                     chat client
              CHAT    ---> I2PTunnelIRCClient --> IRC server --> I2TunnelIRCClient ----->
              SEND    ---> I2PTunnelIRCClient --> IRC server --> I2TunnelIRCClient ----->
              RESUME  <--- I2PTunnelIRCClient <-- IRC server <-- I2TunnelIRCClient <-----
              ACCEPT  ---> I2PTunnelIRCClient --> IRC server --> I2TunnelIRCClient ----->

- - ### Field Summary

    - ### Fields inherited from class net.i2p.i2ptunnel.I2PTunnelServer

      `__serverId, _clientExecutor, _log, bidir, i2pss, l, localPort, PROP_ALT_PKF, PROP_UNIQUE_LOCAL, PROP_USE_SSL, readTimeout, remoteHost, remotePort, slock, sockMgr, sslLock, task`

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

      `open, tunnel`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `I2PTunnelDCCServer(I2PSocketManager sktMgr, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` There's no support for unsolicited incoming I2P connections, so there's no server host or port parameters.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `acceptOutgoing(int port)` An outgoing ACCEPT response
    `protected void` | `blockingHandle(I2PSocket socket)` An incoming DCC connection, only accept for a known port.
    `boolean` | `close(boolean forced)` Closes all connections and clears all pending/outgoing/active maps.
    `int` | `newOutgoing(byte[] ip, int port, String type)` An outgoing DCC request
    `int` | `resumeIncoming(int port)` An incoming RESUME request

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

      `destroy, getReadTimeout, getSocket, getSocket, getSocketString, optionsUpdated, run, setReadTimeout, startRunning`

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

      `connected, disconnected, errorOccurred, getBooleanOption, 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`

- - ### Constructor Detail

    - #### I2PTunnelDCCServer

          public I2PTunnelDCCServer(I2PSocketManager sktMgr,
                                    Logging l,
                                    EventDispatcher notifyThis,
                                    I2PTunnel tunnel)

      There's no support for unsolicited incoming I2P connections, so there's no server host or port parameters.
      Parameters:
        `sktMgr` - an existing socket manager
      Throws:
        `IllegalArgumentException` - if the I2PTunnel does not contain valid config to contact the router

  - ### Method Detail

    - #### acceptOutgoing

          public int acceptOutgoing(int port)

      An outgoing ACCEPT response
      Parameters:
        `port` - local irc client DCC port
      Returns:
        local DCC server i2p port or -1 on error

    - #### blockingHandle

          protected void blockingHandle(I2PSocket socket)

      An incoming DCC connection, only accept for a known port. Passed through without filtering.
      Overrides:
        `blockingHandle` in class `I2PTunnelServer`
      Parameters:
        `socket` - the incoming I2P socket connection
      See Also:
        `I2PTunnelServer.getSocket(Hash, int)`, `I2PTunnelRunner`

    - #### close

          public boolean close(boolean forced)

      Closes all connections and clears all pending/outgoing/active maps.
      Overrides:
        `close` in class `I2PTunnelServer`
      Parameters:
        `forced` - unused, for interface compatibility
      Returns:
        true if closed successfully

    - #### newOutgoing

          public int newOutgoing(byte[] ip,
                                 int port,
                                 String type)

      An outgoing DCC request
      Parameters:
        `ip` - local irc client IP
        `port` - local irc client port
        `type` - ignored
      Returns:
        i2p port or -1 on error

    - #### resumeIncoming

          public int resumeIncoming(int port)

      An incoming RESUME request
      Parameters:
        `port` - local dcc server I2P port
      Returns:
        local IRC client DCC port or -1 on error