read unsigned types & read payload_data (top_version...) (#501)
This commit is contained in:
parent
12546a1ade
commit
9e1167c5b9
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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<PeerRetriever> {
|
|||
static final private byte[] HANDSHAKE = handshakeRequest().asByteArray();
|
||||
static final private byte[] FLAGS_RESP = flagsResponse().asByteArray();
|
||||
|
||||
final private List<InetSocketAddress> peers = new ArrayList<>();
|
||||
final private List<LevinPeer> peers = new ArrayList<>();
|
||||
|
||||
private NodeInfo nodeInfo;
|
||||
private OnGetPeers onGetPeersCallback;
|
||||
|
@ -67,7 +66,7 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
|||
return !peers.isEmpty();
|
||||
}
|
||||
|
||||
public List<InetSocketAddress> getPeers() {
|
||||
public List<LevinPeer> getPeers() {
|
||||
return peers;
|
||||
}
|
||||
|
||||
|
@ -107,12 +106,18 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
|||
}
|
||||
|
||||
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<Section> peerList = (List<Section>) 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<PeerRetriever> {
|
|||
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<PeerRetriever> {
|
|||
&& !inet.isLoopbackAddress()
|
||||
&& !inet.isMulticastAddress()
|
||||
&& !inet.isLinkLocalAddress()) {
|
||||
peers.add(new InetSocketAddress(inet, port));
|
||||
peers.add(new LevinPeer(inet, port, topVersion, currentHeight, topId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue