Peer: Implement proper toString().

This commit is contained in:
Andreas Schildbach 2019-01-31 12:02:27 +01:00
parent 09832a65ee
commit 0c2a9e646c

View file

@ -405,9 +405,36 @@ public class Peer extends PeerSocketHandler {
@Override @Override
public String toString() { public String toString() {
PeerAddress addr = getAddress(); final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this).omitNullValues();
// if null, it's a user-provided NetworkConnection object helper.addValue(getAddress());
return addr == null ? "Peer()" : addr.toString(); helper.add("version", vPeerVersionMessage.clientVersion);
helper.add("subVer", vPeerVersionMessage.subVer);
String servicesStr = Strings.emptyToNull(toStringServices(vPeerVersionMessage.localServices));
helper.add("services",
vPeerVersionMessage.localServices + (servicesStr != null ? " (" + servicesStr + ")" : ""));
long peerTime = vPeerVersionMessage.time * 1000;
helper.add("time", String.format(Locale.US, "%tF %tT", peerTime, peerTime));
helper.add("height", vPeerVersionMessage.bestHeight);
return helper.toString();
}
public String toStringServices(long services) {
List<String> a = new LinkedList<String>();
if ((services & VersionMessage.NODE_NETWORK) == VersionMessage.NODE_NETWORK) {
a.add("NETWORK");
services &= ~VersionMessage.NODE_NETWORK;
}
if ((services & VersionMessage.NODE_GETUTXOS) == VersionMessage.NODE_GETUTXOS) {
a.add("GETUTXOS");
services &= ~VersionMessage.NODE_GETUTXOS;
}
if ((services & VersionMessage.NODE_WITNESS) == VersionMessage.NODE_WITNESS) {
a.add("WITNESS");
services &= ~VersionMessage.NODE_WITNESS;
}
if (services != 0)
a.add("remaining: " + Long.toBinaryString(services));
return Joiner.on(", ").join(a);
} }
@Override @Override
@ -549,14 +576,7 @@ public class Peer extends PeerSocketHandler {
throw new ProtocolException("Got two version messages from peer"); throw new ProtocolException("Got two version messages from peer");
vPeerVersionMessage = m; vPeerVersionMessage = m;
// Switch to the new protocol version. // Switch to the new protocol version.
long peerTime = vPeerVersionMessage.time * 1000; log.info(toString());
log.info("{}: Got version={}, subVer='{}', services=0x{}, time={}, blocks={}",
this,
vPeerVersionMessage.clientVersion,
vPeerVersionMessage.subVer,
vPeerVersionMessage.localServices,
String.format(Locale.US, "%tF %tT", peerTime, peerTime),
vPeerVersionMessage.bestHeight);
// bitcoinj is a client mode implementation. That means there's not much point in us talking to other client // bitcoinj is a client mode implementation. That means there's not much point in us talking to other client
// mode nodes because we can't download the data from them we need to find/verify transactions. Some bogus // mode nodes because we can't download the data from them we need to find/verify transactions. Some bogus
// implementations claim to have a block chain in their services field but then report a height of zero, filter // implementations claim to have a block chain in their services field but then report a height of zero, filter