mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-15 11:45:51 +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();
|
PeerAddress peerAddress = getAddress();
|
||||||
long peerTime = vPeerVersionMessage.time * 1000;
|
long peerTime = vPeerVersionMessage.time * 1000;
|
||||||
log.info("Connected to {}: version={}, subVer='{}', services=0x{}, time={}, blocks={}",
|
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,
|
peerVersion,
|
||||||
vPeerVersionMessage.subVer,
|
vPeerVersionMessage.subVer,
|
||||||
vPeerVersionMessage.localServices,
|
vPeerVersionMessage.localServices,
|
||||||
|
@ -40,6 +40,7 @@ public class PeerAddress extends ChildMessage {
|
|||||||
static final int MESSAGE_SIZE = 30;
|
static final int MESSAGE_SIZE = 30;
|
||||||
|
|
||||||
private InetAddress addr;
|
private InetAddress addr;
|
||||||
|
private String hostname; // Used for .onion addresses
|
||||||
private int port;
|
private int port;
|
||||||
private BigInteger services;
|
private BigInteger services;
|
||||||
private long time;
|
private long time;
|
||||||
@ -97,8 +98,20 @@ public class PeerAddress extends ChildMessage {
|
|||||||
this(addr, MainNetParams.get().getPort());
|
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) {
|
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) {
|
public static PeerAddress localhost(NetworkParameters params) {
|
||||||
@ -163,6 +176,11 @@ public class PeerAddress extends ChildMessage {
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getHostname() {
|
||||||
|
maybeParse();
|
||||||
|
return hostname;
|
||||||
|
}
|
||||||
|
|
||||||
public InetAddress getAddr() {
|
public InetAddress getAddr() {
|
||||||
maybeParse();
|
maybeParse();
|
||||||
return addr;
|
return addr;
|
||||||
@ -216,6 +234,9 @@ public class PeerAddress extends ChildMessage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
if (hostname != null) {
|
||||||
|
return "[" + hostname + "]:" + port;
|
||||||
|
}
|
||||||
return "[" + addr.getHostAddress() + "]:" + port;
|
return "[" + addr.getHostAddress() + "]:" + port;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,6 +255,11 @@ public class PeerAddress extends ChildMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public InetSocketAddress toSocketAddress() {
|
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