Class Socks5Proxy


  • public class Socks5Proxy
    extends java.lang.Object
    The Socks5Proxy class represents a local SOCKS5 proxy server. It can be enabled/disabled by invoking setLocalSocks5ProxyEnabled(boolean). The proxy is enabled by default.

    The port of the local SOCKS5 proxy can be configured by invoking setLocalSocks5ProxyPort(int). Default port is 7777. If you set the port to a negative value Smack tries to the absolute value and all following until it finds an open port.

    If your application is running on a machine with multiple network interfaces or if you want to provide your public address in case you are behind a NAT router, invoke addLocalAddress(InetAddress) or replaceLocalAddresses(Collection) to modify the list of local network addresses used for outgoing SOCKS5 Bytestream requests.

    The local SOCKS5 proxy server refuses all connections except the ones that are explicitly allowed in the process of establishing a SOCKS5 Bytestream ( Socks5BytestreamManager.establishSession(org.jxmpp.jid.Jid)).

    This Implementation has the following limitations:

    • only supports the no-authentication authentication method
    • only supports the connect command and will not answer correctly to other commands
    • only supports requests with the domain address type and will not correctly answer to requests with other address types
    (see RFC 1928)
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected Socks5Proxy​(java.net.ServerSocket serverSocket)
      Constructor a Socks5Proxy with the given socket.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addLocalAddress​(java.net.InetAddress address)
      Adds the given address to the list of local network addresses.
      void addTransfer​(java.lang.String digest)
      Add the given digest to the list of allowed transfers.
      static int getDefaultLocalSocks5ProxyPort()  
      java.util.List<java.net.InetAddress> getLocalAddresses()
      Returns an set of the local network addresses that will be used for streamhost candidates of outgoing SOCKS5 Bytestream requests.
      int getLocalSocks5ProxyPort()
      Return the port of the local Socks5 proxy.
      int getPort()
      Returns the port of the local SOCKS5 proxy server.
      protected java.net.Socket getSocket​(java.lang.String digest)
      Returns the socket for the given digest.
      static java.net.Socket getSocketForDigest​(java.lang.String digest)  
      static Socks5Proxy getSocks5Proxy()
      Returns the local SOCKS5 proxy server.
      static boolean isLocalSocks5ProxyEnabled()
      Returns true if the local Socks5 proxy should be started.
      boolean isRunning()
      Returns true if the local SOCKS5 proxy server is running, otherwise false.
      boolean removeLocalAddress​(java.net.InetAddress address)
      Removes the given address from the list of local network addresses.
      protected void removeTransfer​(java.lang.String digest)
      Removes the given digest from the list of allowed transfers.
      void replaceLocalAddresses​(java.util.Collection<? extends java.net.InetAddress> addresses)
      Replaces the list of local network addresses.
      static void setDefaultLocalSocsk5ProxyPort​(int defaultLocalSocks5ProxyPort)  
      static void setLocalSocks5ProxyEnabled​(boolean localSocks5ProxyEnabled)
      Sets if the local Socks5 proxy should be started.
      void setLocalSocks5ProxyPort​(int localSocks5ProxyPort)
      Sets the port of the local Socks5 proxy.
      java.net.ServerSocket start()
      Starts the local SOCKS5 proxy server.
      void stop()
      Stops the local SOCKS5 proxy server.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Socks5Proxy

        protected Socks5Proxy​(java.net.ServerSocket serverSocket)
        Constructor a Socks5Proxy with the given socket. Used for unit test purposes.
        Parameters:
        serverSocket - the server socket to use
    • Method Detail

      • isLocalSocks5ProxyEnabled

        public static boolean isLocalSocks5ProxyEnabled()
        Returns true if the local Socks5 proxy should be started. Default is true.
        Returns:
        if the local Socks5 proxy should be started
      • setLocalSocks5ProxyEnabled

        public static void setLocalSocks5ProxyEnabled​(boolean localSocks5ProxyEnabled)
        Sets if the local Socks5 proxy should be started. Default is true.
        Parameters:
        localSocks5ProxyEnabled - if the local Socks5 proxy should be started
      • getLocalSocks5ProxyPort

        public int getLocalSocks5ProxyPort()
        Return the port of the local Socks5 proxy. Default is 7777.
        Returns:
        the port of the local Socks5 proxy
      • setLocalSocks5ProxyPort

        public void setLocalSocks5ProxyPort​(int localSocks5ProxyPort)
        Sets the port of the local Socks5 proxy. Default is 7777. If you set the port to a negative value Smack tries the absolute value and all following until it finds an open port.
        Parameters:
        localSocks5ProxyPort - the port of the local Socks5 proxy to set
      • getSocks5Proxy

        public static Socks5Proxy getSocks5Proxy()
        Returns the local SOCKS5 proxy server.
        Returns:
        the local SOCKS5 proxy server
      • start

        public java.net.ServerSocket start()
        Starts the local SOCKS5 proxy server. If it is already running, this method does nothing.
        Returns:
        the server socket.
      • stop

        public void stop()
        Stops the local SOCKS5 proxy server. If it is not running this method does nothing.
      • addLocalAddress

        public void addLocalAddress​(java.net.InetAddress address)
        Adds the given address to the list of local network addresses.

        Use this method if you want to provide multiple addresses in a SOCKS5 Bytestream request. This may be necessary if your application is running on a machine with multiple network interfaces or if you want to provide your public address in case you are behind a NAT router.

        The order of the addresses used is determined by the order you add addresses.

        Note that the list of addresses initially contains the address returned by InetAddress.getLocalHost().getHostAddress(). You can replace the list of addresses by invoking replaceLocalAddresses(Collection).

        Parameters:
        address - the local network address to add
      • removeLocalAddress

        public boolean removeLocalAddress​(java.net.InetAddress address)
        Removes the given address from the list of local network addresses. This address will then no longer be used of outgoing SOCKS5 Bytestream requests.
        Parameters:
        address - the local network address to remove
        Returns:
        true if the address was removed.
      • getLocalAddresses

        public java.util.List<java.net.InetAddress> getLocalAddresses()
        Returns an set of the local network addresses that will be used for streamhost candidates of outgoing SOCKS5 Bytestream requests.
        Returns:
        set of the local network addresses
      • replaceLocalAddresses

        public void replaceLocalAddresses​(java.util.Collection<? extends java.net.InetAddress> addresses)
        Replaces the list of local network addresses.

        Use this method if you want to provide multiple addresses in a SOCKS5 Bytestream request and want to define their order. This may be necessary if your application is running on a machine with multiple network interfaces or if you want to provide your public address in case you are behind a NAT router.

        Parameters:
        addresses - the new list of local network addresses
      • getPort

        public int getPort()
        Returns the port of the local SOCKS5 proxy server. If it is not running -1 will be returned.
        Returns:
        the port of the local SOCKS5 proxy server or -1 if proxy is not running
      • getSocket

        protected java.net.Socket getSocket​(java.lang.String digest)
        Returns the socket for the given digest. A socket will be returned if the given digest has been in the list of allowed transfers (see addTransfer(String)) while the peer connected to the SOCKS5 proxy.
        Parameters:
        digest - identifying the connection
        Returns:
        socket or null if there is no socket for the given digest
      • addTransfer

        public void addTransfer​(java.lang.String digest)
        Add the given digest to the list of allowed transfers. Only connections for allowed transfers are stored and can be retrieved by invoking getSocket(String). All connections to the local SOCKS5 proxy that don't contain an allowed digest are discarded.
        Parameters:
        digest - to be added to the list of allowed transfers
      • removeTransfer

        protected void removeTransfer​(java.lang.String digest)
        Removes the given digest from the list of allowed transfers. After invoking this method already stored connections with the given digest will be removed.

        The digest should be removed after establishing the SOCKS5 Bytestream is finished, an error occurred while establishing the connection or if the connection is not allowed anymore.

        Parameters:
        digest - to be removed from the list of allowed transfers
      • isRunning

        public boolean isRunning()
        Returns true if the local SOCKS5 proxy server is running, otherwise false.
        Returns:
        true if the local SOCKS5 proxy server is running, otherwise false
      • getSocketForDigest

        public static java.net.Socket getSocketForDigest​(java.lang.String digest)