From 80a2612c36a6022bfdcc52e2dc0602b0fee6118e Mon Sep 17 00:00:00 2001
From: Wolfgang Welz <welzwo@gmail.com>
Date: Fri, 24 Jan 2020 18:31:01 +0100
Subject: [PATCH] Do not handle autopeering package before started

---
 packages/autopeering/discover/protocol.go  | 11 +++++++++--
 packages/autopeering/selection/protocol.go | 11 +++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/packages/autopeering/discover/protocol.go b/packages/autopeering/discover/protocol.go
index 8fbda7d7..07790b94 100644
--- a/packages/autopeering/discover/protocol.go
+++ b/packages/autopeering/discover/protocol.go
@@ -15,6 +15,7 @@ import (
 	"github.com/iotaledger/goshimmer/packages/autopeering/server"
 	"github.com/iotaledger/hive.go/backoff"
 	"github.com/iotaledger/hive.go/logger"
+	"github.com/iotaledger/hive.go/typeutils"
 )
 
 const (
@@ -35,6 +36,7 @@ type Protocol struct {
 	log *logger.Logger // logging
 
 	mgr       *manager // the manager handles the actual peer discovery and re-verification
+	running   *typeutils.AtomicBool
 	closeOnce sync.Once
 }
 
@@ -44,6 +46,7 @@ func New(local *peer.Local, cfg Config) *Protocol {
 		Protocol: server.Protocol{},
 		loc:      local,
 		log:      cfg.Log,
+		running:  typeutils.NewAtomicBool(),
 	}
 	p.mgr = newManager(p, cfg.MasterPeers, cfg.Log.Named("mgr"))
 
@@ -54,13 +57,14 @@ func New(local *peer.Local, cfg Config) *Protocol {
 func (p *Protocol) Start(s server.Sender) {
 	p.Protocol.Sender = s
 	p.mgr.start()
-
 	p.log.Debug("discover started")
+	p.running.Set()
 }
 
 // Close finalizes the protocol.
 func (p *Protocol) Close() {
 	p.closeOnce.Do(func() {
+		p.running.UnSet()
 		p.mgr.close()
 	})
 }
@@ -105,8 +109,11 @@ func (p *Protocol) GetVerifiedPeers() []*peer.Peer {
 
 // HandleMessage responds to incoming peer discovery messages.
 func (p *Protocol) HandleMessage(s *server.Server, fromAddr string, fromID peer.ID, fromKey peer.PublicKey, data []byte) (bool, error) {
-	switch pb.MType(data[0]) {
+	if !p.running.IsSet() {
+		return false, nil
+	}
 
+	switch pb.MType(data[0]) {
 	// Ping
 	case pb.MPing:
 		m := new(pb.Ping)
diff --git a/packages/autopeering/selection/protocol.go b/packages/autopeering/selection/protocol.go
index 61ad178d..b0cf1cc1 100644
--- a/packages/autopeering/selection/protocol.go
+++ b/packages/autopeering/selection/protocol.go
@@ -15,6 +15,7 @@ import (
 	"github.com/iotaledger/goshimmer/packages/autopeering/server"
 	"github.com/iotaledger/hive.go/backoff"
 	"github.com/iotaledger/hive.go/logger"
+	"github.com/iotaledger/hive.go/typeutils"
 )
 
 const (
@@ -45,6 +46,7 @@ type Protocol struct {
 	log  *logger.Logger   // logging
 
 	mgr       *manager // the manager handles the actual neighbor selection
+	running   *typeutils.AtomicBool
 	closeOnce sync.Once
 }
 
@@ -55,6 +57,7 @@ func New(local *peer.Local, disc DiscoverProtocol, cfg Config) *Protocol {
 		loc:      local,
 		disc:     disc,
 		log:      cfg.Log,
+		running:  typeutils.NewAtomicBool(),
 	}
 	p.mgr = newManager(p, disc.GetVerifiedPeers, cfg.Log.Named("mgr"), cfg)
 
@@ -65,13 +68,14 @@ func New(local *peer.Local, disc DiscoverProtocol, cfg Config) *Protocol {
 func (p *Protocol) Start(s server.Sender) {
 	p.Protocol.Sender = s
 	p.mgr.start()
-
 	p.log.Debug("neighborhood started")
+	p.running.Set()
 }
 
 // Close finalizes the protocol.
 func (p *Protocol) Close() {
 	p.closeOnce.Do(func() {
+		p.running.UnSet()
 		p.mgr.close()
 	})
 }
@@ -100,8 +104,11 @@ func (p *Protocol) RemoveNeighbor(id peer.ID) {
 
 // HandleMessage responds to incoming neighbor selection messages.
 func (p *Protocol) HandleMessage(s *server.Server, fromAddr string, fromID peer.ID, _ peer.PublicKey, data []byte) (bool, error) {
-	switch pb.MType(data[0]) {
+	if !p.running.IsSet() {
+		return false, nil
+	}
 
+	switch pb.MType(data[0]) {
 	// PeeringRequest
 	case pb.MPeeringRequest:
 		m := new(pb.PeeringRequest)
-- 
GitLab