fix nil pointer and testing public ip

This commit is contained in:
TenderIronh
2021-12-10 17:20:17 +08:00
parent f12059d889
commit a28fc33b66
3 changed files with 37 additions and 3 deletions

29
nat.go
View File

@@ -39,6 +39,35 @@ func natTest(serverHost string, serverPort int, localPort int, echoPort int) (pu
}
natRsp := NatDetectRsp{}
err = json.Unmarshal(buffer[openP2PHeaderSize:nRead], &natRsp)
// testing for public ip
if echoPort != 0 {
for {
gLog.Printf(LevelINFO, "public ip test start %s:%d", natRsp.IP, echoPort)
conn, err := net.ListenUDP("udp", nil)
if err != nil {
break
}
defer conn.Close()
dst, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", natRsp.IP, echoPort))
if err != nil {
break
}
conn.WriteTo([]byte("echo"), dst)
buf := make([]byte, 1600)
// wait for echo testing
conn.SetReadDeadline(time.Now().Add(PublicIPEchoTimeout))
_, _, err = conn.ReadFromUDP(buf)
if err == nil {
gLog.Println(LevelINFO, "public ip:YES")
natRsp.IsPublicIP = 1
} else {
gLog.Println(LevelINFO, "public ip:NO")
}
break
}
}
return natRsp.IP, natRsp.IsPublicIP, natRsp.Port, nil
}

View File

@@ -24,6 +24,9 @@ type p2pApp struct {
}
func (app *p2pApp) isActive() bool {
if app.tunnel == nil {
return false
}
if app.rtid == 0 { // direct mode app heartbeat equals to tunnel heartbeat
return app.tunnel.isActive()
}
@@ -119,7 +122,9 @@ func (app *p2pApp) close() {
if app.listener != nil {
app.listener.Close()
}
app.tunnel.closeOverlayConns(app.id)
if app.tunnel != nil {
app.tunnel.closeOverlayConns(app.id)
}
app.wg.Wait()
}

View File

@@ -11,7 +11,7 @@ import (
"time"
)
const OpenP2PVersion = "0.96.0"
const OpenP2PVersion = "0.96.1"
const ProducnName string = "openp2p"
type openP2PHeader struct {
@@ -127,7 +127,7 @@ const (
AESKeySize = 16
MaxRetry = 10
RetryInterval = time.Second * 30
PublicIPEchoTimeout = time.Second * 5
PublicIPEchoTimeout = time.Second * 3
NatTestTimeout = time.Second * 10
)