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

UPnP Support

上级 3f503ffc
......@@ -54,24 +54,19 @@ type Ethereum struct {
nat NAT
}
func New(caps Caps) (*Ethereum, error) {
//db, err := ethdb.NewLDBDatabase()
func New(caps Caps, usePnp bool) (*Ethereum, error) {
db, err := ethdb.NewMemDatabase()
if err != nil {
return nil, err
}
/*
gateway := net.ParseIP("192.168.192.1")
nat := NewNatPMP(gateway)
port, err := nat.AddPortMapping("tcp", 30303, 30303, "", 60)
log.Println(port, err)
*/
nat, err := Discover()
if err != nil {
log.Println("UPnP failed", err)
return nil, err
var nat NAT
if usePnp {
nat, err = Discover()
if err != nil {
log.Println("UPnP failed", err)
return nil, err
}
}
ethutil.Config.Db = db
......@@ -229,14 +224,15 @@ func (s *Ethereum) Start() {
if err != nil {
log.Println("Connection listening disabled. Acting as client")
} else {
s.Addr = ln.Addr()
// Starting accepting connections
log.Println("Ready and accepting connections")
// Start the peer handler
go s.peerHandler(ln)
}
go s.upnpUpdateThread()
if s.nat != nil {
go s.upnpUpdateThread()
}
// Start the reaping processes
go s.ReapDeadPeerHandler()
......@@ -288,18 +284,18 @@ out:
for {
select {
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 {
log.Println("can't add UPnP port mapping:", err)
break out
}
if first && err == nil {
externalip, err := s.nat.GetExternalAddress()
_, err = s.nat.GetExternalAddress()
if err != nil {
log.Println("UPnP can't get external address:", err)
continue out
}
log.Println("Successfully bound via UPnP to", externalip, listenPort)
first = false
}
timer.Reset(time.Minute * 15)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册