From e3bdb9eb136318c42e670ca6c127eb6e3249dc9a Mon Sep 17 00:00:00 2001 From: Giovanni Petrantoni <7008900+sinkingsugar@users.noreply.github.com> Date: Fri, 9 Oct 2020 09:12:38 +0900 Subject: [PATCH] decode properly ControlPrune (#392) --- libp2p/protocols/pubsub/rpc/protobuf.nim | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/libp2p/protocols/pubsub/rpc/protobuf.nim b/libp2p/protocols/pubsub/rpc/protobuf.nim index 6bffc6e87..4733d4d21 100644 --- a/libp2p/protocols/pubsub/rpc/protobuf.nim +++ b/libp2p/protocols/pubsub/rpc/protobuf.nim @@ -107,6 +107,20 @@ proc decodeGraft*(pb: ProtoBuffer): ProtoResult[ControlGraft] {. trace "decodeGraft: topicId is missing" ok(control) +proc decodePeerInfoMsg*(pb: ProtoBuffer): ProtoResult[PeerInfoMsg] {. + inline.} = + trace "decodePeerInfoMsg: decoding message" + var pi = PeerInfoMsg() + if ? pb.getField(1, pi.peerID): + trace "decodePeerInfoMsg: read peerID", peerID = pi.peerID + else: + trace "decodePeerInfoMsg: peerID is missing" + if ? pb.getField(2, pi.signedPeerRecord): + trace "decodePeerInfoMsg: read signedPeerRecord", signedPeerRecord = pi.signedPeerRecord + else: + trace "decodePeerInfoMsg: signedPeerRecord is missing" + ok(pi) + proc decodePrune*(pb: ProtoBuffer): ProtoResult[ControlPrune] {. inline.} = trace "decodePrune: decoding message" @@ -115,7 +129,12 @@ proc decodePrune*(pb: ProtoBuffer): ProtoResult[ControlPrune] {. trace "decodePrune: read topicId", topic_id = control.topicId else: trace "decodePrune: topicId is missing" - # TODO gossip 1.1 fields + var bpeers: seq[seq[byte]] + if ? pb.getRepeatedField(2, bpeers): + for bpeer in bpeers: + control.peers &= ? decodePeerInfoMsg(initProtoBuffer(bpeer)) + if ? pb.getField(3, control.backoff): + trace "decodePrune: read backoff", backoff = control.backoff ok(control) proc decodeIHave*(pb: ProtoBuffer): ProtoResult[ControlIHave] {.