Net layer packet interfere bug:
+ temporary turn off all the parallel traffic, in order to fully download the chain
This commit is contained in:
parent
982c500909
commit
8dc0a56644
|
@ -3,6 +3,9 @@ package org.ethereum.net.client;
|
|||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.ByteToMessageDecoder;
|
||||
import io.netty.handler.codec.CorruptedFrameException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -13,6 +16,8 @@ import java.util.List;
|
|||
*/
|
||||
public class EthereumFrameDecoder extends ByteToMessageDecoder {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger("wire");
|
||||
|
||||
@Override
|
||||
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
|
||||
|
||||
|
@ -27,21 +32,26 @@ public class EthereumFrameDecoder extends ByteToMessageDecoder {
|
|||
(magicBytes >> 8 & 0xFF) == 0x08 &&
|
||||
(magicBytes & 0xFF) == 0x91 )) {
|
||||
|
||||
logger.error("abandon garbage, wrong magic bytes: [ {} ] msgSize: [ {} ]", magicBytes, msgSize);
|
||||
ctx.close();
|
||||
}
|
||||
|
||||
// Don't have the full packet yet
|
||||
if (msgSize > in.readableBytes()) {
|
||||
|
||||
logger.debug("msg decode: magicBytes: [ {} ], readBytes: [ {} ] / msgSize: [ {} ] ", magicBytes, in.readableBytes(), msgSize);
|
||||
in.resetReaderIndex();
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debug("message fully constructed go handle it: readBytes: [ {} ] / msgSize: [ {} ]", in.readableBytes(), msgSize);
|
||||
|
||||
byte[] decoded = new byte[(int)msgSize];
|
||||
in.readBytes(decoded);
|
||||
|
||||
out.add(decoded);
|
||||
|
||||
// Chop the achieved data.
|
||||
in.markReaderIndex();
|
||||
|
||||
}
|
||||
}
|
|
@ -43,7 +43,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
private Logger logger = LoggerFactory.getLogger("wire");
|
||||
|
||||
private Timer chainAskTimer = new Timer();
|
||||
private int secToAskForChain = 1;
|
||||
private int secToAskForChain = 7;
|
||||
|
||||
private final Timer timer = new Timer();
|
||||
private final static byte[] MAGIC_PREFIX = {(byte)0x22, (byte)0x40, (byte)0x08, (byte)0x91};
|
||||
|
@ -76,6 +76,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
ctx.writeAndFlush(buffer);
|
||||
|
||||
// sample for pinging in background
|
||||
/*
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
|
||||
public void run() {
|
||||
|
@ -94,7 +95,9 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
sendPing(ctx);
|
||||
}
|
||||
}, 2000, 5000);
|
||||
*/
|
||||
|
||||
/*
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
|
||||
public void run() {
|
||||
|
@ -110,14 +113,18 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
sendGetTransactions(ctx);
|
||||
}
|
||||
}, 2000, 30000);
|
||||
*/
|
||||
|
||||
/*
|
||||
chainAskTimer.schedule(new TimerTask() {
|
||||
|
||||
public void run() {
|
||||
logger.info("[Send: GET_CHAIN]");
|
||||
sendGetChain(ctx);
|
||||
}
|
||||
}, 3000, secToAskForChain * 1000);
|
||||
*/
|
||||
|
||||
sendGetChain(ctx);
|
||||
|
||||
}
|
||||
|
||||
|
@ -128,6 +135,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
logger.info("[Recv msg: [{}] ]", Hex.toHexString(payload));
|
||||
|
||||
byte command = RLP.getCommandCode(payload);
|
||||
|
||||
// got HELLO
|
||||
if (Command.fromInt(command) == HELLO) {
|
||||
logger.info("[Recv: HELLO]" );
|
||||
|
@ -223,6 +231,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
|
||||
// If we get one block from a peer
|
||||
// we ask less greedy
|
||||
/*
|
||||
if (blockList.size() <= 1 && secToAskForChain != 10) {
|
||||
|
||||
logger.info("Now we ask for a chain each 10 seconds");
|
||||
|
@ -239,9 +248,11 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
}
|
||||
}, 3000, secToAskForChain * 1000);
|
||||
}
|
||||
*/
|
||||
|
||||
// If we get more blocks from a peer
|
||||
// we ask more greedy
|
||||
/*
|
||||
if (blockList.size() > 2 && secToAskForChain != 1) {
|
||||
|
||||
logger.info("Now we ask for a chain each 1 seconds");
|
||||
|
@ -258,9 +269,13 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
}
|
||||
}, 3000, secToAskForChain * 1000);
|
||||
}
|
||||
*/
|
||||
|
||||
WorldManager.getInstance().getBlockChain().addBlocks(blockList);
|
||||
if (peerListener != null) peerListener.console(blocksMessage.toString());
|
||||
|
||||
if (blockList.size() > 1)
|
||||
sendGetChain(ctx);
|
||||
}
|
||||
|
||||
// got GETCHAIN
|
||||
|
@ -359,6 +374,7 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
|
|||
|
||||
private void sendGetChain(ChannelHandlerContext ctx) {
|
||||
|
||||
logger.info("[Send: GET_CHAIN]");
|
||||
byte[] hash = WorldManager.getInstance().getBlockChain().getLastBlock().getHash();
|
||||
GetChainMessage chainMessage = new GetChainMessage((byte)100, hash);
|
||||
chainMessage.toString();
|
||||
|
|
Loading…
Reference in New Issue