mirror of
https://github.com/status-im/nim-eth.git
synced 2025-02-16 07:56:38 +00:00
Improve Portal message tracing
This commit is contained in:
parent
880b753ad2
commit
1c400e3f0e
@ -8,13 +8,16 @@
|
|||||||
{.push raises: [Defect].}
|
{.push raises: [Defect].}
|
||||||
|
|
||||||
import
|
import
|
||||||
stew/[results, byteutils],
|
stew/[results, byteutils], chronicles,
|
||||||
../../rlp,
|
../../rlp,
|
||||||
../discoveryv5/[protocol, node],
|
../discoveryv5/[protocol, node],
|
||||||
./messages
|
./messages
|
||||||
|
|
||||||
export messages
|
export messages
|
||||||
|
|
||||||
|
logScope:
|
||||||
|
topics = "portal"
|
||||||
|
|
||||||
const
|
const
|
||||||
PortalProtocolId* = "portal".toBytes()
|
PortalProtocolId* = "portal".toBytes()
|
||||||
|
|
||||||
@ -66,6 +69,7 @@ proc messageHandler*(protocol: TalkProtocol, request: seq[byte]): seq[byte] =
|
|||||||
let decoded = decodeMessage(request)
|
let decoded = decodeMessage(request)
|
||||||
if decoded.isOk():
|
if decoded.isOk():
|
||||||
let message = decoded.get()
|
let message = decoded.get()
|
||||||
|
trace "Received message response", kind = message.kind
|
||||||
case message.kind
|
case message.kind
|
||||||
of MessageKind.ping:
|
of MessageKind.ping:
|
||||||
p.handlePing(message.ping)
|
p.handlePing(message.ping)
|
||||||
@ -97,15 +101,22 @@ proc ping*(p: PortalProtocol, dst: Node):
|
|||||||
let ping = PingMessage(enrSeq: p.baseProtocol.localNode.record.seqNum,
|
let ping = PingMessage(enrSeq: p.baseProtocol.localNode.record.seqNum,
|
||||||
dataRadius: p.dataRadius)
|
dataRadius: p.dataRadius)
|
||||||
|
|
||||||
|
# TODO: This send and response handling code could be more generalized for the
|
||||||
|
# different message types.
|
||||||
|
trace "Send message request", dstId = dst.id, kind = MessageKind.ping
|
||||||
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
||||||
encodeMessage(ping))
|
encodeMessage(ping))
|
||||||
|
|
||||||
if talkresp.isOk():
|
if talkresp.isOk():
|
||||||
let decoded = decodeMessage(talkresp.get().response)
|
let decoded = decodeMessage(talkresp.get().response)
|
||||||
if decoded.isOk() and decoded.get().kind == pong:
|
if decoded.isOk():
|
||||||
return ok(decoded.get().pong)
|
let message = decoded.get()
|
||||||
|
if message.kind == pong:
|
||||||
|
return ok(message.pong)
|
||||||
|
else:
|
||||||
|
return err("Invalid message response received")
|
||||||
else:
|
else:
|
||||||
return err("Invalid message received")
|
return err(decoded.error)
|
||||||
else:
|
else:
|
||||||
return err(talkresp.error)
|
return err(talkresp.error)
|
||||||
|
|
||||||
@ -113,16 +124,21 @@ proc findNode*(p: PortalProtocol, dst: Node, distances: List[uint16, 256]):
|
|||||||
Future[DiscResult[NodesMessage]] {.async.} =
|
Future[DiscResult[NodesMessage]] {.async.} =
|
||||||
let fn = FindNodeMessage(distances: distances)
|
let fn = FindNodeMessage(distances: distances)
|
||||||
|
|
||||||
|
trace "Send message request", dstId = dst.id, kind = MessageKind.findnode
|
||||||
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
||||||
encodeMessage(fn))
|
encodeMessage(fn))
|
||||||
|
|
||||||
if talkresp.isOk():
|
if talkresp.isOk():
|
||||||
let decoded = decodeMessage(talkresp.get().response)
|
let decoded = decodeMessage(talkresp.get().response)
|
||||||
if decoded.isOk() and decoded.get().kind == nodes:
|
if decoded.isOk():
|
||||||
# TODO: Verify nodes here
|
let message = decoded.get()
|
||||||
return ok(decoded.get().nodes)
|
if message.kind == nodes:
|
||||||
|
# TODO: Verify nodes here
|
||||||
|
return ok(message.nodes)
|
||||||
|
else:
|
||||||
|
return err("Invalid message response received")
|
||||||
else:
|
else:
|
||||||
return err("Invalid message received")
|
return err(decoded.error)
|
||||||
else:
|
else:
|
||||||
return err(talkresp.error)
|
return err(talkresp.error)
|
||||||
|
|
||||||
@ -130,14 +146,19 @@ proc findContent*(p: PortalProtocol, dst: Node, contentKey: ByteList):
|
|||||||
Future[DiscResult[FoundContentMessage]] {.async.} =
|
Future[DiscResult[FoundContentMessage]] {.async.} =
|
||||||
let fc = FindContentMessage(contentKey: contentKey)
|
let fc = FindContentMessage(contentKey: contentKey)
|
||||||
|
|
||||||
|
trace "Send message request", dstId = dst.id, kind = MessageKind.findcontent
|
||||||
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
let talkresp = await talkreq(p.baseProtocol, dst, PortalProtocolId,
|
||||||
encodeMessage(fc))
|
encodeMessage(fc))
|
||||||
|
|
||||||
if talkresp.isOk():
|
if talkresp.isOk():
|
||||||
let decoded = decodeMessage(talkresp.get().response)
|
let decoded = decodeMessage(talkresp.get().response)
|
||||||
if decoded.isOk() and decoded.get().kind == foundcontent:
|
if decoded.isOk():
|
||||||
return ok(decoded.get().foundcontent)
|
let message = decoded.get()
|
||||||
|
if message.kind == foundcontent:
|
||||||
|
return ok(message.foundcontent)
|
||||||
|
else:
|
||||||
|
return err("Invalid message response received")
|
||||||
else:
|
else:
|
||||||
return err("Invalid message received")
|
return err(decoded.error)
|
||||||
else:
|
else:
|
||||||
return err(talkresp.error)
|
return err(talkresp.error)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user