Class 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.
    • Constructor Detail

      • 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 Detail

      • 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
      • 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.
      • 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)