Skip to content

Commit

Permalink
Refactor of DirectoryDownloader
Browse files Browse the repository at this point in the history
  • Loading branch information
brl committed Nov 17, 2013
1 parent 778b092 commit 67de52d
Show file tree
Hide file tree
Showing 21 changed files with 581 additions and 520 deletions.
22 changes: 21 additions & 1 deletion src/com/subgraph/orchid/DirectoryDownloader.java
@@ -1,6 +1,26 @@
package com.subgraph.orchid;

import java.util.List;
import java.util.Set;

import com.subgraph.orchid.ConsensusDocument.RequiredCertificate;
import com.subgraph.orchid.data.HexDigest;
import com.subgraph.orchid.directory.downloader.DirectoryRequestFailedException;

public interface DirectoryDownloader {
void start(Directory directory);
RouterDescriptor downloadBridgeDescriptor(Router bridge);

RouterDescriptor downloadBridgeDescriptor(Router bridge) throws DirectoryRequestFailedException;

ConsensusDocument downloadCurrentConsensus(boolean useMicrodescriptors) throws DirectoryRequestFailedException;
ConsensusDocument downloadCurrentConsensus(boolean useMicrodescriptors, DirectoryCircuit circuit) throws DirectoryRequestFailedException;

List<KeyCertificate> downloadKeyCertificates(Set<RequiredCertificate> required) throws DirectoryRequestFailedException;
List<KeyCertificate> downloadKeyCertificates(Set<RequiredCertificate> required, DirectoryCircuit circuit) throws DirectoryRequestFailedException;

List<RouterDescriptor> downloadRouterDescriptors(Set<HexDigest> fingerprints) throws DirectoryRequestFailedException;
List<RouterDescriptor> downloadRouterDescriptors(Set<HexDigest> fingerprints, DirectoryCircuit circuit) throws DirectoryRequestFailedException;

List<RouterMicrodescriptor> downloadRouterMicrodescriptors(Set<HexDigest> fingerprints) throws DirectoryRequestFailedException;
List<RouterMicrodescriptor> downloadRouterMicrodescriptors(Set<HexDigest> fingerprints, DirectoryCircuit circuit) throws DirectoryRequestFailedException;
}
4 changes: 2 additions & 2 deletions src/com/subgraph/orchid/Tor.java
Expand Up @@ -161,7 +161,7 @@ static public SocksPortListener createSocksPortListener(TorConfig config, Circui
* @return A new <code>DirectoryDownloader</code> instance.
* @see DirectoryDownloaderImpl
*/
static public DirectoryDownloaderImpl createDirectoryDownloader(TorConfig config) {
return new DirectoryDownloaderImpl(config);
static public DirectoryDownloaderImpl createDirectoryDownloader(TorConfig config, TorInitializationTracker initializationTracker) {
return new DirectoryDownloaderImpl(config, initializationTracker);
}
}
2 changes: 1 addition & 1 deletion src/com/subgraph/orchid/TorClient.java
Expand Up @@ -43,7 +43,7 @@ public TorClient() {
initializationTracker = Tor.createInitalizationTracker();
initializationTracker.addListener(createReadyFlagInitializationListener());
connectionCache = Tor.createConnectionCache(config, initializationTracker);
directoryDownloader = Tor.createDirectoryDownloader(config);
directoryDownloader = Tor.createDirectoryDownloader(config, initializationTracker);
circuitManager = Tor.createCircuitManager(config, directoryDownloader, directory, connectionCache, initializationTracker);
socksListener = Tor.createSocksPortListener(config, circuitManager);
readyLatch = new CountDownLatch(1);
Expand Down
19 changes: 12 additions & 7 deletions src/com/subgraph/orchid/circuits/guards/Bridges.java
Expand Up @@ -15,6 +15,7 @@
import com.subgraph.orchid.TorConfig;
import com.subgraph.orchid.config.TorConfigBridgeLine;
import com.subgraph.orchid.crypto.TorRandom;
import com.subgraph.orchid.directory.downloader.DirectoryRequestFailedException;

public class Bridges {
private static final Logger logger = Logger.getLogger(Bridges.class.getName());
Expand All @@ -37,14 +38,18 @@ public void run() {

private void downloadDescriptor() {
logger.fine("Downloading descriptor for bridge: "+ target);
final RouterDescriptor descriptor = directoryDownloader.downloadBridgeDescriptor(target);
if(descriptor != null) {
logger.fine("Descriptor received for bridge "+ target +". Adding to list of usable bridges");
target.setDescriptor(descriptor);
synchronized(lock) {
bridgeRouters.add(target);
lock.notifyAll();
try {
final RouterDescriptor descriptor = directoryDownloader.downloadBridgeDescriptor(target);
if(descriptor != null) {
logger.fine("Descriptor received for bridge "+ target +". Adding to list of usable bridges");
target.setDescriptor(descriptor);
synchronized(lock) {
bridgeRouters.add(target);
lock.notifyAll();
}
}
} catch (DirectoryRequestFailedException e) {
logger.warning("Failed to download descriptor for bridge: "+ e.getMessage());
}
}

Expand Down
Expand Up @@ -15,6 +15,7 @@
import com.subgraph.orchid.TorException;
import com.subgraph.orchid.circuits.CircuitManagerImpl;
import com.subgraph.orchid.directory.DocumentFieldParserImpl;
import com.subgraph.orchid.directory.downloader.DirectoryRequestFailedException;
import com.subgraph.orchid.directory.downloader.HttpConnection;
import com.subgraph.orchid.directory.parsing.DocumentParsingResultHandler;

Expand Down Expand Up @@ -48,7 +49,6 @@ private HSDescriptor downloadDescriptorFrom(HSDescriptorDirectory dd) {

Stream stream = null;
try {
//stream = circuitManager.openDirectoryStreamTo(dd.getDirectory());
stream = openHSDirectoryStream(dd.getDirectory());
HttpConnection http = new HttpConnection(stream);
http.sendGetRequest("/tor/rendezvous2/"+ dd.getDescriptorId().toBase32());
Expand All @@ -71,6 +71,9 @@ private HSDescriptor downloadDescriptorFrom(HSDescriptorDirectory dd) {
} catch (OpenFailedException e) {
logger.info("Failed to open stream to HS directory "+ dd.getDirectory() +" : "+ e.getMessage());
return null;
} catch (DirectoryRequestFailedException e) {
logger.info("Directory request to HS directory "+ dd.getDirectory() + " failed "+ e.getMessage());
return null;
} finally {
if(stream != null) {
stream.close();
Expand All @@ -88,7 +91,7 @@ private Stream openHSDirectoryStream(Router directory) throws TimeoutException,

try {
final DirectoryCircuit dc = circuit.cannibalizeToDirectory(directory);
return dc.openDirectoryStream(10000);
return dc.openDirectoryStream(10000, true);
} catch (StreamConnectFailedException e) {
circuit.markForClose();
throw new OpenFailedException("Failed to open directory stream");
Expand Down

This file was deleted.

This file was deleted.

@@ -0,0 +1,19 @@
package com.subgraph.orchid.directory.downloader;

import java.nio.ByteBuffer;

import com.subgraph.orchid.RouterDescriptor;
import com.subgraph.orchid.directory.parsing.DocumentParser;

public class BridgeDescriptorFetcher extends DocumentFetcher<RouterDescriptor>{

@Override
String getRequestPath() {
return "/tor/server/authority";
}

@Override
DocumentParser<RouterDescriptor> createParser(ByteBuffer response) {
return PARSER_FACTORY.createRouterDescriptorParser(response, true);
}
}

This file was deleted.

0 comments on commit 67de52d

Please sign in to comment.