Class TunnelController

java.lang.Object
net.i2p.i2ptunnel.TunnelController
All Implemented Interfaces:
Logging

public class TunnelController extends Object implements Logging
Coordinate the runtime operation and configuration of a single I2PTunnel. An I2PTunnel tracks one or more I2PTunnelTasks and one or more I2PSessions. Usually one of each. These objects are bundled together under a TunnelControllerGroup where the entire group is stored / loaded from a single config file. This is the class used by several plugins to create tunnels, so take care to maintain the public methods as a stable API.
  • Field Details

  • Constructor Details

    • TunnelController

      public TunnelController(Properties config, String prefix)
      Create a new controller for a tunnel out of the specific config options. The config may contain a large number of options - only ones that begin in the prefix should be used (and, in turn, that prefix should be stripped off before being interpreted by this controller) If config contains the "configFile" property, it will be set as the config path and may be retrieved with getConfigFile(). Defaults in config properties are not recommended, they may or may not be honored.
      Parameters:
      config - original key=value mapping non-null
      prefix - beginning of key values that are relevant to this tunnel
    • TunnelController

      public TunnelController(Properties config, String prefix, boolean createKey)
      Create a new controller for a tunnel out of the specific config options. The config may contain a large number of options - only ones that begin in the prefix should be used (and, in turn, that prefix should be stripped off before being interpreted by this controller) If config contains the "configFile" property, it will be set as the config path and may be retrieved with getConfigFile(). Defaults in config properties are not recommended, they may or may not be honored.
      Parameters:
      config - original key=value mapping non-null
      prefix - beginning of key values that are relevant to this tunnel
      createKey - for servers, whether we want to create a brand new destination with private keys at the location specified or not (does not overwrite existing ones)
  • Method Details

    • getTunnel

      public I2PTunnel getTunnel()
      The I2PTunnel
      Since:
      0.9.53 for advanced plugin usage
    • startTunnelBackground

      public void startTunnelBackground()
    • startTunnel

      public void startTunnel()
      Start up the tunnel (if it isn't already running)
    • getClientOptionProps

      public Properties getClientOptionProps()
      These are the ones stored with a prefix of "option." Defaults in config properties are not honored.
      Returns:
      keys with the "option." prefix stripped, non-null
      Since:
      0.9.1 Much better than getClientOptions()
    • stopTunnel

      public void stopTunnel()
      May be restarted with restartTunnel() or startTunnel() later. This may not release all resources. In particular, the I2PSocketManager remains and it may have timer threads that continue running.
    • destroyTunnel

      public void destroyTunnel()
      May NOT be restarted with restartTunnel() or startTunnel() later. This should release all resources.
      Since:
      0.9.17
    • restartTunnel

      public void restartTunnel()
    • setConfig

      public void setConfig(Properties config, String prefix)
      As of 0.9.1, updates the options on an existing session
    • getConfig

      public Properties getConfig(String prefix)
      Returns:
      a copy
    • getConfigFile

      public File getConfigFile()
      Returns:
      the config file as passed into constructor via "configFile" property, or as set later, or null
      Since:
      0.9.42
    • setConfigFile

      public void setConfigFile(File file)
      Set the config file. Only do this if previously null.
      Since:
      0.9.42
    • getType

      public String getType()
    • getName

      public String getName()
    • getDescription

      public String getDescription()
    • getI2CPHost

      public String getI2CPHost()
    • getI2CPPort

      public String getI2CPPort()
    • getFilter

      public String getFilter()
      Absolute path to filter definition file
      Since:
      0.9.40
    • isClient

      public boolean isClient()
      Is it a client or server in the UI and I2P side? Note that a streamr client is a UI and I2P client but a server on the localhost side. Note that a streamr server is a UI and I2P server but a client on the localhost side.
      Since:
      0.9.17
    • isClient

      public static boolean isClient(String type)
      Is it a client or server in the UI and I2P side? Note that a streamr client is a UI and I2P client but a server on the localhost side. Note that a streamr server is a UI and I2P server but a client on the localhost side.
      Returns:
      false if type == null
      Since:
      0.9.17 moved from IndexBean
    • getClientOptions

      @Deprecated public String getClientOptions()
      Deprecated.
      why would you want this? Use getClientOptionProps() instead
      These are the ones with a prefix of "option."
      Returns:
      one big string of "key=val key=val ..."
    • getListenOnInterface

      public String getListenOnInterface()
    • getTargetHost

      public String getTargetHost()
    • getTargetPort

      public String getTargetPort()
    • getSpoofedHost

      public String getSpoofedHost()
    • getPrivKeyFile

      public String getPrivKeyFile()
      Probably not absolute. May be null. getPrivateKeyFile() recommended.
    • getListenPort

      public String getListenPort()
    • getTargetDestination

      public String getTargetDestination()
    • getProxyList

      public String getProxyList()
    • getSharedClient

      public String getSharedClient()
      default true for clients, always false for servers
    • getStartOnLoad

      public boolean getStartOnLoad()
      default true
    • getPersistentClientKey

      public boolean getPersistentClientKey()
    • getPrivateKeyFile

      public File getPrivateKeyFile()
      Does not necessarily exist.
      Returns:
      absolute path or null if unset
      Since:
      0.9.17
    • getAlternatePrivateKeyFile

      public File getAlternatePrivateKeyFile()
      Does not necessarily exist.
      Returns:
      absolute path or null if unset
      Since:
      0.9.30
    • filenameToFile

      static File filenameToFile(String f)
      Does not necessarily exist.
      Parameters:
      f - relative or absolute path, may be null
      Returns:
      absolute path or null
      Since:
      0.9.30
    • getMyDestination

      public String getMyDestination()
      Returns null if not running.
      Returns:
      Base64 or null
    • getMyDestHashBase32

      public String getMyDestHashBase32()
      Returns null if not running.
      Returns:
      "{52 chars}.b32.i2p" or null
    • getDestination

      public Destination getDestination()
      Returns null if not running.
      Returns:
      Destination or null
      Since:
      0.9.17
    • getIsOfflineKeys

      public boolean getIsOfflineKeys()
      Returns false if not running.
      Returns:
      true if the primary session has offline keys
      Since:
      0.9.40
    • getIsRunning

      public boolean getIsRunning()
    • getIsStarting

      public boolean getIsStarting()
    • getIsStandby

      public boolean getIsStandby()
      if running but no open sessions, we are in standby
    • getSummary

      @Deprecated public void getSummary(StringBuilder buf)
      Deprecated.
      unused
      A text description of the tunnel.
    • log

      public void log(String s)
      Specified by:
      log in interface Logging
    • clearMessages

      public List<String> clearMessages()
      Pull off any messages that the I2PTunnel has produced
      Returns:
      list of messages pulled off (each is a String, earliest first)
    • toString

      public String toString()
      Overrides:
      toString in class Object
      Since:
      0.9.15