Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd415e7bf4 |
@@ -101,6 +101,22 @@ cd到代码根目录,执行
|
|||||||
```
|
```
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
手动编译特定系统和架构
|
||||||
|
All GOOS values:
|
||||||
|
```
|
||||||
|
"aix", "android", "darwin", "dragonfly", "freebsd", "hurd", "illumos", "ios", "js", "linux", "nacl", "netbsd", "openbsd", "plan9", "solaris", "windows", "zos"
|
||||||
|
```
|
||||||
|
All GOARCH values:
|
||||||
|
```
|
||||||
|
"386", "amd64", "amd64p32", "arm", "arm64", "arm64be", "armbe", "loong64", "mips", "mips64", "mips64le", "mips64p32", "mips64p32le", "mipsle", "ppc", "ppc64", "ppc64le", "riscv", "riscv64", "s390", "s390x", "sparc", "sparc64", "wasm"
|
||||||
|
```
|
||||||
|
|
||||||
|
比如linux+amd64
|
||||||
|
```
|
||||||
|
export GOPROXY=https://goproxy.io,direct
|
||||||
|
go mod tidy
|
||||||
|
CGO_ENABLED=0 env GOOS=linux GOARCH=amd64 go build -o openp2p --ldflags '-s -w ' -gcflags '-l' -p 8 -installsuffix cgo ./cmd
|
||||||
|
```
|
||||||
|
|
||||||
## RoadMap
|
## RoadMap
|
||||||
近期计划:
|
近期计划:
|
||||||
|
|||||||
@@ -109,6 +109,23 @@ cd root directory of the socure code and execute
|
|||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
build specified os and arch.
|
||||||
|
All GOOS values:
|
||||||
|
```
|
||||||
|
"aix", "android", "darwin", "dragonfly", "freebsd", "hurd", "illumos", "ios", "js", "linux", "nacl", "netbsd", "openbsd", "plan9", "solaris", "windows", "zos"
|
||||||
|
```
|
||||||
|
All GOARCH values:
|
||||||
|
```
|
||||||
|
"386", "amd64", "amd64p32", "arm", "arm64", "arm64be", "armbe", "loong64", "mips", "mips64", "mips64le", "mips64p32", "mips64p32le", "mipsle", "ppc", "ppc64", "ppc64le", "riscv", "riscv64", "s390", "s390x", "sparc", "sparc64", "wasm"
|
||||||
|
```
|
||||||
|
|
||||||
|
For example linux+amd64
|
||||||
|
```
|
||||||
|
export GOPROXY=https://goproxy.io,direct
|
||||||
|
go mod tidy
|
||||||
|
CGO_ENABLED=0 env GOOS=linux GOARCH=amd64 go build -o openp2p --ldflags '-s -w ' -gcflags '-l' -p 8 -installsuffix cgo ./cmd
|
||||||
|
```
|
||||||
|
|
||||||
## RoadMap
|
## RoadMap
|
||||||
Short-Term:
|
Short-Term:
|
||||||
1. ~~Support IPv6.~~(100%)
|
1. ~~Support IPv6.~~(100%)
|
||||||
|
|||||||
+1
-1
@@ -176,7 +176,7 @@ func handlePush(pn *P2PNetwork, subType uint16, msg []byte) error {
|
|||||||
}
|
}
|
||||||
pn.write(MsgReport, MsgReportApps, &req)
|
pn.write(MsgReport, MsgReportApps, &req)
|
||||||
case MsgPushReportLog:
|
case MsgPushReportLog:
|
||||||
gLog.Println(LvINFO, "MsgPushReportLog")
|
gLog.Println(LvDEBUG, "MsgPushReportLog")
|
||||||
req := ReportLogReq{}
|
req := ReportLogReq{}
|
||||||
err := json.Unmarshal(msg[openP2PHeaderSize:], &req)
|
err := json.Unmarshal(msg[openP2PHeaderSize:], &req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ type overlayConn struct {
|
|||||||
func (oConn *overlayConn) run() {
|
func (oConn *overlayConn) run() {
|
||||||
gLog.Printf(LvDEBUG, "%d overlayConn run start", oConn.id)
|
gLog.Printf(LvDEBUG, "%d overlayConn run start", oConn.id)
|
||||||
defer gLog.Printf(LvDEBUG, "%d overlayConn run end", oConn.id)
|
defer gLog.Printf(LvDEBUG, "%d overlayConn run end", oConn.id)
|
||||||
oConn.running = true
|
|
||||||
oConn.lastReadUDPTs = time.Now()
|
oConn.lastReadUDPTs = time.Now()
|
||||||
buffer := make([]byte, ReadBuffLen+PaddingSize) // 16 bytes for padding
|
buffer := make([]byte, ReadBuffLen+PaddingSize) // 16 bytes for padding
|
||||||
reuseBuff := buffer[:ReadBuffLen]
|
reuseBuff := buffer[:ReadBuffLen]
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ func (app *p2pApp) listenTCP() error {
|
|||||||
rtid: app.rtid,
|
rtid: app.rtid,
|
||||||
appID: app.id,
|
appID: app.id,
|
||||||
appKey: app.key,
|
appKey: app.key,
|
||||||
|
running: true,
|
||||||
}
|
}
|
||||||
// pre-calc key bytes for encrypt
|
// pre-calc key bytes for encrypt
|
||||||
if oConn.appKey != 0 {
|
if oConn.appKey != 0 {
|
||||||
@@ -100,6 +101,8 @@ func (app *p2pApp) listenTCP() error {
|
|||||||
msgWithHead := append(relayHead.Bytes(), msg...)
|
msgWithHead := append(relayHead.Bytes(), msg...)
|
||||||
app.tunnel.conn.WriteBytes(MsgP2P, MsgRelayData, msgWithHead)
|
app.tunnel.conn.WriteBytes(MsgP2P, MsgRelayData, msgWithHead)
|
||||||
}
|
}
|
||||||
|
// TODO: wait OverlayConnectRsp instead of sleep
|
||||||
|
time.Sleep(time.Second) // waiting remote node connection ok
|
||||||
go oConn.run()
|
go oConn.run()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -152,6 +155,7 @@ func (app *p2pApp) listenUDP() error {
|
|||||||
rtid: app.rtid,
|
rtid: app.rtid,
|
||||||
appID: app.id,
|
appID: app.id,
|
||||||
appKey: app.key,
|
appKey: app.key,
|
||||||
|
running: true,
|
||||||
}
|
}
|
||||||
// calc key bytes for encrypt
|
// calc key bytes for encrypt
|
||||||
if oConn.appKey != 0 {
|
if oConn.appKey != 0 {
|
||||||
@@ -180,6 +184,8 @@ func (app *p2pApp) listenUDP() error {
|
|||||||
msgWithHead := append(relayHead.Bytes(), msg...)
|
msgWithHead := append(relayHead.Bytes(), msg...)
|
||||||
app.tunnel.conn.WriteBytes(MsgP2P, MsgRelayData, msgWithHead)
|
app.tunnel.conn.WriteBytes(MsgP2P, MsgRelayData, msgWithHead)
|
||||||
}
|
}
|
||||||
|
// TODO: wait OverlayConnectRsp instead of sleep
|
||||||
|
time.Sleep(time.Second) // waiting remote node connection ok
|
||||||
go oConn.run()
|
go oConn.run()
|
||||||
oConn.udpData <- dupData.Bytes()
|
oConn.udpData <- dupData.Bytes()
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-5
@@ -77,7 +77,7 @@ func (pn *P2PNetwork) run() {
|
|||||||
case <-pn.restartCh:
|
case <-pn.restartCh:
|
||||||
pn.online = false
|
pn.online = false
|
||||||
pn.wgReconnect.Wait() // wait read/autorunapp goroutine end
|
pn.wgReconnect.Wait() // wait read/autorunapp goroutine end
|
||||||
time.Sleep(NatTestTimeout)
|
time.Sleep(ClientAPITimeout)
|
||||||
err := pn.init()
|
err := pn.init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
gLog.Println(LvERROR, "P2PNetwork init error:", err)
|
gLog.Println(LvERROR, "P2PNetwork init error:", err)
|
||||||
@@ -128,12 +128,13 @@ func (pn *P2PNetwork) runAll() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if time.Now().Add(-time.Minute * 15).After(config.retryTime) { // run normally 15min, reset retrynum
|
if config.retryNum > 0 { // first time not show reconnect log
|
||||||
config.retryNum = 0
|
gLog.Printf(LvINFO, "detect app %s disconnect, reconnecting the %d times...", config.AppName, config.retryNum)
|
||||||
|
if time.Now().Add(-time.Minute * 15).After(config.retryTime) { // run normally 15min, reset retrynum
|
||||||
|
config.retryNum = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.retryNum++
|
config.retryNum++
|
||||||
gLog.Printf(LvINFO, "detect app %s disconnect, reconnecting the %d times...", config.AppName, config.retryNum)
|
|
||||||
config.retryTime = time.Now()
|
config.retryTime = time.Now()
|
||||||
config.nextRetryTime = time.Now().Add(retryInterval)
|
config.nextRetryTime = time.Now().Add(retryInterval)
|
||||||
config.connectTime = time.Now()
|
config.connectTime = time.Now()
|
||||||
@@ -608,6 +609,7 @@ func (pn *P2PNetwork) write(mainType uint16, subType uint16, packet interface{})
|
|||||||
defer pn.writeMtx.Unlock()
|
defer pn.writeMtx.Unlock()
|
||||||
if err = pn.conn.WriteMessage(websocket.BinaryMessage, msg); err != nil {
|
if err = pn.conn.WriteMessage(websocket.BinaryMessage, msg); err != nil {
|
||||||
gLog.Printf(LvERROR, "write msgType %d,%d error:%s", mainType, subType, err)
|
gLog.Printf(LvERROR, "write msgType %d,%d error:%s", mainType, subType, err)
|
||||||
|
pn.conn.Close()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -650,6 +652,7 @@ func (pn *P2PNetwork) push(to string, subType uint16, packet interface{}) error
|
|||||||
defer pn.writeMtx.Unlock()
|
defer pn.writeMtx.Unlock()
|
||||||
if err = pn.conn.WriteMessage(websocket.BinaryMessage, pushMsg); err != nil {
|
if err = pn.conn.WriteMessage(websocket.BinaryMessage, pushMsg); err != nil {
|
||||||
gLog.Printf(LvERROR, "push to %s error:%s", to, err)
|
gLog.Printf(LvERROR, "push to %s error:%s", to, err)
|
||||||
|
pn.conn.Close()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -444,7 +444,7 @@ func (t *P2PTunnel) readLoop() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
overlayID := binary.LittleEndian.Uint64(body[:8])
|
overlayID := binary.LittleEndian.Uint64(body[:8])
|
||||||
gLog.Printf(LvDEBUG, "%d tunnel read overlay data %d", t.id, overlayID)
|
gLog.Printf(LvDEBUG, "%d tunnel read overlay data %d bodylen=%d", t.id, overlayID, head.DataLen)
|
||||||
s, ok := t.overlayConns.Load(overlayID)
|
s, ok := t.overlayConns.Load(overlayID)
|
||||||
if !ok {
|
if !ok {
|
||||||
// debug level, when overlay connection closed, always has some packet not found tunnel
|
// debug level, when overlay connection closed, always has some packet not found tunnel
|
||||||
@@ -515,6 +515,7 @@ func (t *P2PTunnel) readLoop() {
|
|||||||
rtid: req.RelayTunnelID,
|
rtid: req.RelayTunnelID,
|
||||||
appID: req.AppID,
|
appID: req.AppID,
|
||||||
appKey: GetKey(req.AppID),
|
appKey: GetKey(req.AppID),
|
||||||
|
running: true,
|
||||||
}
|
}
|
||||||
if req.Protocol == "udp" {
|
if req.Protocol == "udp" {
|
||||||
oConn.connUDP, err = net.DialUDP("udp", nil, &net.UDPAddr{IP: net.ParseIP(req.DstIP), Port: req.DstPort})
|
oConn.connUDP, err = net.DialUDP("udp", nil, &net.UDPAddr{IP: net.ParseIP(req.DstIP), Port: req.DstPort})
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const OpenP2PVersion = "3.6.8"
|
const OpenP2PVersion = "3.6.11"
|
||||||
const ProductName string = "openp2p"
|
const ProductName string = "openp2p"
|
||||||
const LeastSupportVersion = "3.0.0"
|
const LeastSupportVersion = "3.0.0"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package openp2p
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultInstallPath = "/usr/local/openp2p"
|
||||||
|
defaultBinName = "openp2p"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getOsName() (osName string) {
|
||||||
|
var sysnamePath string
|
||||||
|
sysnamePath = "/etc/redhat-release"
|
||||||
|
_, err := os.Stat(sysnamePath)
|
||||||
|
if err != nil && os.IsNotExist(err) {
|
||||||
|
str := "PRETTY_NAME="
|
||||||
|
f, err := os.Open("/etc/os-release")
|
||||||
|
if err == nil {
|
||||||
|
buf := bufio.NewReader(f)
|
||||||
|
for {
|
||||||
|
line, err := buf.ReadString('\n')
|
||||||
|
if err == nil {
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
|
pos := strings.Count(line, str)
|
||||||
|
if pos > 0 {
|
||||||
|
len1 := len([]rune(str)) + 1
|
||||||
|
rs := []rune(line)
|
||||||
|
osName = string(rs[len1 : (len(rs))-1])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buff, err := ioutil.ReadFile(sysnamePath)
|
||||||
|
if err == nil {
|
||||||
|
osName = string(bytes.TrimSpace(buff))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if osName == "" {
|
||||||
|
osName = "FreeBSD"
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func setRLimit() error {
|
||||||
|
var limit syscall.Rlimit
|
||||||
|
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
limit.Max = 65536
|
||||||
|
limit.Cur = limit.Max
|
||||||
|
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setFirewall() {
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user