|
@@ -1,7 +1,10 @@
|
|
|
package p2p
|
|
package p2p
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "blockchain-go/common/gopool"
|
|
|
"blockchain-go/p2p/enode"
|
|
"blockchain-go/p2p/enode"
|
|
|
|
|
+ "blockchain-go/p2p/enr"
|
|
|
|
|
+ "blockchain-go/p2p/nat"
|
|
|
"errors"
|
|
"errors"
|
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
|
"net"
|
|
"net"
|
|
@@ -28,7 +31,7 @@ type Server struct {
|
|
|
|
|
|
|
|
listener net.Listener
|
|
listener net.Listener
|
|
|
ourHandshake *protoHandshake
|
|
ourHandshake *protoHandshake
|
|
|
- //loopWG sync.WaitGroup // loop, listenLoop
|
|
|
|
|
|
|
+ loopWG sync.WaitGroup // loop, listenLoop
|
|
|
//peerFeed event.Feed
|
|
//peerFeed event.Feed
|
|
|
//log log.Logger
|
|
//log log.Logger
|
|
|
|
|
|
|
@@ -40,7 +43,7 @@ type Server struct {
|
|
|
//dialsched *dialScheduler
|
|
//dialsched *dialScheduler
|
|
|
|
|
|
|
|
// Channels into the run loop.
|
|
// Channels into the run loop.
|
|
|
- //quit chan struct{}
|
|
|
|
|
|
|
+ quit chan struct{}
|
|
|
//addtrusted chan *enode.Node
|
|
//addtrusted chan *enode.Node
|
|
|
//removetrusted chan *enode.Node
|
|
//removetrusted chan *enode.Node
|
|
|
//peerOp chan peerOpFunc
|
|
//peerOp chan peerOpFunc
|
|
@@ -96,6 +99,20 @@ func (server *Server) setupListening() (err error) {
|
|
|
server.listener = listener
|
|
server.listener = listener
|
|
|
server.ListenAddr = listener.Addr().String()
|
|
server.ListenAddr = listener.Addr().String()
|
|
|
|
|
|
|
|
|
|
+ if tcp, ok := listener.Addr().(*net.TCPAddr); ok {
|
|
|
|
|
+ server.localnode.Set(enr.TCP(tcp.Port))
|
|
|
|
|
+
|
|
|
|
|
+ if !tcp.IP.IsLoopback() && server.NAT != nil {
|
|
|
|
|
+ server.loopWG.Add(1)
|
|
|
|
|
+
|
|
|
|
|
+ gopool.Submit(func() {
|
|
|
|
|
+ nat.Map(server.NAT, server.quit, "tcp", tcp.Port, tcp.Port, "ethereum p2p")
|
|
|
|
|
+
|
|
|
|
|
+ server.loopWG.Done()
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|