提交 48b41862 编写于 作者: O obscuren

UPnP Support

上级 3f503ffc
...@@ -54,24 +54,19 @@ type Ethereum struct { ...@@ -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() { ...@@ -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: ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册