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 com.m2049r.xmrwallet.data.NodeInfo;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -176,9 +175,9 @@ public class Dispatcher implements PeerRetriever.OnGetPeers {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void retrievePeers(PeerRetriever peer) {
|
private void retrievePeers(PeerRetriever peer) {
|
||||||
for (InetSocketAddress socketAddress : peer.getPeers()) {
|
for (LevinPeer levinPeer : peer.getPeers()) {
|
||||||
if (getMorePeers())
|
if (getMorePeers())
|
||||||
retrievePeer(new NodeInfo(socketAddress));
|
retrievePeer(new NodeInfo(levinPeer));
|
||||||
else
|
else
|
||||||
break;
|
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.DataOutput;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
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[] HANDSHAKE = handshakeRequest().asByteArray();
|
||||||
static final private byte[] FLAGS_RESP = flagsResponse().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 NodeInfo nodeInfo;
|
||||||
private OnGetPeers onGetPeersCallback;
|
private OnGetPeers onGetPeersCallback;
|
||||||
|
@ -67,7 +66,7 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
||||||
return !peers.isEmpty();
|
return !peers.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<InetSocketAddress> getPeers() {
|
public List<LevinPeer> getPeers() {
|
||||||
return peers;
|
return peers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,12 +106,18 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readAddressList(Section section) {
|
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")
|
@SuppressWarnings("unchecked")
|
||||||
List<Section> peerList = (List<Section>) section.get("local_peerlist_new");
|
List<Section> peerList = (List<Section>) section.get("local_peerlist_new");
|
||||||
if (peerList != null) {
|
if (peerList != null) {
|
||||||
for (Section peer : peerList) {
|
for (Section peer : peerList) {
|
||||||
Section adr = (Section) peer.get("adr");
|
Section adr = (Section) peer.get("adr");
|
||||||
Byte type = (Byte) adr.get("type");
|
Integer type = (Integer) adr.get("type");
|
||||||
if ((type == null) || (type != 1))
|
if ((type == null) || (type != 1))
|
||||||
continue;
|
continue;
|
||||||
Section addr = (Section) adr.get("addr");
|
Section addr = (Section) adr.get("addr");
|
||||||
|
@ -121,7 +126,7 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
||||||
Integer ip = (Integer) addr.get("m_ip");
|
Integer ip = (Integer) addr.get("m_ip");
|
||||||
if (ip == null)
|
if (ip == null)
|
||||||
continue;
|
continue;
|
||||||
Short sport = (Short) addr.get("m_port");
|
Integer sport = (Integer) addr.get("m_port");
|
||||||
if (sport == null)
|
if (sport == null)
|
||||||
continue;
|
continue;
|
||||||
int port = sport;
|
int port = sport;
|
||||||
|
@ -133,7 +138,7 @@ public class PeerRetriever implements Callable<PeerRetriever> {
|
||||||
&& !inet.isLoopbackAddress()
|
&& !inet.isLoopbackAddress()
|
||||||
&& !inet.isMulticastAddress()
|
&& !inet.isMulticastAddress()
|
||||||
&& !inet.isLinkLocalAddress()) {
|
&& !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:
|
case Section.SERIALIZE_TYPE_INT32:
|
||||||
return in.readInt();
|
return in.readInt();
|
||||||
case Section.SERIALIZE_TYPE_UINT16:
|
case Section.SERIALIZE_TYPE_UINT16:
|
||||||
|
return in.readUnsignedShort();
|
||||||
case Section.SERIALIZE_TYPE_INT16:
|
case Section.SERIALIZE_TYPE_INT16:
|
||||||
return in.readShort();
|
return in.readShort();
|
||||||
case Section.SERIALIZE_TYPE_UINT8:
|
case Section.SERIALIZE_TYPE_UINT8:
|
||||||
|
return in.readUnsignedByte();
|
||||||
case Section.SERIALIZE_TYPE_INT8:
|
case Section.SERIALIZE_TYPE_INT8:
|
||||||
return in.readByte();
|
return in.readByte();
|
||||||
case Section.SERIALIZE_TYPE_OBJECT:
|
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.Credentials;
|
||||||
import com.burgstaller.okhttp.digest.DigestAuthenticator;
|
import com.burgstaller.okhttp.digest.DigestAuthenticator;
|
||||||
import com.m2049r.levin.scanner.Dispatcher;
|
import com.m2049r.levin.scanner.Dispatcher;
|
||||||
|
import com.m2049r.levin.scanner.LevinPeer;
|
||||||
import com.m2049r.xmrwallet.util.OkHttpHelper;
|
import com.m2049r.xmrwallet.util.OkHttpHelper;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -99,21 +100,18 @@ public class NodeInfo extends Node {
|
||||||
super(nodeString);
|
super(nodeString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NodeInfo(InetSocketAddress socketAddress) {
|
public NodeInfo(LevinPeer levinPeer) {
|
||||||
super(socketAddress);
|
super(levinPeer.getSocketAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
public NodeInfo(InetSocketAddress address) {
|
||||||
|
super(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NodeInfo() {
|
public NodeInfo() {
|
||||||
super();
|
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() {
|
public long getHeight() {
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue