@@ -82,8 +82,7 @@ class RLPxConnectionHandler(
82
82
(responsePacket, result, remainingData)
83
83
}
84
84
lazy val maybePostEIP8Result = Try {
85
- val encryptedPayloadSize = ByteUtils .bigEndianToShort(data.take(2 ).toArray)
86
- val (packetData, remainingData) = data.splitAt(encryptedPayloadSize + 2 )
85
+ val (packetData, remainingData) = decodeV4Packet(data)
87
86
val (responsePacket, result) = handshaker.handleInitialMessageV4(packetData)
88
87
(responsePacket, result, remainingData)
89
88
}
@@ -110,8 +109,7 @@ class RLPxConnectionHandler(
110
109
(result, remainingData)
111
110
}
112
111
val maybePostEIP8Result = Try {
113
- val size = ByteUtils .bigEndianToShort(data.take(2 ).toArray)
114
- val (packetData, remainingData) = data.splitAt(size + 2 )
112
+ val (packetData, remainingData) = decodeV4Packet(data)
115
113
val result = handshaker.handleResponseMessageV4(packetData)
116
114
(result, remainingData)
117
115
}
@@ -124,6 +122,18 @@ class RLPxConnectionHandler(
124
122
}
125
123
}
126
124
125
+ /**
126
+ * Decode V4 packet
127
+ *
128
+ * @param data, includes both the V4 packet with bytes from next messages
129
+ * @return data of the packet and the remaining data
130
+ */
131
+ private def decodeV4Packet (data : ByteString ): (ByteString , ByteString ) = {
132
+ val encryptedPayloadSize = ByteUtils .bigEndianToShort(data.take(2 ).toArray)
133
+ val (packetData, remainingData) = data.splitAt(encryptedPayloadSize + 2 )
134
+ packetData -> remainingData
135
+ }
136
+
127
137
def handleTimeout : Receive = {
128
138
case AuthHandshakeTimeout =>
129
139
log.warning(s " [Stopping Connection] Auth handshake timeout for peer $peerId" )
0 commit comments