mirror of https://github.com/status-im/nim-eth.git
Resolve without altering Rlp API
This commit is contained in:
parent
6b5af745a2
commit
dfe7d43d19
|
@ -229,13 +229,13 @@ proc recvFindNode(d: DiscoveryProtocol, node: Node, payload: Bytes) {.inline, gc
|
||||||
proc expirationValid(cmdId: CommandId, rlpEncodedPayload: seq[byte]):
|
proc expirationValid(cmdId: CommandId, rlpEncodedPayload: seq[byte]):
|
||||||
bool {.inline, raises:[DiscProtocolError, RlpError].} =
|
bool {.inline, raises:[DiscProtocolError, RlpError].} =
|
||||||
## Can only raise `DiscProtocolError` and all of `RlpError`
|
## Can only raise `DiscProtocolError` and all of `RlpError`
|
||||||
# Check if there is a payload, TODO: perhaps this should be an RLP error?
|
# Check if there is a payload
|
||||||
if rlpEncodedPayload.len <= 0:
|
if rlpEncodedPayload.len <= 0:
|
||||||
raise newException(DiscProtocolError, "RLP stream is empty")
|
raise newException(DiscProtocolError, "RLP stream is empty")
|
||||||
let rlp = rlpFromBytes(rlpEncodedPayload.toRange)
|
let rlp = rlpFromBytes(rlpEncodedPayload.toRange)
|
||||||
# Check payload is an RLP list and if the list has the minimum items required
|
# Check payload is an RLP list and if the list has the minimum items required
|
||||||
# for this packet type
|
# for this packet type
|
||||||
if rlp.listLen >= MinListLen[cmdId]:
|
if rlp.isList and rlp.listLen >= MinListLen[cmdId]:
|
||||||
# Expiration is always the last mandatory item of the list
|
# Expiration is always the last mandatory item of the list
|
||||||
let expiration = rlp.listElem(MinListLen[cmdId] - 1).toInt(uint32)
|
let expiration = rlp.listElem(MinListLen[cmdId] - 1).toInt(uint32)
|
||||||
result = epochTime() <= expiration.float
|
result = epochTime() <= expiration.float
|
||||||
|
|
|
@ -275,7 +275,7 @@ proc listElem*(self: Rlp, i: int): Rlp =
|
||||||
|
|
||||||
proc listLen*(self: Rlp): int =
|
proc listLen*(self: Rlp): int =
|
||||||
if not isList():
|
if not isList():
|
||||||
raise newException(RlpTypeMismatch, "List expected, but the source RLP is not a list.")
|
return 0
|
||||||
|
|
||||||
var rlp = self
|
var rlp = self
|
||||||
for elem in rlp:
|
for elem in rlp:
|
||||||
|
|
Loading…
Reference in New Issue