UPnP Support
This commit is contained in:
parent
3f503ffc7f
commit
48b41862ef
32
ethereum.go
32
ethereum.go
|
@ -54,24 +54,19 @@ type Ethereum struct {
|
||||||
nat NAT
|
nat NAT
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(caps Caps) (*Ethereum, error) {
|
func New(caps Caps, usePnp bool) (*Ethereum, error) {
|
||||||
//db, err := ethdb.NewLDBDatabase()
|
|
||||||
db, err := ethdb.NewMemDatabase()
|
db, err := ethdb.NewMemDatabase()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
var nat NAT
|
||||||
gateway := net.ParseIP("192.168.192.1")
|
if usePnp {
|
||||||
nat := NewNatPMP(gateway)
|
nat, err = Discover()
|
||||||
port, err := nat.AddPortMapping("tcp", 30303, 30303, "", 60)
|
if err != nil {
|
||||||
log.Println(port, err)
|
log.Println("UPnP failed", err)
|
||||||
*/
|
return nil, err
|
||||||
|
}
|
||||||
nat, err := Discover()
|
|
||||||
if err != nil {
|
|
||||||
log.Println("UPnP failed", err)
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ethutil.Config.Db = db
|
ethutil.Config.Db = db
|
||||||
|
@ -229,14 +224,15 @@ func (s *Ethereum) Start() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Connection listening disabled. Acting as client")
|
log.Println("Connection listening disabled. Acting as client")
|
||||||
} else {
|
} else {
|
||||||
s.Addr = ln.Addr()
|
|
||||||
// Starting accepting connections
|
// Starting accepting connections
|
||||||
log.Println("Ready and accepting connections")
|
log.Println("Ready and accepting connections")
|
||||||
// Start the peer handler
|
// Start the peer handler
|
||||||
go s.peerHandler(ln)
|
go s.peerHandler(ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
go s.upnpUpdateThread()
|
if s.nat != nil {
|
||||||
|
go s.upnpUpdateThread()
|
||||||
|
}
|
||||||
|
|
||||||
// Start the reaping processes
|
// Start the reaping processes
|
||||||
go s.ReapDeadPeerHandler()
|
go s.ReapDeadPeerHandler()
|
||||||
|
@ -288,18 +284,18 @@ out:
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-timer.C:
|
case <-timer.C:
|
||||||
listenPort, err := s.nat.AddPortMapping("TCP", int(lport), int(lport), "eth listen port", 20*60)
|
var err error
|
||||||
|
_, err = s.nat.AddPortMapping("TCP", int(lport), int(lport), "eth listen port", 20*60)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("can't add UPnP port mapping:", err)
|
log.Println("can't add UPnP port mapping:", err)
|
||||||
break out
|
break out
|
||||||
}
|
}
|
||||||
if first && err == nil {
|
if first && err == nil {
|
||||||
externalip, err := s.nat.GetExternalAddress()
|
_, err = s.nat.GetExternalAddress()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("UPnP can't get external address:", err)
|
log.Println("UPnP can't get external address:", err)
|
||||||
continue out
|
continue out
|
||||||
}
|
}
|
||||||
log.Println("Successfully bound via UPnP to", externalip, listenPort)
|
|
||||||
first = false
|
first = false
|
||||||
}
|
}
|
||||||
timer.Reset(time.Minute * 15)
|
timer.Reset(time.Minute * 15)
|
||||||
|
|
Loading…
Reference in New Issue