package com.subgraph.orchid.directory.downloader;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.subgraph.orchid.RouterMicrodescriptor;
import com.subgraph.orchid.data.HexDigest;
import com.subgraph.orchid.directory.parsing.DocumentParser;
public class MicrodescriptorFetcher extends DocumentFetcher<RouterMicrodescriptor>{
private final List<HexDigest> fingerprints;
public MicrodescriptorFetcher(Collection<HexDigest> fingerprints) {
this.fingerprints = new ArrayList<HexDigest>(fingerprints);
}
@Override
String getRequestPath() {
return "/tor/micro/d/"+ fingerprintsToRequestString();
}
private String fingerprintsToRequestString() {
final StringBuilder sb = new StringBuilder();
for(HexDigest fp: fingerprints) {
appendFingerprint(sb, fp);
}
return sb.toString();
}
private void appendFingerprint(StringBuilder sb, HexDigest fp) {
if(sb.length() > 0) {
sb.append("-");
}
sb.append(fp.toBase64(true));
}
@Override
DocumentParser<RouterMicrodescriptor> createParser(ByteBuffer response) {
return PARSER_FACTORY.createRouterMicrodescriptorParser(response);
}
}