cmd/swarm/swarm-smoke-pss: don't set peer pubkey if a node already knows it

This commit is contained in:
Rafael Matias 2019-04-09 11:26:46 +02:00
parent c91f253a54
commit ade508a579
No known key found for this signature in database
GPG key ID: 1BC39532FB4A2DBD

View file

@ -42,10 +42,26 @@ type pssNode struct {
hostIdx int
addr []byte
pubkey string
peerPubKeys map[string]bool
client *rpc.Client
deregisterFunc func()
}
func (n *pssNode) addPeerPublicKey(peer *pssNode, topic pss.Topic) error {
err := n.client.Call(nil, "pss_setPeerPublicKey", peer.pubkey, topic, hexutil.Encode(peer.addr))
if err != nil {
log.Error("error setting receivers public key on the sender side", "err", err)
return err
}
n.peerPubKeys[peer.pubkey] = true
return nil
}
func (n *pssNode) knowsPeerPublicKey(peer *pssNode) bool {
_, ok := n.peerPubKeys[peer.pubkey]
return ok
}
type pssSession struct {
topic pss.Topic
msgC chan pss.APIMsg
@ -198,8 +214,9 @@ func pssSetup() *pssSession {
&pssNode{
hostIdx: i,
addr: []byte(addr),
client: rpcClient,
pubkey: pubkey,
peerPubKeys: make(map[string]bool),
client: rpcClient,
deregisterFunc: dFn,
},
)
@ -317,16 +334,22 @@ func (s *pssSession) sendRawMessage(sender *pssNode, receiver *pssNode, msg []by
func (s *pssSession) sendAsymMessage(sender *pssNode, receiver *pssNode, msg []byte) error {
// share public keys between nodes
err := sender.client.Call(nil, "pss_setPeerPublicKey", receiver.pubkey, s.topic, hexutil.Encode(receiver.addr))
if err != nil {
log.Error("error setting receivers public key on the sender side", "err", err)
return err
if !sender.knowsPeerPublicKey(receiver) {
err := sender.addPeerPublicKey(receiver, s.topic)
if err != nil {
log.Error("error setting receivers public key on the sender side", "err", err)
return err
}
}
err = receiver.client.Call(nil, "pss_setPeerPublicKey", sender.pubkey, s.topic, hexutil.Encode(sender.addr))
if err != nil {
log.Error("error setting senders public key on the receiver side", "err", err)
return err
if !receiver.knowsPeerPublicKey(sender) {
err := receiver.addPeerPublicKey(sender, s.topic)
if err != nil {
log.Error("error setting senders public key on the receiver side", "err", err)
return err
}
}
// send asym message
return sender.client.Call(nil, "pss_sendAsym", receiver.pubkey, s.topic, hexutil.Encode(msg))
}