fix some bug
This commit is contained in:
@@ -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
|
||||||
```
|
```
|
||||||
@@ -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
|
||||||
```
|
```
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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,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"
|
||||||
|
|||||||
Reference in New Issue
Block a user