3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-13 10:45:51 +00:00

Add MultiplexingDiscovery.forServices() that builds a suitable set of peer discoveries for

(optional) a set of desired services.
This commit is contained in:
Andreas Schildbach 2015-08-24 13:53:40 +02:00
parent 1be65483b4
commit 72763f2711

View File

@ -18,7 +18,12 @@
package org.bitcoinj.net.discovery;
import com.google.common.collect.Lists;
import com.squareup.okhttp.OkHttpClient;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.VersionMessage;
import org.bitcoinj.net.discovery.HttpDiscovery;
import org.bitcoinj.net.discovery.DnsDiscovery.DnsSeedDiscovery;
import org.bitcoinj.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -43,6 +48,30 @@ public class MultiplexingDiscovery implements PeerDiscovery {
protected final NetworkParameters netParams;
private volatile ExecutorService vThreadPool;
/**
* Builds a suitable set of peer discoveries. Will query them in parallel before producing a merged response.
* If specific services are required, DNS is not used as the protocol can't handle it.
* @param params Network to use.
* @param services Required services as a bitmask, e.g. {@link VersionMessage#NODE_NETWORK}.
*/
public static MultiplexingDiscovery forServices(NetworkParameters params, long services) {
List<PeerDiscovery> discoveries = Lists.newArrayList();
HttpDiscovery.Details[] httpSeeds = params.getHttpSeeds();
if (httpSeeds != null) {
OkHttpClient httpClient = new OkHttpClient();
for (HttpDiscovery.Details httpSeed : httpSeeds)
discoveries.add(new HttpDiscovery(params, httpSeed, httpClient));
}
// Also use DNS seeds if there is no specific service requirement
if (services == 0) {
String[] dnsSeeds = params.getDnsSeeds();
if (dnsSeeds != null)
for (String dnsSeed : dnsSeeds)
discoveries.add(new DnsSeedDiscovery(params, dnsSeed));
}
return new MultiplexingDiscovery(params, discoveries);
}
/**
* Will query the given seeds in parallel before producing a merged response.
*/