Skip to content
Snippets Groups Projects
Select Git revision
  • 4bb43dc291e7db3e711d967722539468044bea50
  • develop default protected
  • congestioncontrol
  • merge-v-data-collection-spammer-0.8.2
  • WIP-merge-v-data-collection-spammer-0.8.2
  • merge-v-data-collection-spammer-0.7.7
  • tmp
  • test-masterpow-fixing
  • test-masterpow
  • test-echo
  • v-data-collection
  • v-data-collection-spammer
  • tmp-dump-spam-info
  • dump-msg-info-0.3.1
  • test-dump-message-info
  • spammer-exprandom
  • extra/tutorial
  • without_tipselection
  • hacking-docker-network
  • hacking-docker-network-0.2.3
  • master
  • v0.2.3
22 results

bundlefactory.go

Blame
  • plugin.go 1.96 KiB
    package portcheck
    
    import (
    	"net"
    
    	"github.com/iotaledger/goshimmer/plugins/autopeering"
    	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
    	"github.com/iotaledger/goshimmer/plugins/banner"
    	"github.com/iotaledger/hive.go/autopeering/discover"
    	"github.com/iotaledger/hive.go/autopeering/peer/service"
    	"github.com/iotaledger/hive.go/autopeering/server"
    	"github.com/iotaledger/hive.go/logger"
    	"github.com/iotaledger/hive.go/node"
    )
    
    const (
    	PLUGIN_NAME = "PortCheck"
    )
    
    var (
    	PLUGIN = node.NewPlugin(PLUGIN_NAME, node.Enabled, configure, run)
    	log    *logger.Logger
    )
    
    func configure(*node.Plugin) {
    	log = logger.NewLogger(PLUGIN_NAME)
    }
    
    func run(*node.Plugin) {
    	log.Info("Testing autopeering service ...")
    	checkAutopeeringConnection()
    	log.Info("Testing autopeering service ... done")
    }
    
    // check that discovery is working and the port is open
    func checkAutopeeringConnection() {
    	peering := local.GetInstance().Services().Get(service.PeeringKey)
    
    	// resolve the bind address
    	localAddr, err := net.ResolveUDPAddr(peering.Network(), autopeering.GetBindAddress())
    	if err != nil {
    		log.Fatalf("Error resolving %s: %v", local.CFG_BIND, err)
    	}
    	// open a connection
    	conn, err := net.ListenUDP(peering.Network(), localAddr)
    	if err != nil {
    		log.Fatalf("Error listening: %v", err)
    	}
    	defer conn.Close()
    
    	// create a new discovery server for the port check
    	disc := discover.New(local.GetInstance(), autopeering.ProtocolVersion, autopeering.NetworkID, discover.Logger(log))
    	srv := server.Serve(local.GetInstance(), conn, log, disc)
    	defer srv.Close()
    
    	disc.Start(srv)
    	defer disc.Close()
    
    	for _, master := range autopeering.Discovery.GetMasterPeers() {
    		err = disc.Ping(master)
    		if err == nil {
    			log.Infof("Pong received from %s", master.IP())
    			break
    		}
    		log.Warnf("Error pinging entry node %s: %s", master.IP(), err)
    	}
    
    	if err != nil {
    		log.Fatalf("Please check that %s is publicly reachable at port %d/%s",
    			banner.AppName, peering.Port(), peering.Network())
    	}
    }