func (g *gossipServiceImpl) createCertStorePuller() pull.Mediator { conf := pull.PullConfig{ MsgType: proto.PullMsgType_IdentityMsg, Channel: []byte(""), Id: g.conf.SelfEndpoint, PeerCountToSelect: g.conf.PullPeerNum, PullInterval: g.conf.PullInterval, Tag: proto.GossipMessage_EMPTY, } pkiIDFromMsg := func(msg *proto.GossipMessage) string { identityMsg := msg.GetPeerIdentity() if identityMsg == nil || identityMsg.PkiID == nil { return "" } return fmt.Sprintf("%s", string(identityMsg.PkiID)) } certConsumer := func(msg *proto.GossipMessage) { idMsg := msg.GetPeerIdentity() if idMsg == nil || idMsg.Cert == nil || idMsg.PkiID == nil { g.logger.Warning("Invalid PeerIdentity:", idMsg) return } err := g.idMapper.Put(common.PKIidType(idMsg.PkiID), api.PeerIdentityType(idMsg.Cert)) if err != nil { g.logger.Warning("Failed associating PKI-ID with certificate:", err) } } return pull.NewPullMediator(conf, g.comm, g.disc, pkiIDFromMsg, certConsumer) }
func (g *gossipServiceImpl) createBlockPuller() pull.Mediator { conf := pull.PullConfig{ MsgType: proto.PullMsgType_BlockMessage, Channel: []byte(""), Id: g.conf.SelfEndpoint, PeerCountToSelect: g.conf.PullPeerNum, PullInterval: g.conf.PullInterval, Tag: proto.GossipMessage_EMPTY, } seqNumFromMsg := func(msg *proto.GossipMessage) string { dataMsg := msg.GetDataMsg() if dataMsg == nil || dataMsg.Payload == nil { return "" } return fmt.Sprintf("%d", dataMsg.Payload.SeqNum) } blockConsumer := func(msg *proto.GossipMessage) { dataMsg := msg.GetDataMsg() if dataMsg == nil || dataMsg.Payload == nil { g.logger.Warning("Invalid DataMessage:", dataMsg) return } added := g.msgStore.add(msg) // if we can't add the message to the msgStore, // no point in disseminating it to others... if !added { return } g.DeMultiplex(msg) } return pull.NewPullMediator(conf, g.comm, g.disc, seqNumFromMsg, blockConsumer) }