From cd415e7bf41f817293dde6f427625cf608ee4157 Mon Sep 17 00:00:00 2001 From: TenderIronh Date: Sat, 25 Mar 2023 12:00:27 +0800 Subject: [PATCH] 3.6.11 --- README-ZH.md | 16 ++++++++++ README.md | 17 +++++++++++ core/handlepush.go | 2 +- core/overlay.go | 1 - core/p2papp.go | 6 ++++ core/p2pnetwork.go | 13 +++++---- core/p2ptunnel.go | 3 +- core/protocol.go | 2 +- core/util_freebsd.go | 69 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 core/util_freebsd.go diff --git a/README-ZH.md b/README-ZH.md index 7bb9b1c..037095a 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -101,6 +101,22 @@ cd到代码根目录,执行 ``` 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 近期计划: diff --git a/README.md b/README.md index 914625e..d9c1393 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,23 @@ cd root directory of the socure code and execute 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 Short-Term: 1. ~~Support IPv6.~~(100%) diff --git a/core/handlepush.go b/core/handlepush.go index 9447ed3..4b6fa81 100644 --- a/core/handlepush.go +++ b/core/handlepush.go @@ -176,7 +176,7 @@ func handlePush(pn *P2PNetwork, subType uint16, msg []byte) error { } pn.write(MsgReport, MsgReportApps, &req) case MsgPushReportLog: - gLog.Println(LvINFO, "MsgPushReportLog") + gLog.Println(LvDEBUG, "MsgPushReportLog") req := ReportLogReq{} err := json.Unmarshal(msg[openP2PHeaderSize:], &req) if err != nil { diff --git a/core/overlay.go b/core/overlay.go index 296575a..517951c 100644 --- a/core/overlay.go +++ b/core/overlay.go @@ -42,7 +42,6 @@ type overlayConn struct { func (oConn *overlayConn) run() { gLog.Printf(LvDEBUG, "%d overlayConn run start", oConn.id) defer gLog.Printf(LvDEBUG, "%d overlayConn run end", oConn.id) - oConn.running = true oConn.lastReadUDPTs = time.Now() buffer := make([]byte, ReadBuffLen+PaddingSize) // 16 bytes for padding reuseBuff := buffer[:ReadBuffLen] diff --git a/core/p2papp.go b/core/p2papp.go index ca3b021..6985195 100644 --- a/core/p2papp.go +++ b/core/p2papp.go @@ -72,6 +72,7 @@ func (app *p2pApp) listenTCP() error { rtid: app.rtid, appID: app.id, appKey: app.key, + running: true, } // pre-calc key bytes for encrypt if oConn.appKey != 0 { @@ -100,6 +101,8 @@ func (app *p2pApp) listenTCP() error { msgWithHead := append(relayHead.Bytes(), msg...) 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() } return nil @@ -152,6 +155,7 @@ func (app *p2pApp) listenUDP() error { rtid: app.rtid, appID: app.id, appKey: app.key, + running: true, } // calc key bytes for encrypt if oConn.appKey != 0 { @@ -180,6 +184,8 @@ func (app *p2pApp) listenUDP() error { msgWithHead := append(relayHead.Bytes(), msg...) 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() oConn.udpData <- dupData.Bytes() } diff --git a/core/p2pnetwork.go b/core/p2pnetwork.go index 3538945..276bb6b 100644 --- a/core/p2pnetwork.go +++ b/core/p2pnetwork.go @@ -77,7 +77,7 @@ func (pn *P2PNetwork) run() { case <-pn.restartCh: pn.online = false pn.wgReconnect.Wait() // wait read/autorunapp goroutine end - time.Sleep(NatTestTimeout) + time.Sleep(ClientAPITimeout) err := pn.init() if err != nil { gLog.Println(LvERROR, "P2PNetwork init error:", err) @@ -128,12 +128,13 @@ func (pn *P2PNetwork) runAll() { continue } - if time.Now().Add(-time.Minute * 15).After(config.retryTime) { // run normally 15min, reset retrynum - config.retryNum = 0 + if config.retryNum > 0 { // first time not show reconnect log + 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++ - gLog.Printf(LvINFO, "detect app %s disconnect, reconnecting the %d times...", config.AppName, config.retryNum) config.retryTime = time.Now() config.nextRetryTime = time.Now().Add(retryInterval) config.connectTime = time.Now() @@ -608,6 +609,7 @@ func (pn *P2PNetwork) write(mainType uint16, subType uint16, packet interface{}) defer pn.writeMtx.Unlock() if err = pn.conn.WriteMessage(websocket.BinaryMessage, msg); err != nil { gLog.Printf(LvERROR, "write msgType %d,%d error:%s", mainType, subType, err) + pn.conn.Close() } return err } @@ -650,6 +652,7 @@ func (pn *P2PNetwork) push(to string, subType uint16, packet interface{}) error defer pn.writeMtx.Unlock() if err = pn.conn.WriteMessage(websocket.BinaryMessage, pushMsg); err != nil { gLog.Printf(LvERROR, "push to %s error:%s", to, err) + pn.conn.Close() } return err } diff --git a/core/p2ptunnel.go b/core/p2ptunnel.go index 477659c..43acf9d 100644 --- a/core/p2ptunnel.go +++ b/core/p2ptunnel.go @@ -444,7 +444,7 @@ func (t *P2PTunnel) readLoop() { continue } 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) if !ok { // debug level, when overlay connection closed, always has some packet not found tunnel @@ -515,6 +515,7 @@ func (t *P2PTunnel) readLoop() { rtid: req.RelayTunnelID, appID: req.AppID, appKey: GetKey(req.AppID), + running: true, } if req.Protocol == "udp" { oConn.connUDP, err = net.DialUDP("udp", nil, &net.UDPAddr{IP: net.ParseIP(req.DstIP), Port: req.DstPort}) diff --git a/core/protocol.go b/core/protocol.go index 459d026..f133de1 100644 --- a/core/protocol.go +++ b/core/protocol.go @@ -10,7 +10,7 @@ import ( "time" ) -const OpenP2PVersion = "3.6.8" +const OpenP2PVersion = "3.6.11" const ProductName string = "openp2p" const LeastSupportVersion = "3.0.0" diff --git a/core/util_freebsd.go b/core/util_freebsd.go new file mode 100644 index 0000000..6e1c50b --- /dev/null +++ b/core/util_freebsd.go @@ -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() { +}