package org.torproject.jtor.config.impl; import java.io.File; import java.net.InetAddress; import org.torproject.jtor.TorConfig; import org.torproject.jtor.events.EventHandler; import org.torproject.jtor.events.EventManager; import org.torproject.jtor.logging.LogManager; import org.torproject.jtor.logging.Logger; public class TorConfigImpl implements TorConfig { private EventManager configChangedManager = new EventManager(); private boolean configChanged = false; private String configFile; private File dataDirectory; private long bandwidthRate; private long bandwidthBurst; private long maxAdvertisedBandwidth; private short controlPort; private String hashedControlPassword; private boolean cookieAuthentication; private long dirFetchPeriod; private String[] dirServer; private boolean tunnelDirConns; private boolean preferTunneledDirConns; private boolean disableAllSwap; private String group; private String httpProxy; private String httpProxyAuthenticator; private String httpsProxy; private String httpsProxyAuthenticator; private int keepalivePeriod; private String[] log; private int maxConn; private InetAddress outboundBindAddress; private String pidFile; private boolean runAsDaemon; private boolean safeLogging; private long statusFetchPeriod; private String user; private boolean hardwareAccel; private String allowUnverifiedNodes; private boolean clientOnly; private String[] entryNodes; private String[] exitNodes; private String[] excludeNodes; private boolean strictExitNodes; private boolean strictEntryNodes; private boolean fascistFirewall; private short[] firewallPorts; private String[] firewallIPs; private String reachableAddresses; private short[] longLivedPorts; private String[] mapAddress; private long newCircuitPeriod; private long maxCircuitDirtiness; private String[] nodeFamily; private String[] rendNodes; private String[] rendExcludeNodes; private short socksPort; private String socksBindAddress; private String socksPolicy; private String[] trackHostExits; private long trackHostExitsExpire; private boolean useHelperNodes; private int numHelperNodes; private String[] hiddenServiceDir; private String[] hiddenServicePort; private String[] hiddenServiceNodes; private String[] hiddenServiceExcludeNodes; private String hiddenServiceVersion; private long rendPostPeriod; // hidden (not saved) options private boolean __AllDirOptionsPrivate; private boolean __DisablePredictedCircuits; private boolean __LeaveStreamsUnattached; private String __HashedControlSessionPassword; private boolean __ReloadTorrcOnSIGHUP; protected Logger logger; public TorConfigImpl(LogManager logManager) { this.logger = logManager.getLogger("config"); new TorConfigEventThread(this); loadDefaults(); } /* (non-Javadoc) * @see org.torproject.jtor.config.impl.TorConfig#getDataDirectory() */ public String getDataDirectory() { createDataDirectory(); return dataDirectory.getAbsolutePath(); } private File createDataDirectory() { if(!dataDirectory.exists()) dataDirectory.mkdirs(); return dataDirectory; } /* (non-Javadoc) * @see org.torproject.jtor.config.impl.TorConfig#loadConf() */ public void loadConf() { boolean success = TorConfigParser.parseFile(this, logger, new File(dataDirectory, configFile)); if (!success) { System.err.println("Unable to parse config file - Quitting"); System.exit(1); } setConfigChanged(true); } /* (non-Javadoc) * @see org.torproject.jtor.config.impl.TorConfig#loadDefaults() */ public void loadDefaults() { TorConfigDefaults tcd = new TorConfigDefaults(); allowUnverifiedNodes = tcd.getAllowUnverifiedNodes(); bandwidthBurst = tcd.getBandwidthBurst(); bandwidthRate = tcd.getBandwidthRate(); clientOnly = tcd.isClientOnly(); configFile = tcd.getConfigFile(); controlPort = tcd.getControlPort(); cookieAuthentication = tcd.isCookieAuthentication(); dataDirectory = tcd.getDataDirectory(); dirFetchPeriod = tcd.getDirFetchPeriod(); dirServer = tcd.getDirServer(); disableAllSwap = tcd.isDisableAllSwap(); entryNodes = tcd.getEntryNodes(); excludeNodes = tcd.getExcludeNodes(); exitNodes = tcd.getExitNodes(); fascistFirewall = tcd.isFascistFirewall(); firewallIPs = tcd.getFirewallIPs(); firewallPorts = tcd.getFirewallPorts(); group = tcd.getGroup(); hardwareAccel = tcd.isHardwareAccel(); hashedControlPassword = tcd.getHashedControlPassword(); hiddenServiceDir = tcd.getHiddenServiceDir(); hiddenServiceExcludeNodes = tcd.getHiddenServiceExcludeNodes(); hiddenServiceNodes = tcd.getHiddenServiceNodes(); hiddenServicePort = tcd.getHiddenServicePort(); hiddenServiceVersion = tcd.getHiddenServiceVersion(); httpProxy = tcd.getHttpProxy(); httpProxyAuthenticator = tcd.getHttpProxyAuthenticator(); httpsProxy = tcd.getHttpsProxy(); httpsProxyAuthenticator = tcd.getHttpsProxyAuthenticator(); keepalivePeriod = tcd.getKeepalivePeriod(); log = tcd.getLog(); longLivedPorts = tcd.getLongLivedPorts(); mapAddress = tcd.getMapAddress(); maxAdvertisedBandwidth = tcd.getMaxAdvertisedBandwidth(); maxCircuitDirtiness = tcd.getMaxCircuitDirtiness(); maxConn = tcd.getMaxConn(); newCircuitPeriod = tcd.getNewCircuitPeriod(); nodeFamily = tcd.getNodeFamily(); numHelperNodes = tcd.getNumHelperNodes(); outboundBindAddress = tcd.getOutboundBindAddress(); pidFile = tcd.getPidFile(); preferTunneledDirConns = tcd.isPreferTunneledDirConns(); reachableAddresses = tcd.getReachableAddresses(); rendExcludeNodes = tcd.getRendExcludeNodes(); rendNodes = tcd.getRendNodes(); rendPostPeriod = tcd.getRendPostPeriod(); runAsDaemon = tcd.isRunAsDaemon(); safeLogging = tcd.isSafeLogging(); socksBindAddress = tcd.getSocksBindAddress(); socksPolicy = tcd.getSocksPolicy(); socksPort = tcd.getSocksPort(); statusFetchPeriod = tcd.getStatusFetchPeriod(); strictEntryNodes = tcd.isStrictEntryNodes(); strictExitNodes = tcd.isStrictExitNodes(); trackHostExits = tcd.getTrackHostExits(); trackHostExitsExpire = tcd.getTrackHostExitsExpire(); tunnelDirConns = tcd.isTunnelDirConns(); useHelperNodes = tcd.isUseHelperNodes(); user = tcd.getUser(); __AllDirOptionsPrivate = tcd.is__AllDirOptionsPrivate(); __DisablePredictedCircuits = tcd.is__DisablePredictedCircuits(); __HashedControlSessionPassword = tcd.get__HashedControlSessionPassword(); __LeaveStreamsUnattached = tcd.is__LeaveStreamsUnattached(); __ReloadTorrcOnSIGHUP = tcd.is__ReloadTorrcOnSIGHUP(); setConfigChanged(true); } public boolean saveConf() { createDataDirectory(); return TorConfigSaver.save(new File(dataDirectory, configFile), this); } public void resetConf() { loadDefaults(); loadConf(); } public boolean is__AllDirOptionsPrivate() { return __AllDirOptionsPrivate; } public void set__AllDirOptionsPrivate(boolean allDirOptionsPrivate) { __AllDirOptionsPrivate = allDirOptionsPrivate; setConfigChanged(true); } public void setDefault__AllDirOptionsPrivate() { __AllDirOptionsPrivate = new TorConfigDefaults().is__AllDirOptionsPrivate(); setConfigChanged(true); } public boolean is__DisablePredictedCircuits() { return __DisablePredictedCircuits; } public void set__DisablePredictedCircuits(boolean disablePredictedCircuits) { __DisablePredictedCircuits = disablePredictedCircuits; setConfigChanged(true); } public void setDefault__DisablePredictedCircuits() { __DisablePredictedCircuits = new TorConfigDefaults().is__DisablePredictedCircuits(); setConfigChanged(true); } public boolean is__LeaveStreamsUnattached() { return __LeaveStreamsUnattached; } public void set__LeaveStreamsUnattached(boolean leaveStreamsUnattached) { __LeaveStreamsUnattached = leaveStreamsUnattached; setConfigChanged(true); } public void setDefault__LeaveStreamsUnattached() { __LeaveStreamsUnattached = new TorConfigDefaults().is__LeaveStreamsUnattached(); setConfigChanged(true); } public String get__HashedControlSessionPassword() { return __HashedControlSessionPassword; } public void set__HashedControlSessionPassword( String hashedControlSessionPassword) { setConfigChanged(true); __HashedControlSessionPassword = hashedControlSessionPassword; } public void setDefault__HashedControlSessionPassword() { __HashedControlSessionPassword = new TorConfigDefaults().get__HashedControlSessionPassword(); setConfigChanged(true); } public boolean is__ReloadTorrcOnSIGHUP() { return __ReloadTorrcOnSIGHUP; } public void set__ReloadTorrcOnSIGHUP(boolean reloadTorrcOnSIGHUP) { __ReloadTorrcOnSIGHUP = reloadTorrcOnSIGHUP; setConfigChanged(true); } public void setDefault__ReloadTorrcOnSIGHUP() { __ReloadTorrcOnSIGHUP = new TorConfigDefaults().is__ReloadTorrcOnSIGHUP(); setConfigChanged(true); } public String getConfigFile() { return configFile; } public void setConfigFile(String configFile) { this.configFile = configFile; setConfigChanged(true); } public void setDefaultConfigFile() { this.configFile = new TorConfigDefaults().getConfigFile(); setConfigChanged(true); } public long getBandwidthRate() { return bandwidthRate; } public void setBandwidthRate(long bandwidthRate) { this.bandwidthRate = bandwidthRate; setConfigChanged(true); } public void setDefaultBandwidthRate() { this.bandwidthRate = new TorConfigDefaults().getBandwidthRate(); setConfigChanged(true); } public long getBandwidthBurst() { return bandwidthBurst; } public void setBandwidthBurst(long bandwidthBurst) { this.bandwidthBurst = bandwidthBurst; setConfigChanged(true); } public void setDefaultBandwidthBurst() { this.bandwidthBurst = new TorConfigDefaults().getBandwidthBurst(); setConfigChanged(true); } public long getMaxAdvertisedBandwidth() { return maxAdvertisedBandwidth; } public void setMaxAdvertisedBandwidth(long maxAdvertisedBandwidth) { this.maxAdvertisedBandwidth = maxAdvertisedBandwidth; setConfigChanged(true); } public void setDefaultMaxAdvertisedBandwidth() { this.maxAdvertisedBandwidth = new TorConfigDefaults().getMaxAdvertisedBandwidth(); setConfigChanged(true); } public short getControlPort() { return controlPort; } public void setControlPort(short controlPort) { this.controlPort = controlPort; setConfigChanged(true); } public void setDefaultControlPort() { this.controlPort = new TorConfigDefaults().getControlPort(); setConfigChanged(true); } public String getHashedControlPassword() { return hashedControlPassword; } public void setHashedControlPassword(String hashedControlPassword) { this.hashedControlPassword = hashedControlPassword; setConfigChanged(true); } public void setDefaultHashedControlPassword() { this.hashedControlPassword = new TorConfigDefaults().getHashedControlPassword(); setConfigChanged(true); } public boolean isCookieAuthentication() { return cookieAuthentication; } public void setCookieAuthentication(boolean cookieAuthentication) { this.cookieAuthentication = cookieAuthentication; setConfigChanged(true); } public void setDefaultCookieAuthentication() { this.cookieAuthentication = new TorConfigDefaults().isCookieAuthentication(); setConfigChanged(true); } public long getDirFetchPeriod() { return dirFetchPeriod; } public void setDirFetchPeriod(long dirFetchPeriod) { this.dirFetchPeriod = dirFetchPeriod; setConfigChanged(true); } public void setDefaultDirFetchPeriod() { this.dirFetchPeriod = new TorConfigDefaults().getDirFetchPeriod(); setConfigChanged(true); } public String[] getDirServer() { return dirServer; } public void setDirServer(String[] dirServer) { this.dirServer = dirServer; setConfigChanged(true); } public void setDefaultDirServer() { this.dirServer = new TorConfigDefaults().getDirServer(); setConfigChanged(true); } public boolean isTunnelDirConns() { return tunnelDirConns; } public void setTunnelDirConns(boolean tunnelDirConns) { this.tunnelDirConns = tunnelDirConns; setConfigChanged(true); } public void setDefaultTunnelDirConns() { this.tunnelDirConns = new TorConfigDefaults().isTunnelDirConns(); setConfigChanged(true); } public boolean isPreferTunneledDirConns() { return preferTunneledDirConns; } public void setPreferTunneledDirConns(boolean preferTunneledDirConns) { this.preferTunneledDirConns = preferTunneledDirConns; setConfigChanged(true); } public void setDefaultPreferTunneledDirConns() { this.preferTunneledDirConns = new TorConfigDefaults().isPreferTunneledDirConns(); setConfigChanged(true); } public boolean isDisableAllSwap() { return disableAllSwap; } public void setDisableAllSwap(boolean disableAllSwap) { this.disableAllSwap = disableAllSwap; setConfigChanged(true); } public void setDefaultDisableAllSwap() { this.disableAllSwap = new TorConfigDefaults().isDisableAllSwap(); setConfigChanged(true); } public String getGroup() { return group; } public void setGroup(String group) { this.group = group; setConfigChanged(true); } public void setDefaultGroup() { this.group = new TorConfigDefaults().getGroup(); setConfigChanged(true); } public String getHttpProxy() { return httpProxy; } public void setHttpProxy(String httpProxy) { this.httpProxy = httpProxy; setConfigChanged(true); } public void setDefaultHttpProxy() { this.httpProxy = new TorConfigDefaults().getHttpProxy(); setConfigChanged(true); } public String getHttpProxyAuthenticator() { return httpProxyAuthenticator; } public void setHttpProxyAuthenticator(String httpProxyAuthenticator) { this.httpProxyAuthenticator = httpProxyAuthenticator; setConfigChanged(true); } public void setDefaultHttpProxyAuthenticator() { this.httpProxyAuthenticator = new TorConfigDefaults().getHttpProxyAuthenticator(); setConfigChanged(true); } public String getHttpsProxy() { return httpsProxy; } public void setHttpsProxy(String httpsProxy) { this.httpsProxy = httpsProxy; setConfigChanged(true); } public void setDefaultHttpsProxy() { this.httpsProxy = new TorConfigDefaults().getHttpsProxy(); setConfigChanged(true); } public String getHttpsProxyAuthenticator() { return httpsProxyAuthenticator; } public void setHttpsProxyAuthenticator(String httpsProxyAuthenticator) { this.httpsProxyAuthenticator = httpsProxyAuthenticator; setConfigChanged(true); } public void setDefaultHttpsProxyAuthenticator() { this.httpsProxyAuthenticator = new TorConfigDefaults().getHttpsProxyAuthenticator(); setConfigChanged(true); } public int getKeepalivePeriod() { return keepalivePeriod; } public void setKeepalivePeriod(int keepalivePeriod) { this.keepalivePeriod = keepalivePeriod; setConfigChanged(true); } public void setDefaultKeepalivePeriod() { this.keepalivePeriod = new TorConfigDefaults().getKeepalivePeriod(); setConfigChanged(true); } public String[] getLog() { return log; } public void setLog(String[] log) { this.log = log; setConfigChanged(true); } public void setDefaultLog() { this.log = new TorConfigDefaults().getLog(); setConfigChanged(true); } public int getMaxConn() { return maxConn; } public void setMaxConn(int maxConn) { this.maxConn = maxConn; setConfigChanged(true); } public void setDefaultMaxConn() { this.maxConn = new TorConfigDefaults().getMaxConn(); setConfigChanged(true); } public InetAddress getOutboundBindAddress() { return outboundBindAddress; } public void setOutboundBindAddress(InetAddress outboundBindAddress) { this.outboundBindAddress = outboundBindAddress; setConfigChanged(true); } public void setDefaultOutboundBindAddress() { this.outboundBindAddress = new TorConfigDefaults().getOutboundBindAddress(); setConfigChanged(true); } public String getPidFile() { return pidFile; } public void setPidFile(String pidFile) { this.pidFile = pidFile; setConfigChanged(true); } public void setDefaultPidFile() { this.pidFile = new TorConfigDefaults().getPidFile(); setConfigChanged(true); } public boolean isRunAsDaemon() { return runAsDaemon; } public void setRunAsDaemon(boolean runAsDaemon) { this.runAsDaemon = runAsDaemon; setConfigChanged(true); } public void setDefaultRunAsDaemon() { this.runAsDaemon = new TorConfigDefaults().isRunAsDaemon(); setConfigChanged(true); } public boolean isSafeLogging() { return safeLogging; } public void setSafeLogging(boolean safeLogging) { this.safeLogging = safeLogging; setConfigChanged(true); } public void setDefaultSafeLogging() { this.safeLogging = new TorConfigDefaults().isSafeLogging(); setConfigChanged(true); } public long getStatusFetchPeriod() { return statusFetchPeriod; } public void setStatusFetchPeriod(long statusFetchPeriod) { this.statusFetchPeriod = statusFetchPeriod; setConfigChanged(true); } public void setDefaultStatusFetchPeriod() { this.statusFetchPeriod = new TorConfigDefaults().getStatusFetchPeriod(); setConfigChanged(true); } public String getUser() { return user; } public void setUser(String user) { this.user = user; setConfigChanged(true); } public void setDefaultUser() { this.user = new TorConfigDefaults().getUser(); setConfigChanged(true); } public boolean isHardwareAccel() { return hardwareAccel; } public void setHardwareAccel(boolean hardwareAccel) { this.hardwareAccel = hardwareAccel; setConfigChanged(true); } public void setDefaultHardwareAccel() { this.hardwareAccel = new TorConfigDefaults().isHardwareAccel(); setConfigChanged(true); } public String getAllowUnverifiedNodes() { return allowUnverifiedNodes; } public void setAllowUnverifiedNodes(String allowUnverifiedNodes) { this.allowUnverifiedNodes = allowUnverifiedNodes; setConfigChanged(true); } public void setDefaultAllowUnverifiedNodes() { this.allowUnverifiedNodes = new TorConfigDefaults().getAllowUnverifiedNodes(); setConfigChanged(true); } public boolean isClientOnly() { return clientOnly; } public void setClientOnly(boolean clientOnly) { this.clientOnly = clientOnly; setConfigChanged(true); } public void setDefaultClientOnly() { this.clientOnly = new TorConfigDefaults().isClientOnly(); setConfigChanged(true); } public String[] getEntryNodes() { return entryNodes; } public void setEntryNodes(String[] entryNodes) { this.entryNodes = entryNodes; setConfigChanged(true); } public void setDefaultEntryNodes() { this.entryNodes = new TorConfigDefaults().getEntryNodes(); setConfigChanged(true); } public String[] getExitNodes() { return exitNodes; } public void setExitNodes(String[] exitNodes) { this.exitNodes = exitNodes; setConfigChanged(true); } public void setDefaultExitNodes() { this.exitNodes = new TorConfigDefaults().getExitNodes(); setConfigChanged(true); } public String[] getExcludeNodes() { return excludeNodes; } public void setExcludeNodes(String[] excludeNodes) { this.excludeNodes = excludeNodes; setConfigChanged(true); } public void setDefaultExcludeNodes() { this.excludeNodes = new TorConfigDefaults().getExcludeNodes(); setConfigChanged(true); } public boolean isStrictExitNodes() { return strictExitNodes; } public void setStrictExitNodes(boolean strictExitNodes) { this.strictExitNodes = strictExitNodes; setConfigChanged(true); } public void setDefaultStrictExitNodes() { this.strictExitNodes = new TorConfigDefaults().isStrictExitNodes(); setConfigChanged(true); } public boolean isStrictEntryNodes() { return strictEntryNodes; } public void setStrictEntryNodes(boolean strictEntryNodes) { this.strictEntryNodes = strictEntryNodes; setConfigChanged(true); } public void setDefaultStrictEntryNodes() { this.strictEntryNodes = new TorConfigDefaults().isStrictEntryNodes(); setConfigChanged(true); } public boolean isFascistFirewall() { return fascistFirewall; } public void setFascistFirewall(boolean fascistFirewall) { this.fascistFirewall = fascistFirewall; setConfigChanged(true); } public void setDefaultFascistFirewall() { this.fascistFirewall = new TorConfigDefaults().isFascistFirewall(); setConfigChanged(true); } public short[] getFirewallPorts() { return firewallPorts; } public void setFirewallPorts(short[] firewallPorts) { this.firewallPorts = firewallPorts; setConfigChanged(true); } public void setDefaultFirewallPorts() { this.firewallPorts = new TorConfigDefaults().getFirewallPorts(); setConfigChanged(true); } public String[] getFirewallIPs() { return firewallIPs; } public void setFirewallIPs(String[] firewallIPs) { this.firewallIPs = firewallIPs; setConfigChanged(true); } public void setDefaultFirewallIPs() { this.firewallIPs = new TorConfigDefaults().getFirewallIPs(); setConfigChanged(true); } public String getReachableAddresses() { return reachableAddresses; } public void setReachableAddresses(String ReachableAddresses) { this.reachableAddresses = ReachableAddresses; setConfigChanged(true); } public void setDefaultReachableAddresses() { this.reachableAddresses = new TorConfigDefaults().getReachableAddresses(); setConfigChanged(true); } public short[] getLongLivedPorts() { return longLivedPorts; } public void setLongLivedPorts(short[] longLivedPorts) { this.longLivedPorts = longLivedPorts; setConfigChanged(true); } public void setDefaultLongLivedPorts() { this.longLivedPorts = new TorConfigDefaults().getLongLivedPorts(); setConfigChanged(true); } public String[] getMapAddress() { return mapAddress; } public void setMapAddress(String[] mapAddress) { this.mapAddress = mapAddress; setConfigChanged(true); } public void setDefaultMapAddress() { this.mapAddress = new TorConfigDefaults().getMapAddress(); setConfigChanged(true); } public long getNewCircuitPeriod() { return newCircuitPeriod; } public void setNewCircuitPeriod(long newCircuitPeriod) { this.newCircuitPeriod = newCircuitPeriod; setConfigChanged(true); } public void setDefaultNewCircuitPeriod() { this.newCircuitPeriod = new TorConfigDefaults().getNewCircuitPeriod(); setConfigChanged(true); } public long getMaxCircuitDirtiness() { return maxCircuitDirtiness; } public void setMaxCircuitDirtiness(long maxCircuitDirtiness) { this.maxCircuitDirtiness = maxCircuitDirtiness; setConfigChanged(true); } public void setDefaultMaxCircuitDirtiness() { this.maxCircuitDirtiness = new TorConfigDefaults().getMaxCircuitDirtiness(); setConfigChanged(true); } public String[] getNodeFamily() { return nodeFamily; } public void setNodeFamily(String[] nodeFamily) { this.nodeFamily = nodeFamily; setConfigChanged(true); } public void setDefaultNodeFamily() { this.nodeFamily = new TorConfigDefaults().getNodeFamily(); setConfigChanged(true); } public String[] getRendNodes() { return rendNodes; } public void setRendNodes(String[] rendNodes) { this.rendNodes = rendNodes; setConfigChanged(true); } public void setDefaultRendNodes() { this.rendNodes = new TorConfigDefaults().getRendNodes(); setConfigChanged(true); } public String[] getRendExcludeNodes() { return rendExcludeNodes; } public void setRendExcludeNodes(String[] rendExcludeNodes) { this.rendExcludeNodes = rendExcludeNodes; setConfigChanged(true); } public void setDefaultRendExcludeNodes() { this.rendExcludeNodes = new TorConfigDefaults().getRendExcludeNodes(); setConfigChanged(true); } public short getSocksPort() { return socksPort; } public void setSocksPort(short socksPort) { this.socksPort = socksPort; setConfigChanged(true); } public void setDefaultSocksPort() { this.socksPort = new TorConfigDefaults().getSocksPort(); setConfigChanged(true); } public String getSocksBindAddress() { return socksBindAddress; } public void setSocksBindAddress(String socksBindAddress) { this.socksBindAddress = socksBindAddress; setConfigChanged(true); } public void setDefaultSocksBindAddress() { this.socksBindAddress = new TorConfigDefaults().getSocksBindAddress(); setConfigChanged(true); } public String getSocksPolicy() { return socksPolicy; } public void setSocksPolicy(String socksPolicy) { this.socksPolicy = socksPolicy; setConfigChanged(true); } public void setDefaultSocksPolicy() { this.socksPolicy = new TorConfigDefaults().getSocksPolicy(); setConfigChanged(true); } public String[] getTrackHostExits() { return trackHostExits; } public void setTrackHostExits(String[] trackHostExits) { this.trackHostExits = trackHostExits; setConfigChanged(true); } public void setDefaultTrackHostExits() { this.trackHostExits = new TorConfigDefaults().getTrackHostExits(); setConfigChanged(true); } public long getTrackHostExitsExpire() { return trackHostExitsExpire; } public void setTrackHostExitsExpire(long trackHostExitsExpire) { this.trackHostExitsExpire = trackHostExitsExpire; setConfigChanged(true); } public void setDefaultTrackHostExitsExpire() { this.trackHostExitsExpire = new TorConfigDefaults().getTrackHostExitsExpire(); setConfigChanged(true); } public boolean isUseHelperNodes() { return useHelperNodes; } public void setUseHelperNodes(boolean useHelperNodes) { this.useHelperNodes = useHelperNodes; setConfigChanged(true); } public void setDefaultUseHelperNodes() { this.useHelperNodes = new TorConfigDefaults().isUseHelperNodes(); setConfigChanged(true); } public int getNumHelperNodes() { return numHelperNodes; } public void setNumHelperNodes(int numHelperNodes) { this.numHelperNodes = numHelperNodes; setConfigChanged(true); } public void setDefaultNumHelperNodes() { this.numHelperNodes = new TorConfigDefaults().getNumHelperNodes(); setConfigChanged(true); } public String[] getHiddenServiceDir() { return hiddenServiceDir; } public void setHiddenServiceDir(String[] hiddenServiceDir) { this.hiddenServiceDir = hiddenServiceDir; setConfigChanged(true); } public void setDefaultHiddenServiceDir() { this.hiddenServiceDir = new TorConfigDefaults().getHiddenServiceDir(); setConfigChanged(true); } public String[] getHiddenServicePort() { return hiddenServicePort; } public void setHiddenServicePort(String[] hiddenServicePort) { this.hiddenServicePort = hiddenServicePort; setConfigChanged(true); } public void setDefaultHiddenServicePort() { this.hiddenServicePort = new TorConfigDefaults().getHiddenServicePort(); setConfigChanged(true); } public String[] getHiddenServiceNodes() { return hiddenServiceNodes; } public void setHiddenServiceNodes(String[] hiddenServiceNodes) { this.hiddenServiceNodes = hiddenServiceNodes; setConfigChanged(true); } public void setDefaultHiddenServiceNodes() { this.hiddenServiceNodes = new TorConfigDefaults().getHiddenServiceNodes(); setConfigChanged(true); } public String[] getHiddenServiceExcludeNodes() { return hiddenServiceExcludeNodes; } public void setHiddenServiceExcludeNodes(String[] hiddenServiceExcludeNodes) { this.hiddenServiceExcludeNodes = hiddenServiceExcludeNodes; setConfigChanged(true); } public void setDefaultHiddenServiceExcludeNodes() { this.hiddenServiceExcludeNodes = new TorConfigDefaults().getHiddenServiceExcludeNodes(); setConfigChanged(true); } public String getHiddenServiceVersion() { return hiddenServiceVersion; } public void setHiddenServiceVersion(String hiddenServiceVersion) { this.hiddenServiceVersion = hiddenServiceVersion; setConfigChanged(true); } public void setDefaultHiddenServiceVersion() { this.hiddenServiceVersion = new TorConfigDefaults().getHiddenServiceVersion(); setConfigChanged(true); } public long getRendPostPeriod() { return rendPostPeriod; } public void setRendPostPeriod(long rendPostPeriod) { this.rendPostPeriod = rendPostPeriod; setConfigChanged(true); } public void setDefaultRendPostPeriod() { this.rendPostPeriod = new TorConfigDefaults().getRendPostPeriod(); setConfigChanged(true); } public void setDataDirectory(File dataDirectory) { this.dataDirectory = dataDirectory; setConfigChanged(true); } public void setDefaultDataDirectory() { this.dataDirectory = new TorConfigDefaults().getDataDirectory(); setConfigChanged(true); } public void registerConfigChangedHandler(EventHandler eh) { configChangedManager.addListener(eh); } public void unregisterConfigChangedHandler(EventHandler eh) { configChangedManager.removeListener(eh); } public boolean isConfigChanged() { synchronized (this) { return configChanged; } } public EventManager getConfigChangedManager() { return configChangedManager; } public void setConfigChanged(boolean configChanged) { synchronized (this) { this.configChanged = configChanged; } } }