You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2020/05/31 07:13:11 UTC

[incubator-tuweni] branch master updated: Use message type instead of magic numbers

This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git


The following commit(s) were added to refs/heads/master by this push:
     new 70e69de  Use message type instead of magic numbers
70e69de is described below

commit 70e69dea6739f4d1a8f31c7f9b0b50442715d8b7
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Sun May 31 00:12:56 2020 -0700

    Use message type instead of magic numbers
---
 .../org/apache/tuweni/devp2p/eth/EthHandler.kt     | 34 +++++++++---------
 .../org/apache/tuweni/devp2p/eth/Messages.kt       | 40 ++++++++++++++++------
 2 files changed, 48 insertions(+), 26 deletions(-)

diff --git a/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/EthHandler.kt b/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/EthHandler.kt
index 23d6f5f..d57637e 100644
--- a/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/EthHandler.kt
+++ b/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/EthHandler.kt
@@ -41,7 +41,7 @@ internal class EthHandler(
 ) : SubProtocolHandler, CoroutineScope {
 
   companion object {
-    val logger = LoggerFactory.getLogger(EthHandler::class.java)
+    val logger = LoggerFactory.getLogger(EthHandler::class.java)!!
   }
 
   val peersMap: MutableMap<String, PeerInfo> = mutableMapOf()
@@ -51,18 +51,18 @@ internal class EthHandler(
   override fun handle(connectionId: String, messageType: Int, message: Bytes) = asyncCompletion {
     logger.debug("Receiving message of type {}", messageType)
     when (messageType) {
-      0 -> handleStatus(connectionId, StatusMessage.read(message))
-      1 -> handleNewBlockHashes(NewBlockHashes.read(message))
-//      2 -> // do nothing.
-      3 -> handleGetBlockHeaders(connectionId, GetBlockHeaders.read(message))
-      4 -> handleHeaders(connectionId, BlockHeaders.read(message))
-      5 -> handleGetBlockBodies(connectionId, GetBlockBodies.read(message))
-      6 -> handleBlockBodies(BlockBodies.read(message))
-      7 -> handleNewBlock(NewBlock.read(message))
-      0x0d -> handleGetNodeData(connectionId, GetNodeData.read(message))
-//      0x0e -> // not implemented yet.
-      0x0f -> handleGetReceipts(connectionId, GetReceipts.read(message))
-      // 0x10 -> handleReceipts(Receipts.read(message)) // not implemented yet
+      MessageType.Status.code -> handleStatus(connectionId, StatusMessage.read(message))
+      MessageType.NewBlockHashes.code -> handleNewBlockHashes(NewBlockHashes.read(message))
+//    Transactions.code -> // do nothing.
+      MessageType.GetBlockHeaders.code -> handleGetBlockHeaders(connectionId, GetBlockHeaders.read(message))
+      MessageType.BlockHeaders.code -> handleHeaders(connectionId, BlockHeaders.read(message))
+      MessageType.GetBlockBodies.code -> handleGetBlockBodies(connectionId, GetBlockBodies.read(message))
+      MessageType.BlockBodies.code -> handleBlockBodies(BlockBodies.read(message))
+      MessageType.NewBlock.code -> handleNewBlock(NewBlock.read(message))
+      MessageType.GetNodeData.code -> handleGetNodeData(connectionId, GetNodeData.read(message))
+//    MessageType.NodeData.code-> // not implemented yet.
+      MessageType.GetReceipts.code -> handleGetReceipts(connectionId, GetReceipts.read(message))
+      // MessageType.Receipts.code -> handleReceipts(Receipts.read(message)) // not implemented yet
     }
   }
 
@@ -83,16 +83,18 @@ internal class EthHandler(
     getReceipts.hashes.forEach {
       receipts.add(repository.retrieveTransactionReceipts(it))
     }
-    service.send(EthSubprotocol.ETH64, 0x10, connectionId, Receipts(receipts).toBytes())
+    service.send(EthSubprotocol.ETH64, MessageType.Receipts.code, connectionId, Receipts(receipts).toBytes())
   }
 
   private fun handleGetNodeData(connectionId: String, nodeData: GetNodeData) {
+    // TODO implement
     nodeData.toBytes()
-    service.send(EthSubprotocol.ETH64, 0x0e, connectionId, NodeData(emptyList()).toBytes())
+    service.send(EthSubprotocol.ETH64, MessageType.NodeData.code, connectionId, NodeData(emptyList()).toBytes())
   }
 
   private suspend fun handleNewBlock(read: NewBlock) {
     repository.storeBlock(read.block)
+    // TODO more to do there
   }
 
   private fun handleBlockBodies(message: BlockBodies) {
@@ -151,7 +153,7 @@ internal class EthHandler(
         val nextHeader = repository.retrieveBlockHeader(nextMatches[0]) ?: break
         headers.add(nextHeader)
       }
-      service.send(EthSubprotocol.ETH64, 4, connectionId, BlockHeaders(headers).toBytes())
+      service.send(EthSubprotocol.ETH64, MessageType.BlockHeaders.code, connectionId, BlockHeaders(headers).toBytes())
     }
   }
 
diff --git a/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/Messages.kt b/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/Messages.kt
index 549e4c4..c3ea031 100644
--- a/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/Messages.kt
+++ b/devp2p-eth/src/main/kotlin/org/apache/tuweni/devp2p/eth/Messages.kt
@@ -25,6 +25,24 @@ import org.apache.tuweni.eth.TransactionReceipt
 import org.apache.tuweni.rlp.RLP
 import org.apache.tuweni.units.bigints.UInt256
 
+/**
+ * ETH subprotocol message types.
+ */
+enum class MessageType(val code: Int) {
+  Status(0x00),
+  NewBlockHashes(0x01),
+  Transactions(0x02),
+  GetBlockHeaders(0x03),
+  BlockHeaders(0x04),
+  GetBlockBodies(0x05),
+  BlockBodies(0x06),
+  NewBlock(0x07),
+  GetNodeData(0x0d),
+  NodeData(0x0e),
+  GetReceipts(0x0f),
+  Receipts(0x10)
+}
+
 data class StatusMessage(
   val protocolVersion: Int,
   val networkID: UInt256,
@@ -39,17 +57,19 @@ data class StatusMessage(
 
     fun read(payload: Bytes): StatusMessage = RLP.decode(payload) {
       it.readList { reader ->
-          val protocolVersion = reader.readInt()
-          val networkID = UInt256.fromBytes(reader.readValue())
-          val totalDifficulty = UInt256.fromBytes(reader.readValue())
-          val bestHash = Hash.fromBytes(reader.readValue())
-          val genesisHash = Hash.fromBytes(reader.readValue())
-          val forkInfo = reader.readList { fork ->
-            Pair(fork.readValue(), fork.readValue())
-          }
+        val protocolVersion = reader.readInt()
+        val networkID = UInt256.fromBytes(reader.readValue())
+        val totalDifficulty = UInt256.fromBytes(reader.readValue())
+        val bestHash = Hash.fromBytes(reader.readValue())
+        val genesisHash = Hash.fromBytes(reader.readValue())
+        val forkInfo = reader.readList { fork ->
+          Pair(fork.readValue(), fork.readValue())
+        }
 
-          StatusMessage(protocolVersion, networkID, totalDifficulty, bestHash,
-            genesisHash, forkInfo.first, forkInfo.second.toLong())
+        StatusMessage(
+          protocolVersion, networkID, totalDifficulty, bestHash,
+          genesisHash, forkInfo.first, forkInfo.second.toLong()
+        )
       }
     }
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org