From f9b5073e0d292527e87895c2b5ad5c60f9cb0955 Mon Sep 17 00:00:00 2001 From: TenderIronh Date: Sun, 29 May 2022 15:48:56 +0800 Subject: [PATCH] fix some bug --- USAGE-ZH.md | 5 +++++ USAGE.md | 5 +++++ config.go | 6 ++---- go.mod | 2 +- handlepush.go | 2 +- nat.go | 4 ++-- p2pnetwork.go | 8 ++++---- p2ptunnel.go | 14 +++++++------- underlay_tcp.go | 6 +++--- upnp.go | 6 +----- 10 files changed, 31 insertions(+), 27 deletions(-) diff --git a/USAGE-ZH.md b/USAGE-ZH.md index dd0b453..df7fe67 100644 --- a/USAGE-ZH.md +++ b/USAGE-ZH.md @@ -91,4 +91,9 @@ firewall-cmd --state ## 卸载 ``` ./openp2p uninstall +# 已安装时 +# windows +C:\Program Files\OpenP2P\openp2p.exe uninstall +# linux,macos +sudo /usr/local/openp2p/openp2p uninstall ``` \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index 89a6994..78194da 100644 --- a/USAGE.md +++ b/USAGE.md @@ -93,4 +93,9 @@ firewall-cmd --state ## Uninstall ``` ./openp2p uninstall +# when already installed +# windows +C:\Program Files\OpenP2P\openp2p.exe uninstall +# linux,macos +sudo /usr/local/openp2p/openp2p uninstall ``` \ No newline at end of file diff --git a/config.go b/config.go index 4984f9b..ad87755 100644 --- a/config.go +++ b/config.go @@ -11,8 +11,6 @@ import ( var gConf Config -const IntValueNotSet int = -99999999 - type AppConfig struct { // required AppName string @@ -28,7 +26,7 @@ type AppConfig struct { peerToken uint64 peerNatType int hasIPv4 int - IPv6 string + peerIPv6 string hasUPNPorNATPMP int peerIP string peerConeNatPort int @@ -162,7 +160,7 @@ type NetworkConfig struct { publicIP string natType int hasIPv4 int - IPv6 string + publicIPv6 string // must lowwer-case not save json hasUPNPorNATPMP int ShareBandwidth int // server info diff --git a/go.mod b/go.mod index e9656c5..d99d927 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.18 require ( github.com/gorilla/websocket v1.4.2 github.com/kardianos/service v1.2.0 - github.com/libp2p/go-reuseport v0.2.0 github.com/lucas-clemente/quic-go v0.27.0 + github.com/openp2p-cn/go-reuseport v0.3.2 golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 ) diff --git a/handlepush.go b/handlepush.go index 4162019..1f75a0c 100644 --- a/handlepush.go +++ b/handlepush.go @@ -50,7 +50,7 @@ func handlePush(pn *P2PNetwork, subType uint16, msg []byte) error { config.PeerNode = req.From config.peerVersion = req.Version config.fromToken = req.Token - config.IPv6 = req.IPv6 + config.peerIPv6 = req.IPv6 config.hasIPv4 = req.HasIPv4 config.hasUPNPorNATPMP = req.HasUPNPorNATPMP config.linkMode = req.LinkMode diff --git a/nat.go b/nat.go index db2575d..179a9d5 100644 --- a/nat.go +++ b/nat.go @@ -10,7 +10,7 @@ import ( "strings" "time" - reuse "github.com/libp2p/go-reuseport" + reuse "github.com/openp2p-cn/go-reuseport" ) var echoConn *net.UDPConn @@ -22,7 +22,7 @@ func natTCP(serverHost string, serverPort int, localPort int) (publicIP string, // Port: localPort, // }, // } - conn, err := reuse.Dial("tcp4", fmt.Sprintf("%s:%d", "0.0.0.0", localPort), fmt.Sprintf("%s:%d", serverHost, serverPort)) + conn, err := reuse.DialTimeout("tcp4", fmt.Sprintf("%s:%d", "0.0.0.0", localPort), fmt.Sprintf("%s:%d", serverHost, serverPort), time.Second*5) // conn, err := net.Dial("tcp4", fmt.Sprintf("%s:%d", serverHost, serverPort)) if err != nil { fmt.Printf("Dial tcp4 %s:%d error:%s", serverHost, serverPort, err) diff --git a/p2pnetwork.go b/p2pnetwork.go index 811c3eb..94ccf69 100644 --- a/p2pnetwork.go +++ b/p2pnetwork.go @@ -370,7 +370,7 @@ func (pn *P2PNetwork) addDirectTunnel(config AppConfig, tid uint64) (*P2PTunnel, } err := ErrorHandshake // try TCP6 - if IsIPv6(t.config.IPv6) && IsIPv6(t.pn.config.IPv6) { + if IsIPv6(t.config.peerIPv6) && IsIPv6(t.pn.config.publicIPv6) { gLog.Println(LvINFO, "try TCP6") t.config.linkMode = LinkModeTCP6 t.config.isUnderlayServer = 0 @@ -501,7 +501,7 @@ func (pn *P2PNetwork) init() error { gLog.Println(LvDEBUG, "netinfo:", rsp) if rsp != nil && rsp.Country != "" { if IsIPv6(rsp.IP.String()) { - pn.config.IPv6 = rsp.IP.String() + pn.config.publicIPv6 = rsp.IP.String() req.IPv6 = rsp.IP.String() } req.NetInfo = *rsp @@ -685,7 +685,7 @@ func (pn *P2PNetwork) updateAppHeartbeat(appID uint64) { } func (pn *P2PNetwork) refreshIPv6() { - if !IsIPv6(pn.config.IPv6) { // not support ipv6, not refresh + if !IsIPv6(pn.config.publicIPv6) { // not support ipv6, not refresh return } client := &http.Client{Timeout: time.Second * 10} @@ -701,5 +701,5 @@ func (pn *P2PNetwork) refreshIPv6() { gLog.Println(LvINFO, "netInfo error:", err, n) return } - pn.config.IPv6 = string(buf[:n]) + pn.config.publicIPv6 = string(buf[:n]) } diff --git a/p2ptunnel.go b/p2ptunnel.go index c856364..40b196b 100644 --- a/p2ptunnel.go +++ b/p2ptunnel.go @@ -53,7 +53,7 @@ func (t *P2PTunnel) requestPeerInfo() error { t.config.peerVersion = rsp.Version t.config.hasIPv4 = rsp.HasIPv4 t.config.peerIP = rsp.IPv4 - t.config.IPv6 = rsp.IPv6 + t.config.peerIPv6 = rsp.IPv6 t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP t.config.peerNatType = rsp.NatType /// @@ -100,7 +100,7 @@ func (t *P2PTunnel) connect() error { ConeNatPort: t.coneNatPort, NatType: t.pn.config.natType, HasIPv4: t.pn.config.hasIPv4, - IPv6: t.pn.config.IPv6, + IPv6: t.pn.config.publicIPv6, HasUPNPorNATPMP: t.pn.config.hasUPNPorNATPMP, ID: t.id, AppKey: appKey, @@ -128,7 +128,7 @@ func (t *P2PTunnel) connect() error { } t.config.peerNatType = rsp.NatType t.config.hasIPv4 = rsp.HasIPv4 - t.config.IPv6 = rsp.IPv6 + t.config.peerIPv6 = rsp.IPv6 t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP t.config.peerVersion = rsp.Version t.config.peerConeNatPort = rsp.ConeNatPort @@ -390,10 +390,10 @@ func (t *P2PTunnel) connectUnderlayTCP6() (c underlay, err error) { //else t.pn.read(t.config.PeerNode, MsgPush, MsgPushUnderlayConnect, time.Second*5) - gLog.Println(LvDEBUG, "TCP6 dial to ", t.config.IPv6) - qConn, err = dialTCP6(t.config.IPv6, t.config.peerConeNatPort) + gLog.Println(LvDEBUG, "TCP6 dial to ", t.config.peerIPv6) + qConn, err = dialTCP6(t.config.peerIPv6, t.config.peerConeNatPort) if err != nil { - return nil, fmt.Errorf("TCP6 dial to %s:%d error:%s", t.config.IPv6, t.config.peerConeNatPort, err) + return nil, fmt.Errorf("TCP6 dial to %s:%d error:%s", t.config.peerIPv6, t.config.peerConeNatPort, err) } handshakeBegin := time.Now() qConn.WriteBytes(MsgP2P, MsgTunnelHandshake, []byte("OpenP2P,hello")) @@ -594,7 +594,7 @@ func (t *P2PTunnel) listen() error { // only private node set ipv6 if t.config.fromToken == t.pn.config.Token { t.pn.refreshIPv6() - rsp.IPv6 = t.pn.config.IPv6 + rsp.IPv6 = t.pn.config.publicIPv6 } t.pn.push(t.config.PeerNode, MsgPushConnectRsp, rsp) diff --git a/underlay_tcp.go b/underlay_tcp.go index 5bd0f29..8df5df9 100644 --- a/underlay_tcp.go +++ b/underlay_tcp.go @@ -8,7 +8,7 @@ import ( "sync" "time" - reuse "github.com/libp2p/go-reuseport" + reuse "github.com/openp2p-cn/go-reuseport" ) type underlayTCP struct { @@ -69,7 +69,7 @@ func (conn *underlayTCP) Close() error { func listenTCP(host string, port int, localPort int, mode string) (*underlayTCP, error) { if mode == LinkModeTCPPunch { - c, err := reuse.Dial("tcp", fmt.Sprintf("0.0.0.0:%d", localPort), fmt.Sprintf("%s:%d", host, port)) // TODO: timeout + c, err := reuse.DialTimeout("tcp", fmt.Sprintf("0.0.0.0:%d", localPort), fmt.Sprintf("%s:%d", host, port), SymmetricHandshakeAckTimeout) // TODO: timeout if err != nil { gLog.Println(LvDEBUG, "send tcp punch: ", err) return nil, err @@ -94,7 +94,7 @@ func dialTCP(host string, port int, localPort int, mode string) (*underlayTCP, e var c net.Conn var err error if mode == LinkModeTCPPunch { - c, err = reuse.Dial("tcp", fmt.Sprintf("0.0.0.0:%d", localPort), fmt.Sprintf("%s:%d", host, port)) + c, err = reuse.DialTimeout("tcp", fmt.Sprintf("0.0.0.0:%d", localPort), fmt.Sprintf("%s:%d", host, port), SymmetricHandshakeAckTimeout) } else { c, err = net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, port), SymmetricHandshakeAckTimeout) } diff --git a/upnp.go b/upnp.go index 7b7aa3e..9b7a0f1 100644 --- a/upnp.go +++ b/upnp.go @@ -1,12 +1,8 @@ /* -Taken from taipei-torrent - -Just enough UPnP to be able to forward ports +Taken from taipei-torrent And fix some bugs */ package main -// BUG(jae): TODO: use syscalls to get actual ourIP. http://pastebin.com/9exZG4rh - import ( "bytes" "encoding/xml"