fix some bug

This commit is contained in:
TenderIronh
2022-05-29 15:48:56 +08:00
parent 9ea467c7b3
commit f9b5073e0d
10 changed files with 31 additions and 27 deletions
+5
View File
@@ -91,4 +91,9 @@ firewall-cmd --state
## 卸载 ## 卸载
``` ```
./openp2p uninstall ./openp2p uninstall
# 已安装时
# windows
C:\Program Files\OpenP2P\openp2p.exe uninstall
# linux,macos
sudo /usr/local/openp2p/openp2p uninstall
``` ```
+5
View File
@@ -93,4 +93,9 @@ firewall-cmd --state
## Uninstall ## Uninstall
``` ```
./openp2p uninstall ./openp2p uninstall
# when already installed
# windows
C:\Program Files\OpenP2P\openp2p.exe uninstall
# linux,macos
sudo /usr/local/openp2p/openp2p uninstall
``` ```
+2 -4
View File
@@ -11,8 +11,6 @@ import (
var gConf Config var gConf Config
const IntValueNotSet int = -99999999
type AppConfig struct { type AppConfig struct {
// required // required
AppName string AppName string
@@ -28,7 +26,7 @@ type AppConfig struct {
peerToken uint64 peerToken uint64
peerNatType int peerNatType int
hasIPv4 int hasIPv4 int
IPv6 string peerIPv6 string
hasUPNPorNATPMP int hasUPNPorNATPMP int
peerIP string peerIP string
peerConeNatPort int peerConeNatPort int
@@ -162,7 +160,7 @@ type NetworkConfig struct {
publicIP string publicIP string
natType int natType int
hasIPv4 int hasIPv4 int
IPv6 string publicIPv6 string // must lowwer-case not save json
hasUPNPorNATPMP int hasUPNPorNATPMP int
ShareBandwidth int ShareBandwidth int
// server info // server info
+1 -1
View File
@@ -5,8 +5,8 @@ go 1.18
require ( require (
github.com/gorilla/websocket v1.4.2 github.com/gorilla/websocket v1.4.2
github.com/kardianos/service v1.2.0 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/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 golang.org/x/sys v0.0.0-20220422013727-9388b58f7150
) )
+1 -1
View File
@@ -50,7 +50,7 @@ func handlePush(pn *P2PNetwork, subType uint16, msg []byte) error {
config.PeerNode = req.From config.PeerNode = req.From
config.peerVersion = req.Version config.peerVersion = req.Version
config.fromToken = req.Token config.fromToken = req.Token
config.IPv6 = req.IPv6 config.peerIPv6 = req.IPv6
config.hasIPv4 = req.HasIPv4 config.hasIPv4 = req.HasIPv4
config.hasUPNPorNATPMP = req.HasUPNPorNATPMP config.hasUPNPorNATPMP = req.HasUPNPorNATPMP
config.linkMode = req.LinkMode config.linkMode = req.LinkMode
+2 -2
View File
@@ -10,7 +10,7 @@ import (
"strings" "strings"
"time" "time"
reuse "github.com/libp2p/go-reuseport" reuse "github.com/openp2p-cn/go-reuseport"
) )
var echoConn *net.UDPConn var echoConn *net.UDPConn
@@ -22,7 +22,7 @@ func natTCP(serverHost string, serverPort int, localPort int) (publicIP string,
// Port: localPort, // 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)) // conn, err := net.Dial("tcp4", fmt.Sprintf("%s:%d", serverHost, serverPort))
if err != nil { if err != nil {
fmt.Printf("Dial tcp4 %s:%d error:%s", serverHost, serverPort, err) fmt.Printf("Dial tcp4 %s:%d error:%s", serverHost, serverPort, err)
+4 -4
View File
@@ -370,7 +370,7 @@ func (pn *P2PNetwork) addDirectTunnel(config AppConfig, tid uint64) (*P2PTunnel,
} }
err := ErrorHandshake err := ErrorHandshake
// try TCP6 // 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") gLog.Println(LvINFO, "try TCP6")
t.config.linkMode = LinkModeTCP6 t.config.linkMode = LinkModeTCP6
t.config.isUnderlayServer = 0 t.config.isUnderlayServer = 0
@@ -501,7 +501,7 @@ func (pn *P2PNetwork) init() error {
gLog.Println(LvDEBUG, "netinfo:", rsp) gLog.Println(LvDEBUG, "netinfo:", rsp)
if rsp != nil && rsp.Country != "" { if rsp != nil && rsp.Country != "" {
if IsIPv6(rsp.IP.String()) { if IsIPv6(rsp.IP.String()) {
pn.config.IPv6 = rsp.IP.String() pn.config.publicIPv6 = rsp.IP.String()
req.IPv6 = rsp.IP.String() req.IPv6 = rsp.IP.String()
} }
req.NetInfo = *rsp req.NetInfo = *rsp
@@ -685,7 +685,7 @@ func (pn *P2PNetwork) updateAppHeartbeat(appID uint64) {
} }
func (pn *P2PNetwork) refreshIPv6() { 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 return
} }
client := &http.Client{Timeout: time.Second * 10} client := &http.Client{Timeout: time.Second * 10}
@@ -701,5 +701,5 @@ func (pn *P2PNetwork) refreshIPv6() {
gLog.Println(LvINFO, "netInfo error:", err, n) gLog.Println(LvINFO, "netInfo error:", err, n)
return return
} }
pn.config.IPv6 = string(buf[:n]) pn.config.publicIPv6 = string(buf[:n])
} }
+7 -7
View File
@@ -53,7 +53,7 @@ func (t *P2PTunnel) requestPeerInfo() error {
t.config.peerVersion = rsp.Version t.config.peerVersion = rsp.Version
t.config.hasIPv4 = rsp.HasIPv4 t.config.hasIPv4 = rsp.HasIPv4
t.config.peerIP = rsp.IPv4 t.config.peerIP = rsp.IPv4
t.config.IPv6 = rsp.IPv6 t.config.peerIPv6 = rsp.IPv6
t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP
t.config.peerNatType = rsp.NatType t.config.peerNatType = rsp.NatType
/// ///
@@ -100,7 +100,7 @@ func (t *P2PTunnel) connect() error {
ConeNatPort: t.coneNatPort, ConeNatPort: t.coneNatPort,
NatType: t.pn.config.natType, NatType: t.pn.config.natType,
HasIPv4: t.pn.config.hasIPv4, HasIPv4: t.pn.config.hasIPv4,
IPv6: t.pn.config.IPv6, IPv6: t.pn.config.publicIPv6,
HasUPNPorNATPMP: t.pn.config.hasUPNPorNATPMP, HasUPNPorNATPMP: t.pn.config.hasUPNPorNATPMP,
ID: t.id, ID: t.id,
AppKey: appKey, AppKey: appKey,
@@ -128,7 +128,7 @@ func (t *P2PTunnel) connect() error {
} }
t.config.peerNatType = rsp.NatType t.config.peerNatType = rsp.NatType
t.config.hasIPv4 = rsp.HasIPv4 t.config.hasIPv4 = rsp.HasIPv4
t.config.IPv6 = rsp.IPv6 t.config.peerIPv6 = rsp.IPv6
t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP t.config.hasUPNPorNATPMP = rsp.HasUPNPorNATPMP
t.config.peerVersion = rsp.Version t.config.peerVersion = rsp.Version
t.config.peerConeNatPort = rsp.ConeNatPort t.config.peerConeNatPort = rsp.ConeNatPort
@@ -390,10 +390,10 @@ func (t *P2PTunnel) connectUnderlayTCP6() (c underlay, err error) {
//else //else
t.pn.read(t.config.PeerNode, MsgPush, MsgPushUnderlayConnect, time.Second*5) t.pn.read(t.config.PeerNode, MsgPush, MsgPushUnderlayConnect, time.Second*5)
gLog.Println(LvDEBUG, "TCP6 dial to ", t.config.IPv6) gLog.Println(LvDEBUG, "TCP6 dial to ", t.config.peerIPv6)
qConn, err = dialTCP6(t.config.IPv6, t.config.peerConeNatPort) qConn, err = dialTCP6(t.config.peerIPv6, t.config.peerConeNatPort)
if err != nil { 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() handshakeBegin := time.Now()
qConn.WriteBytes(MsgP2P, MsgTunnelHandshake, []byte("OpenP2P,hello")) qConn.WriteBytes(MsgP2P, MsgTunnelHandshake, []byte("OpenP2P,hello"))
@@ -594,7 +594,7 @@ func (t *P2PTunnel) listen() error {
// only private node set ipv6 // only private node set ipv6
if t.config.fromToken == t.pn.config.Token { if t.config.fromToken == t.pn.config.Token {
t.pn.refreshIPv6() t.pn.refreshIPv6()
rsp.IPv6 = t.pn.config.IPv6 rsp.IPv6 = t.pn.config.publicIPv6
} }
t.pn.push(t.config.PeerNode, MsgPushConnectRsp, rsp) t.pn.push(t.config.PeerNode, MsgPushConnectRsp, rsp)
+3 -3
View File
@@ -8,7 +8,7 @@ import (
"sync" "sync"
"time" "time"
reuse "github.com/libp2p/go-reuseport" reuse "github.com/openp2p-cn/go-reuseport"
) )
type underlayTCP struct { type underlayTCP struct {
@@ -69,7 +69,7 @@ func (conn *underlayTCP) Close() error {
func listenTCP(host string, port int, localPort int, mode string) (*underlayTCP, error) { func listenTCP(host string, port int, localPort int, mode string) (*underlayTCP, error) {
if mode == LinkModeTCPPunch { 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 { if err != nil {
gLog.Println(LvDEBUG, "send tcp punch: ", err) gLog.Println(LvDEBUG, "send tcp punch: ", err)
return nil, 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 c net.Conn
var err error var err error
if mode == LinkModeTCPPunch { 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 { } else {
c, err = net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, port), SymmetricHandshakeAckTimeout) c, err = net.DialTimeout("tcp", fmt.Sprintf("%s:%d", host, port), SymmetricHandshakeAckTimeout)
} }
+1 -5
View File
@@ -1,12 +1,8 @@
/* /*
Taken from taipei-torrent Taken from taipei-torrent And fix some bugs
Just enough UPnP to be able to forward ports
*/ */
package main package main
// BUG(jae): TODO: use syscalls to get actual ourIP. http://pastebin.com/9exZG4rh
import ( import (
"bytes" "bytes"
"encoding/xml" "encoding/xml"