mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-15 03:35:52 +00:00
Connect bitcoinj to hidden services
This commit adds a few small modifications to PeerAddress to make it easier for bitcoinj to connect to Tor hidden services when using the Orchid TorClient.
This commit is contained in:
parent
d0416b7f0f
commit
8a2e742598
@ -439,7 +439,7 @@ public class Peer extends PeerSocketHandler {
|
||||
PeerAddress peerAddress = getAddress();
|
||||
long peerTime = vPeerVersionMessage.time * 1000;
|
||||
log.info("Connected to {}: version={}, subVer='{}', services=0x{}, time={}, blocks={}",
|
||||
peerAddress == null ? "Peer" : peerAddress.getAddr().getHostAddress(),
|
||||
peerAddress == null ? "Peer" : (peerAddress.getAddr() == null ? peerAddress.getHostname() : peerAddress.getAddr().getHostAddress()),
|
||||
peerVersion,
|
||||
vPeerVersionMessage.subVer,
|
||||
vPeerVersionMessage.localServices,
|
||||
|
@ -40,6 +40,7 @@ public class PeerAddress extends ChildMessage {
|
||||
static final int MESSAGE_SIZE = 30;
|
||||
|
||||
private InetAddress addr;
|
||||
private String hostname; // Used for .onion addresses
|
||||
private int port;
|
||||
private BigInteger services;
|
||||
private long time;
|
||||
@ -97,8 +98,20 @@ public class PeerAddress extends ChildMessage {
|
||||
this(addr, MainNetParams.get().getPort());
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a peer address from an {@link InetSocketAddress}. An InetSocketAddress can take in as parameters an
|
||||
* InetAddress or a String hostname. If you want to connect to a .onion, set the hostname to the .onion address.
|
||||
*/
|
||||
public PeerAddress(InetSocketAddress addr) {
|
||||
this(addr.getAddress(), addr.getPort());
|
||||
if (addr.getHostName() == null || !addr.getHostName().toLowerCase().endsWith(".onion")) {
|
||||
this.addr = checkNotNull(addr.getAddress());
|
||||
} else {
|
||||
this.hostname = addr.getHostName();
|
||||
}
|
||||
this.port = addr.getPort();
|
||||
this.protocolVersion = NetworkParameters.PROTOCOL_VERSION;
|
||||
this.services = BigInteger.ZERO;
|
||||
length = protocolVersion > 31402 ? MESSAGE_SIZE : MESSAGE_SIZE - 4;
|
||||
}
|
||||
|
||||
public static PeerAddress localhost(NetworkParameters params) {
|
||||
@ -163,6 +176,11 @@ public class PeerAddress extends ChildMessage {
|
||||
return length;
|
||||
}
|
||||
|
||||
public String getHostname() {
|
||||
maybeParse();
|
||||
return hostname;
|
||||
}
|
||||
|
||||
public InetAddress getAddr() {
|
||||
maybeParse();
|
||||
return addr;
|
||||
@ -216,6 +234,9 @@ public class PeerAddress extends ChildMessage {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (hostname != null) {
|
||||
return "[" + hostname + "]:" + port;
|
||||
}
|
||||
return "[" + addr.getHostAddress() + "]:" + port;
|
||||
}
|
||||
|
||||
@ -234,6 +255,11 @@ public class PeerAddress extends ChildMessage {
|
||||
}
|
||||
|
||||
public InetSocketAddress toSocketAddress() {
|
||||
return new InetSocketAddress(addr, port);
|
||||
// Reconstruct the InetSocketAddress properly
|
||||
if (hostname != null) {
|
||||
return InetSocketAddress.createUnresolved(hostname, port);
|
||||
} else {
|
||||
return new InetSocketAddress(addr, port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user