// NewCommInstanceWithServer creates a comm instance that creates an underlying gRPC server func NewCommInstanceWithServer(port int, idMapper identity.Mapper, peerIdentity api.PeerIdentityType, dialOpts ...grpc.DialOption) (Comm, error) { var ll net.Listener var s *grpc.Server var secOpt grpc.DialOption if len(dialOpts) == 0 { dialOpts = []grpc.DialOption{grpc.WithTimeout(dialTimeout)} } if port > 0 { s, ll, secOpt = createGRPCLayer(port) dialOpts = append(dialOpts, secOpt) } commInst := &commImpl{ PKIID: idMapper.GetPKIidOfCert(peerIdentity), idMapper: idMapper, logger: util.GetLogger(util.LOGGING_COMM_MODULE, fmt.Sprintf("%d", port)), peerIdentity: peerIdentity, opts: dialOpts, port: port, lsnr: ll, gSrv: s, msgPublisher: NewChannelDemultiplexer(), lock: &sync.RWMutex{}, deadEndpoints: make(chan common.PKIidType, 100), stopping: int32(0), exitChan: make(chan struct{}, 1), subscriptions: make([]chan ReceivedMessage, 0), blackListedPKIIDs: make([]common.PKIidType, 0), } commInst.connStore = newConnStore(commInst, commInst.logger) commInst.idMapper.Put(idMapper.GetPKIidOfCert(peerIdentity), peerIdentity) if port > 0 { go func() { commInst.stopWG.Add(1) defer commInst.stopWG.Done() s.Serve(ll) }() proto.RegisterGossipServer(s, commInst) } commInst.logger.SetLevel(logging.WARNING) return commInst, nil }
func newCertStore(puller pull.Mediator, idMapper identity.Mapper, selfIdentity api.PeerIdentityType, mcs api.MessageCryptoService) *certStore { selfPKIID := idMapper.GetPKIidOfCert(selfIdentity) logger := util.GetLogger("certStore", string(selfPKIID)) if err := idMapper.Put(selfPKIID, selfIdentity); err != nil { logger.Error("Failed associating self PKIID to cert:", err) panic(fmt.Errorf("Failed associating self PKIID to cert: %v", err)) } certStore := &certStore{ mcs: mcs, pull: puller, idMapper: idMapper, selfIdentity: selfIdentity, logger: logger, } certStore.logger = util.GetLogger("certStore", string(selfPKIID)) if err := certStore.idMapper.Put(selfPKIID, selfIdentity); err != nil { certStore.logger.Panic("Failed associating self PKIID to cert:", err) } puller.Add(certStore.createIdentityMessage()) puller.RegisterMsgHook(pull.ResponseMsgType, func(_ []string, msgs []*proto.GossipMessage, _ comm.ReceivedMessage) { for _, msg := range msgs { pkiID := common.PKIidType(msg.GetPeerIdentity().PkiID) cert := api.PeerIdentityType(msg.GetPeerIdentity().Cert) if err := certStore.idMapper.Put(pkiID, cert); err != nil { certStore.logger.Warning("Failed adding identity", cert, ", reason:", err) } } }) puller.Add(certStore.createIdentityMessage()) return certStore }