From 4e08b4ee6535283d49f31813417f1c1eeb80fca5 Mon Sep 17 00:00:00 2001 From: nicksavers Date: Mon, 5 May 2014 15:01:37 +0200 Subject: [PATCH] Move ReasonCode to enum --- .../net/message/DisconnectMessage.java | 19 +++------ .../org/ethereum/net/message/ReasonCode.java | 42 +++++++++++++++++++ .../java/org/ethereum/net/MessagesTest.java | 7 ++-- 3 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 ethereumj-core/src/main/java/org/ethereum/net/message/ReasonCode.java diff --git a/ethereumj-core/src/main/java/org/ethereum/net/message/DisconnectMessage.java b/ethereumj-core/src/main/java/org/ethereum/net/message/DisconnectMessage.java index a7729514..47769063 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/message/DisconnectMessage.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/message/DisconnectMessage.java @@ -4,6 +4,7 @@ import org.ethereum.net.rlp.RLPItem; import org.ethereum.net.rlp.RLPList; import org.ethereum.net.Command; import static org.ethereum.net.Command.DISCONNECT; +import static org.ethereum.net.message.ReasonCode.DISCONNECT_REQUESTED; /** * www.ethereumJ.com @@ -12,17 +13,7 @@ import static org.ethereum.net.Command.DISCONNECT; */ public class DisconnectMessage extends Message { - private byte reason; - - public static byte REASON_DISCONNECT_REQUESTED = 0x00; - public static byte REASON_TCP_ERROR = 0x01; - public static byte REASON_BAD_PROTOCOL = 0x02; - public static byte REASON_USELESS_PEER = 0x03; - public static byte REASON_TOO_MANY_PEERS = 0x04; - public static byte REASON_ALREADY_CONNECTED = 0x05; - public static byte REASON_WRONG_GENESIS = 0x06; - public static byte REASON_INCOMPATIBLE_PROTOCOL = 0x07; - public static byte REASON_PEER_QUITING = 0x08; + private ReasonCode reason; public DisconnectMessage(RLPList rawData) { super(rawData); @@ -39,9 +30,9 @@ public class DisconnectMessage extends Message { byte[] reasonB = ((RLPItem)paramsList.getElement(1)).getData(); if (reasonB == null){ - this.reason = 0; + this.reason = DISCONNECT_REQUESTED; } else { - this.reason = reasonB[0]; + this.reason = ReasonCode.fromInt(reasonB[0]); } this.parsed = true; // todo: what to do when mal data ? @@ -52,7 +43,7 @@ public class DisconnectMessage extends Message { return null; } - public byte getReason() { + public ReasonCode getReason() { if (!parsed) parseRLP(); return reason; } diff --git a/ethereumj-core/src/main/java/org/ethereum/net/message/ReasonCode.java b/ethereumj-core/src/main/java/org/ethereum/net/message/ReasonCode.java new file mode 100644 index 00000000..d4b15987 --- /dev/null +++ b/ethereumj-core/src/main/java/org/ethereum/net/message/ReasonCode.java @@ -0,0 +1,42 @@ +package org.ethereum.net.message; + +import java.util.HashMap; +import java.util.Map; + +public enum ReasonCode { + + DISCONNECT_REQUESTED(0x00), + TCP_ERROR(0x01), + BAD_PROTOCOL(0x02), + USELESS_PEER(0x03), + TOO_MANY_PEERS(0x04), + ALREADY_CONNECTED(0x05), + WRONG_GENESIS(0x06), + INCOMPATIBLE_PROTOCOL(0x07), + PEER_QUITING(0x08), + UNKNOWN(0xFF); + + private int reason; + + private static final Map intToTypeMap = new HashMap(); + static { + for (ReasonCode type : ReasonCode.values()) { + intToTypeMap.put(type.reason, type); + } + } + + private ReasonCode(int cmd) { + this.reason = cmd; + } + + public static ReasonCode fromInt(int i) { + ReasonCode type = intToTypeMap.get(Integer.valueOf(i)); + if (type == null) + return ReasonCode.UNKNOWN; + return type; + } + + public byte asByte() { + return (byte) reason; + } +} diff --git a/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java b/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java index 8e82664e..8c1c809a 100644 --- a/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java +++ b/ethereumj-core/src/test/java/org/ethereum/net/MessagesTest.java @@ -11,6 +11,7 @@ import org.ethereum.net.message.GetChainMessage; import org.ethereum.net.message.HelloMessage; import org.ethereum.net.message.NotInChainMessage; import org.ethereum.net.message.PeersMessage; +import org.ethereum.net.message.ReasonCode; import org.ethereum.net.message.TransactionsMessage; import org.ethereum.net.rlp.RLP; import org.ethereum.net.rlp.RLPList; @@ -90,8 +91,7 @@ public class MessagesTest { DisconnectMessage disconnectMessage = new DisconnectMessage(rlpList); System.out.println(disconnectMessage); - assertEquals(disconnectMessage.getReason(), - DisconnectMessage.REASON_DISCONNECT_REQUESTED); + assertEquals(disconnectMessage.getReason(), ReasonCode.DISCONNECT_REQUESTED); } @Test /* DisconnectMessage 2 */ @@ -105,8 +105,7 @@ public class MessagesTest { DisconnectMessage disconnectMessage = new DisconnectMessage(rlpList); System.out.println(disconnectMessage); - assertEquals(disconnectMessage.getReason(), - DisconnectMessage.REASON_TCP_ERROR); + assertEquals(disconnectMessage.getReason(), ReasonCode.TCP_ERROR); } /* PEERS */