Smack

org.jivesoftware.smackx.bytestreams.socks5
Class Socks5Proxy

java.lang.Object
  extended by org.jivesoftware.smackx.bytestreams.socks5.Socks5Proxy

public class Socks5Proxy
extends Object

The Socks5Proxy class represents a local SOCKS5 proxy server. It can be enabled/disabled by setting the localSocks5ProxyEnabled flag in the smack-config.xml or by invoking SmackConfiguration.setLocalSocks5ProxyEnabled(boolean). The proxy is enabled by default.

The port of the local SOCKS5 proxy can be configured by setting localSocks5ProxyPort in the smack-config.xml or by invoking SmackConfiguration.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(String) or replaceLocalAddresses(List) 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(String)).

This Implementation has the following limitations:

(see RFC 1928)

Author:
Henning Staib

Method Summary
 void addLocalAddress(String address)
          Adds the given address to the list of local network addresses.
protected  void addTransfer(String digest)
          Add the given digest to the list of allowed transfers.
 List<String> getLocalAddresses()
          Returns an unmodifiable list of the local network addresses that will be used for streamhost candidates of outgoing SOCKS5 Bytestream requests.
 int getPort()
          Returns the port of the local SOCKS5 proxy server.
protected  Socket getSocket(String digest)
          Returns the socket for the given digest.
static Socks5Proxy getSocks5Proxy()
          Returns the local SOCKS5 proxy server.
 boolean isRunning()
          Returns true if the local SOCKS5 proxy server is running, otherwise false.
 void removeLocalAddress(String address)
          Removes the given address from the list of local network addresses.
protected  void removeTransfer(String digest)
          Removes the given digest from the list of allowed transfers.
 void replaceLocalAddresses(List<String> addresses)
          Replaces the list of local network addresses.
 void 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
 

Method Detail

getSocks5Proxy

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

Returns:
the local SOCKS5 proxy server

start

public void start()
Starts the local SOCKS5 proxy server. If it is already running, this method does nothing.


stop

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


addLocalAddress

public void addLocalAddress(String 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(List).

Parameters:
address - the local network address to add

removeLocalAddress

public void removeLocalAddress(String 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

getLocalAddresses

public List<String> getLocalAddresses()
Returns an unmodifiable list of the local network addresses that will be used for streamhost candidates of outgoing SOCKS5 Bytestream requests.

Returns:
unmodifiable list of the local network addresses

replaceLocalAddresses

public void replaceLocalAddresses(List<String> 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 Socket getSocket(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

protected void addTransfer(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(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

Smack

Copyright © 2003-2007 Jive Software.