diff --git a/app/src/main/java/com/m2049r/levin/scanner/Dispatcher.java b/app/src/main/java/com/m2049r/levin/scanner/Dispatcher.java index e537a40..fd96e78 100644 --- a/app/src/main/java/com/m2049r/levin/scanner/Dispatcher.java +++ b/app/src/main/java/com/m2049r/levin/scanner/Dispatcher.java @@ -18,7 +18,6 @@ package com.m2049r.levin.scanner; import com.m2049r.xmrwallet.data.NodeInfo; -import java.net.InetSocketAddress; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -176,9 +175,9 @@ public class Dispatcher implements PeerRetriever.OnGetPeers { } private void retrievePeers(PeerRetriever peer) { - for (InetSocketAddress socketAddress : peer.getPeers()) { + for (LevinPeer levinPeer : peer.getPeers()) { if (getMorePeers()) - retrievePeer(new NodeInfo(socketAddress)); + retrievePeer(new NodeInfo(levinPeer)); else break; } diff --git a/app/src/main/java/com/m2049r/levin/scanner/LevinPeer.java b/app/src/main/java/com/m2049r/levin/scanner/LevinPeer.java new file mode 100644 index 0000000..1e90e2e --- /dev/null +++ b/app/src/main/java/com/m2049r/levin/scanner/LevinPeer.java @@ -0,0 +1,23 @@ +package com.m2049r.levin.scanner; + +import java.net.InetAddress; +import java.net.InetSocketAddress; + +public class LevinPeer { + final public InetSocketAddress socketAddress; + final public int version; + final public long height; + final public String top; + + + public InetSocketAddress getSocketAddress() { + return socketAddress; + } + + LevinPeer(InetAddress address, int port, int version, long height, String top) { + this.socketAddress = new InetSocketAddress(address, port); + this.version = version; + this.height = height; + this.top = top; + } +} diff --git a/app/src/main/java/com/m2049r/levin/scanner/PeerRetriever.java b/app/src/main/java/com/m2049r/levin/scanner/PeerRetriever.java index 7169264..fcdc4a0 100644 --- a/app/src/main/java/com/m2049r/levin/scanner/PeerRetriever.java +++ b/app/src/main/java/com/m2049r/levin/scanner/PeerRetriever.java @@ -28,7 +28,6 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.net.InetAddress; -import java.net.InetSocketAddress; import java.net.Socket; import java.util.ArrayList; import java.util.Date; @@ -45,7 +44,7 @@ public class PeerRetriever implements Callable { static final private byte[] HANDSHAKE = handshakeRequest().asByteArray(); static final private byte[] FLAGS_RESP = flagsResponse().asByteArray(); - final private List peers = new ArrayList<>(); + final private List peers = new ArrayList<>(); private NodeInfo nodeInfo; private OnGetPeers onGetPeersCallback; @@ -67,7 +66,7 @@ public class PeerRetriever implements Callable { return !peers.isEmpty(); } - public List getPeers() { + public List getPeers() { return peers; } @@ -107,12 +106,18 @@ public class PeerRetriever implements Callable { } private void readAddressList(Section section) { + Section data = (Section) section.get("payload_data"); + int topVersion = (Integer) data.get("top_version"); + long currentHeight = (Long) data.get("current_height"); + String topId = HexHelper.bytesToHex((byte[]) data.get("top_id")); + Timber.d("PAYLOAD_DATA %d/%d/%s", topVersion, currentHeight, topId); + @SuppressWarnings("unchecked") List
peerList = (List
) section.get("local_peerlist_new"); if (peerList != null) { for (Section peer : peerList) { Section adr = (Section) peer.get("adr"); - Byte type = (Byte) adr.get("type"); + Integer type = (Integer) adr.get("type"); if ((type == null) || (type != 1)) continue; Section addr = (Section) adr.get("addr"); @@ -121,7 +126,7 @@ public class PeerRetriever implements Callable { Integer ip = (Integer) addr.get("m_ip"); if (ip == null) continue; - Short sport = (Short) addr.get("m_port"); + Integer sport = (Integer) addr.get("m_port"); if (sport == null) continue; int port = sport; @@ -133,7 +138,7 @@ public class PeerRetriever implements Callable { && !inet.isLoopbackAddress() && !inet.isMulticastAddress() && !inet.isLinkLocalAddress()) { - peers.add(new InetSocketAddress(inet, port)); + peers.add(new LevinPeer(inet, port, topVersion, currentHeight, topId)); } } } diff --git a/app/src/main/java/com/m2049r/levin/util/LevinReader.java b/app/src/main/java/com/m2049r/levin/util/LevinReader.java index 7175e67..d3d48a1 100644 --- a/app/src/main/java/com/m2049r/levin/util/LevinReader.java +++ b/app/src/main/java/com/m2049r/levin/util/LevinReader.java @@ -83,9 +83,11 @@ public class LevinReader { case Section.SERIALIZE_TYPE_INT32: return in.readInt(); case Section.SERIALIZE_TYPE_UINT16: + return in.readUnsignedShort(); case Section.SERIALIZE_TYPE_INT16: return in.readShort(); case Section.SERIALIZE_TYPE_UINT8: + return in.readUnsignedByte(); case Section.SERIALIZE_TYPE_INT8: return in.readByte(); case Section.SERIALIZE_TYPE_OBJECT: diff --git a/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java b/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java index 63f00d7..e09a2d9 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java +++ b/app/src/main/java/com/m2049r/xmrwallet/data/NodeInfo.java @@ -22,6 +22,7 @@ import com.burgstaller.okhttp.digest.CachingAuthenticator; import com.burgstaller.okhttp.digest.Credentials; import com.burgstaller.okhttp.digest.DigestAuthenticator; import com.m2049r.levin.scanner.Dispatcher; +import com.m2049r.levin.scanner.LevinPeer; import com.m2049r.xmrwallet.util.OkHttpHelper; import org.json.JSONException; @@ -99,21 +100,18 @@ public class NodeInfo extends Node { super(nodeString); } - public NodeInfo(InetSocketAddress socketAddress) { - super(socketAddress); + public NodeInfo(LevinPeer levinPeer) { + super(levinPeer.getSocketAddress()); + } + + public NodeInfo(InetSocketAddress address) { + super(address); } public NodeInfo() { super(); } - public NodeInfo(InetSocketAddress peerAddress, long height, int majorVersion, double respTime) { - super(peerAddress); - this.height = height; - this.majorVersion = majorVersion; - this.responseTime = respTime; - } - public long getHeight() { return height; }