package org.torproject.jtor;
import org.torproject.jtor.circuits.CircuitManager;
import org.torproject.jtor.circuits.impl.CircuitManagerImpl;
import org.torproject.jtor.circuits.impl.ConnectionManagerImpl;
import org.torproject.jtor.config.impl.TorConfigImpl;
import org.torproject.jtor.directory.Directory;
import org.torproject.jtor.directory.impl.DirectoryImpl;
import org.torproject.jtor.directory.impl.NetworkStatusManager;
import org.torproject.jtor.logging.LogManager;
import org.torproject.jtor.logging.impl.LogManagerImpl;
import org.torproject.jtor.socks.SocksPortListener;
import org.torproject.jtor.socks.impl.SocksPortListenerImpl;
/**
* The <code>Tor</code> class is a collection of static methods for instantiating
* various subsystem modules.
*/
public class Tor {
private final static String version = "JTor 0.0.0";
/**
* Return a string describing the version of this software.
*
* @return A string representation of the software version.
*/
public static String getVersion() {
return version;
}
/**
* Create and return a new <code>LogManager</code> instance.
*
* @return A new <code>LogManager</code>
* @see LogManager
*/
static public LogManager createLogManager() {
return new LogManagerImpl();
}
/**
* Create and return a new <code>TorConfig</code> instance.
*
* @param logManager This is a required dependency. You must create a <code>LogManager</code>
* before calling this method to create a <code>TorConfig</code>
* @return A new <code>TorConfig</code> instance.
* @see TorConfig
*/
static public TorConfig createConfig(LogManager logManager) {
return new TorConfigImpl(logManager);
}
/**
* Create and return a new <code>Directory</code> instance.
*
* @param logManager This is a required dependency. You must create a <code>LogManager</code>
* before creating a <code>Directory</code>.
* @param config This is a required dependency. You must create a <code>TorConfig</code> before
* calling this method to create a <code>Directory</code>
* @return A new <code>Directory</code> instance.
* @see Directory
*/
static public Directory createDirectory(LogManager logManager, TorConfig config) {
return new DirectoryImpl(logManager, config);
}
/**
* Create and return a new <code>CircuitManager</code> instance.
*
* @param directory This is a required dependency. You must create a <code>Directory</code>
* before calling this method to create a <code>CircuitManager</code>.
* @param logManager This is a required dependency. You must create a <code>LogManager</code>
* before calling this method to create a <code>CircuitManager</code>.
* @return A new <code>CircuitManager</code> instance.
* @see CircuitManager
*/
static public CircuitManager createCircuitManager(Directory directory, LogManager logManager) {
final ConnectionManagerImpl connectionManager = new ConnectionManagerImpl(logManager);
return new CircuitManagerImpl(directory, connectionManager, logManager);
}
/**
* Create and return a new <code>SocksPortListener</code> instance.
*
* @param logManager This is a required dependency. You must create a <code>LogManager</code>
* before calling this method to create a <code>SocksPortListener</code>.
* @param circuitManager This is a required dependency. You must create a <code>CircuitManager</code>
* before calling this method to create a <code>SocksPortListener</code>.
* @return A new <code>SocksPortListener</code> instance.
* @see SocksPortListener
*/
static public SocksPortListener createSocksPortListener(LogManager logManager, CircuitManager circuitManager) {
return new SocksPortListenerImpl(logManager, circuitManager);
}
/**
* Create and return a new <code>NetworkStatusManager</code> instance.
*
* @param directory This is a required dependency. You must create a <code>Directory</code>
* before calling this method to create a <code>NetworkStatusManager</code>
* @param logManager This is a required dependency. You must create a <code>LogManager</code>
* before calling this method to create a <code>NetworkStatusManager</code>.
* @return A new <code>NetworkStatusManager</code> instance.
* @see NetworkStatusManager
*/
static public NetworkStatusManager createNetworkStatusManager(Directory directory, LogManager logManager) {
return new NetworkStatusManager(directory, logManager);
}
}