Compare commits

...
1 Commits
Author SHA1 Message Date
TenderIronh 3653ec19cd 1.2.0 2022-02-22 15:50:30 +08:00
16 changed files with 118 additions and 91 deletions
-5
View File
@@ -40,11 +40,6 @@ P2P直连可以让你的设备跑满带宽。不论你的设备在任何网络
![image](/doc/images/install.png) ![image](/doc/images/install.png)
Windows默认会阻止没有花钱买它家证书签名过的程序,选择“仍要运行”即可。
![image](/doc/images/win10warn.png)
![image](/doc/images/stillrun.png)
### 3.新建P2P应用 ### 3.新建P2P应用
![image](/doc/images/devices.png) ![image](/doc/images/devices.png)
-5
View File
@@ -43,11 +43,6 @@ Download on local and remote computers and double-click to run, one-click instal
![image](/doc/images/install_en.png) ![image](/doc/images/install_en.png)
By default, Windows will block programs that have not been signed by the Microsoft's certificate, and you can select "Run anyway".
![image](/doc/images/win10warn_en.png)
![image](/doc/images/stillrun_en.png)
### 3.New P2PApp ### 3.New P2PApp
![image](/doc/images/devices_en.png) ![image](/doc/images/devices_en.png)
+6
View File
@@ -17,6 +17,12 @@
>* -sharebandwidth: 作为共享节点时提供带宽,默认10mbps. 如果是光纤大带宽,设置越大效果越好. 0表示不共享,该节点只在私有的P2P网络使用。不加入共享的P2P网络,这样也意味着无法使用别人的共享节点 >* -sharebandwidth: 作为共享节点时提供带宽,默认10mbps. 如果是光纤大带宽,设置越大效果越好. 0表示不共享,该节点只在私有的P2P网络使用。不加入共享的P2P网络,这样也意味着无法使用别人的共享节点
>* -loglevel: 需要查看更多调试日志,设置0;默认是1 >* -loglevel: 需要查看更多调试日志,设置0;默认是1
### 在docker容器里运行openp2p
我们暂时还没提供官方docker镜像,你可以在随便一个容器里运行
```
nohup ./openp2p -d -node OFFICEPC1 -token TOKEN &
#这里由于一般的镜像都精简过,install系统服务会失败,所以使用直接daemon模式后台运行
```
## 连接 ## 连接
``` ```
./openp2p -d -node HOMEPC123 -token TOKEN -appname OfficeWindowsRemote -peernode OFFICEPC1 -dstip 127.0.0.1 -dstport 3389 -srcport 23389 ./openp2p -d -node HOMEPC123 -token TOKEN -appname OfficeWindowsRemote -peernode OFFICEPC1 -dstip 127.0.0.1 -dstport 3389 -srcport 23389
+7
View File
@@ -19,6 +19,13 @@ Or
>* -sharebandwidth: Provides bandwidth when used as a shared node, the default is 10mbps. If it is a large bandwidth of optical fiber, the larger the setting, the better the effect. 0 means not shared, the node is only used in a private P2P network. Do not join the shared P2P network, which also means that you CAN NOT use other peoples shared nodes >* -sharebandwidth: Provides bandwidth when used as a shared node, the default is 10mbps. If it is a large bandwidth of optical fiber, the larger the setting, the better the effect. 0 means not shared, the node is only used in a private P2P network. Do not join the shared P2P network, which also means that you CAN NOT use other peoples shared nodes
>* -loglevel: Need to view more debug logs, set 0; the default is 1 >* -loglevel: Need to view more debug logs, set 0; the default is 1
### Run in Docker container
We don't provide official docker image yet, you can run it in any container
```
nohup ./openp2p -d -node OFFICEPC1 -token TOKEN &
# Since many docker images have been simplified, the install system service will fail, so the daemon mode is used to run in the background
```
## Connect ## Connect
``` ```
./openp2p -d -node HOMEPC123 -token TOKEN -appname OfficeWindowsRemote -peernode OFFICEPC1 -dstip 127.0.0.1 -dstport 3389 -srcport 23389 ./openp2p -d -node HOMEPC123 -token TOKEN -appname OfficeWindowsRemote -peernode OFFICEPC1 -dstip 127.0.0.1 -dstport 3389 -srcport 23389
+10 -10
View File
@@ -30,13 +30,14 @@ type AppConfig struct {
peerConeNatPort int peerConeNatPort int
retryNum int retryNum int
retryTime time.Time retryTime time.Time
nextRetryTime time.Time
shareBandwidth int shareBandwidth int
} }
// TODO: add loglevel, maxlogfilesize // TODO: add loglevel, maxlogfilesize
type Config struct { type Config struct {
Network NetworkConfig `json:"network"` Network NetworkConfig `json:"network"`
Apps []AppConfig `json:"apps"` Apps []*AppConfig `json:"apps"`
LogLevel int LogLevel int
mtx sync.Mutex mtx sync.Mutex
@@ -48,27 +49,29 @@ func (c *Config) switchApp(app AppConfig, enabled int) {
for i := 0; i < len(c.Apps); i++ { for i := 0; i < len(c.Apps); i++ {
if c.Apps[i].Protocol == app.Protocol && c.Apps[i].SrcPort == app.SrcPort { if c.Apps[i].Protocol == app.Protocol && c.Apps[i].SrcPort == app.SrcPort {
c.Apps[i].Enabled = enabled c.Apps[i].Enabled = enabled
c.Apps[i].retryNum = 0
c.Apps[i].nextRetryTime = time.Now()
return return
} }
} }
} }
func (c *Config) add(app AppConfig, force bool) { func (c *Config) add(app AppConfig, override bool) {
c.mtx.Lock() c.mtx.Lock()
defer c.mtx.Unlock() defer c.mtx.Unlock()
if app.SrcPort == 0 || app.DstPort == 0 { if app.SrcPort == 0 || app.DstPort == 0 {
gLog.Println(LevelERROR, "invalid app ", app) gLog.Println(LevelERROR, "invalid app ", app)
return return
} }
if override {
for i := 0; i < len(c.Apps); i++ { for i := 0; i < len(c.Apps); i++ {
if c.Apps[i].Protocol == app.Protocol && c.Apps[i].SrcPort == app.SrcPort { if c.Apps[i].Protocol == app.Protocol && c.Apps[i].SrcPort == app.SrcPort {
if force { c.Apps[i] = &app // override it
c.Apps[i] = app
}
return return
} }
} }
c.Apps = append(c.Apps, app) }
c.Apps = append(c.Apps, &app)
} }
func (c *Config) delete(app AppConfig) { func (c *Config) delete(app AppConfig) {
@@ -142,11 +145,8 @@ func parseParams() {
srcPort := flag.Int("srcport", 0, "source port ") srcPort := flag.Int("srcport", 0, "source port ")
protocol := flag.String("protocol", "tcp", "tcp or udp") protocol := flag.String("protocol", "tcp", "tcp or udp")
appName := flag.String("appname", "", "app name") appName := flag.String("appname", "", "app name")
flag.Bool("noshare", false, "deprecated. uses -sharebandwidth 0") // Deprecated, rm later shareBandwidth := flag.Int("sharebandwidth", 10, "N mbps share bandwidth limit, private network no limit")
shareBandwidth := flag.Int("sharebandwidth", 10, "N mbps share bandwidth limit, private node no limit")
flag.Bool("f", false, "deprecated. config file") // Deprecated, rm later
daemonMode := flag.Bool("d", false, "daemonMode") daemonMode := flag.Bool("d", false, "daemonMode")
flag.Bool("bydaemon", false, "start by daemon") // Deprecated, rm later
logLevel := flag.Int("loglevel", 1, "0:debug 1:info 2:warn 3:error") logLevel := flag.Int("loglevel", 1, "0:debug 1:info 2:warn 3:error")
flag.Parse() flag.Parse()
+3 -3
View File
@@ -110,6 +110,8 @@ func (d *daemon) Control(ctrlComm string, exeAbsPath string, args []string) erro
// listen and build p2papp: // listen and build p2papp:
// ./openp2p install -node hhd1207-222 -token YOUR-TOKEN -sharebandwidth 0 -peernode hhdhome-n1 -dstip 127.0.0.1 -dstport 50022 -protocol tcp -srcport 22 // ./openp2p install -node hhd1207-222 -token YOUR-TOKEN -sharebandwidth 0 -peernode hhdhome-n1 -dstip 127.0.0.1 -dstport 50022 -protocol tcp -srcport 22
func install() { func install() {
gLog.Println(LevelINFO, "openp2p start. version: ", OpenP2PVersion)
gLog.Println(LevelINFO, "Contact: QQ Group: 16947733, Email: [email protected]")
gLog.Println(LevelINFO, "install start") gLog.Println(LevelINFO, "install start")
defer gLog.Println(LevelINFO, "install end") defer gLog.Println(LevelINFO, "install end")
// auto uninstall // auto uninstall
@@ -127,8 +129,7 @@ func install() {
srcPort := installFlag.Int("srcport", 0, "source port ") srcPort := installFlag.Int("srcport", 0, "source port ")
protocol := installFlag.String("protocol", "tcp", "tcp or udp") protocol := installFlag.String("protocol", "tcp", "tcp or udp")
appName := flag.String("appname", "", "app name") appName := flag.String("appname", "", "app name")
installFlag.Bool("noshare", false, "deprecated. uses -sharebandwidth 0") shareBandwidth := installFlag.Int("sharebandwidth", 10, "N mbps share bandwidth limit, private network no limit")
shareBandwidth := installFlag.Int("sharebandwidth", 10, "N mbps share bandwidth limit, private node no limit")
logLevel := installFlag.Int("loglevel", 1, "0:debug 1:info 2:warn 3:error") logLevel := installFlag.Int("loglevel", 1, "0:debug 1:info 2:warn 3:error")
installFlag.Parse(os.Args[2:]) installFlag.Parse(os.Args[2:])
if *node != "" && len(*node) < 8 { if *node != "" && len(*node) < 8 {
@@ -195,7 +196,6 @@ func install() {
dst.Close() dst.Close()
// install system service // install system service
// args := []string{""}
gLog.Println(LevelINFO, "targetPath:", targetPath) gLog.Println(LevelINFO, "targetPath:", targetPath)
err = d.Control("install", targetPath, []string{"-d"}) err = d.Control("install", targetPath, []string{"-d"})
if err == nil { if err == nil {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

+6 -1
View File
@@ -115,18 +115,23 @@ func handlePush(pn *P2PNetwork, subType uint16, msg []byte) error {
defer gConf.mtx.Unlock() defer gConf.mtx.Unlock()
for _, config := range gConf.Apps { for _, config := range gConf.Apps {
appActive := 0 appActive := 0
relayNode := ""
relayMode := ""
i, ok := pn.apps.Load(fmt.Sprintf("%s%d", config.Protocol, config.SrcPort)) i, ok := pn.apps.Load(fmt.Sprintf("%s%d", config.Protocol, config.SrcPort))
if ok { if ok {
app := i.(*p2pApp) app := i.(*p2pApp)
if app.isActive() { if app.isActive() {
appActive = 1 appActive = 1
} }
relayNode = app.relayNode
relayMode = app.relayMode
} }
appInfo := AppInfo{ appInfo := AppInfo{
AppName: config.AppName, AppName: config.AppName,
Protocol: config.Protocol, Protocol: config.Protocol,
SrcPort: config.SrcPort, SrcPort: config.SrcPort,
// RelayNode: relayNode, RelayNode: relayNode,
RelayMode: relayMode,
PeerNode: config.PeerNode, PeerNode: config.PeerNode,
DstHost: config.DstHost, DstHost: config.DstHost,
DstPort: config.DstPort, DstPort: config.DstPort,
+3 -2
View File
@@ -13,7 +13,7 @@ func main() {
binDir := filepath.Dir(os.Args[0]) binDir := filepath.Dir(os.Args[0])
os.Chdir(binDir) // for system service os.Chdir(binDir) // for system service
gLog = InitLogger(binDir, "openp2p", LevelDEBUG, 1024*1024, LogFileAndConsole) gLog = InitLogger(binDir, "openp2p", LevelDEBUG, 1024*1024, LogFileAndConsole)
gLog.Println(LevelINFO, "openp2p start. version: ", OpenP2PVersion)
// TODO: install sub command, deamon process // TODO: install sub command, deamon process
if len(os.Args) > 1 { if len(os.Args) > 1 {
switch os.Args[1] { switch os.Args[1] {
@@ -41,7 +41,8 @@ func main() {
} else { } else {
installByFilename() installByFilename()
} }
gLog.Println(LevelINFO, "openp2p start. version: ", OpenP2PVersion)
gLog.Println(LevelINFO, "Contact: QQ Group: 16947733, Email: [email protected]")
parseParams() parseParams()
gLog.Println(LevelINFO, &gConf) gLog.Println(LevelINFO, &gConf)
setFirewall() setFirewall()
+8 -5
View File
@@ -16,6 +16,7 @@ type p2pApp struct {
tunnel *P2PTunnel tunnel *P2PTunnel
rtid uint64 rtid uint64
relayNode string relayNode string
relayMode string
hbTime time.Time hbTime time.Time
hbMtx sync.Mutex hbMtx sync.Mutex
running bool running bool
@@ -45,7 +46,12 @@ func (app *p2pApp) updateHeartbeat() {
func (app *p2pApp) listenTCP() error { func (app *p2pApp) listenTCP() error {
var err error var err error
if app.config.Protocol == "udp" {
app.listener, err = net.Listen("udp4", fmt.Sprintf("0.0.0.0:%d", app.config.SrcPort))
} else {
app.listener, err = net.Listen("tcp4", fmt.Sprintf("0.0.0.0:%d", app.config.SrcPort)) app.listener, err = net.Listen("tcp4", fmt.Sprintf("0.0.0.0:%d", app.config.SrcPort))
}
if err != nil { if err != nil {
gLog.Printf(LevelERROR, "listen error:%s", err) gLog.Printf(LevelERROR, "listen error:%s", err)
return err return err
@@ -108,13 +114,10 @@ func (app *p2pApp) listen() error {
go app.relayHeartbeatLoop() go app.relayHeartbeatLoop()
} }
for app.running { for app.running {
if app.config.Protocol == "udp" {
app.listenTCP() app.listenTCP()
} else {
app.listenTCP()
}
time.Sleep(time.Second * 5) time.Sleep(time.Second * 5)
// TODO: listen UDP
} }
return nil return nil
} }
+35 -25
View File
@@ -7,6 +7,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"math"
"math/rand" "math/rand"
"net" "net"
"net/url" "net/url"
@@ -96,6 +97,9 @@ func (pn *P2PNetwork) runAll() {
gConf.mtx.Lock() gConf.mtx.Lock()
defer gConf.mtx.Unlock() defer gConf.mtx.Unlock()
for _, config := range gConf.Apps { for _, config := range gConf.Apps {
if config.nextRetryTime.After(time.Now()) {
continue
}
if config.Enabled == 0 { if config.Enabled == 0 {
continue continue
} }
@@ -116,19 +120,22 @@ func (pn *P2PNetwork) runAll() {
continue continue
} }
if appExist && !appActive { if appExist && !appActive {
gLog.Printf(LevelINFO, "detect app %s disconnect, reconnecting...", config.AppName) pn.DeleteApp(*config)
pn.DeleteApp(config) }
if config.retryTime.Add(time.Minute * 15).Before(time.Now()) { if config.retryNum > 0 {
gLog.Printf(LevelINFO, "detect app %s disconnect, reconnecting the %d times...", config.AppName, config.retryNum)
if time.Now().Add(-time.Minute * 15).After(config.retryTime) { // normal lasts 15min
config.retryNum = 0 config.retryNum = 0
} }
}
config.retryNum++ config.retryNum++
config.retryTime = time.Now() config.retryTime = time.Now()
if config.retryNum > MaxRetry { increase := math.Pow(1.3, float64(config.retryNum))
gLog.Printf(LevelERROR, "app %s%d retry more than %d times, exit.", config.Protocol, config.SrcPort, MaxRetry) if increase > 900 {
continue increase = 900
} }
} config.nextRetryTime = time.Now().Add(time.Second * time.Duration(increase)) // exponential increase retry time. 1.3^x
go pn.AddApp(config) go pn.AddApp(*config)
} }
} }
func (pn *P2PNetwork) autorunApp() { func (pn *P2PNetwork) autorunApp() {
@@ -145,23 +152,23 @@ func (pn *P2PNetwork) autorunApp() {
gLog.Println(LevelINFO, "autorunApp end") gLog.Println(LevelINFO, "autorunApp end")
} }
func (pn *P2PNetwork) addRelayTunnel(config AppConfig, appid uint64, appkey uint64) (*P2PTunnel, uint64, error) { func (pn *P2PNetwork) addRelayTunnel(config AppConfig, appid uint64, appkey uint64) (*P2PTunnel, uint64, string, error) {
gLog.Printf(LevelINFO, "addRelayTunnel to %s start", config.PeerNode) gLog.Printf(LevelINFO, "addRelayTunnel to %s start", config.PeerNode)
defer gLog.Printf(LevelINFO, "addRelayTunnel to %s end", config.PeerNode) defer gLog.Printf(LevelINFO, "addRelayTunnel to %s end", config.PeerNode)
pn.write(MsgRelay, MsgRelayNodeReq, &RelayNodeReq{config.PeerNode}) pn.write(MsgRelay, MsgRelayNodeReq, &RelayNodeReq{config.PeerNode})
head, body := pn.read("", MsgRelay, MsgRelayNodeRsp, time.Second*10) head, body := pn.read("", MsgRelay, MsgRelayNodeRsp, time.Second*10)
if head == nil { if head == nil {
return nil, 0, errors.New("read MsgRelayNodeRsp error") return nil, 0, "", errors.New("read MsgRelayNodeRsp error")
} }
rsp := RelayNodeRsp{} rsp := RelayNodeRsp{}
err := json.Unmarshal(body, &rsp) err := json.Unmarshal(body, &rsp)
if err != nil { if err != nil {
gLog.Printf(LevelERROR, "wrong RelayNodeRsp:%s", err) gLog.Printf(LevelERROR, "wrong RelayNodeRsp:%s", err)
return nil, 0, errors.New("unmarshal MsgRelayNodeRsp error") return nil, 0, "", errors.New("unmarshal MsgRelayNodeRsp error")
} }
if rsp.RelayName == "" || rsp.RelayToken == 0 { if rsp.RelayName == "" || rsp.RelayToken == 0 {
gLog.Printf(LevelERROR, "MsgRelayNodeReq error") gLog.Printf(LevelERROR, "MsgRelayNodeReq error")
return nil, 0, errors.New("MsgRelayNodeReq error") return nil, 0, "", errors.New("MsgRelayNodeReq error")
} }
gLog.Printf(LevelINFO, "got relay node:%s", rsp.RelayName) gLog.Printf(LevelINFO, "got relay node:%s", rsp.RelayName)
relayConfig := config relayConfig := config
@@ -170,7 +177,7 @@ func (pn *P2PNetwork) addRelayTunnel(config AppConfig, appid uint64, appkey uint
t, err := pn.addDirectTunnel(relayConfig, 0) t, err := pn.addDirectTunnel(relayConfig, 0)
if err != nil { if err != nil {
gLog.Println(LevelERROR, "direct connect error:", err) gLog.Println(LevelERROR, "direct connect error:", err)
return nil, 0, err return nil, 0, "", err
} }
// notify peer addRelayTunnel // notify peer addRelayTunnel
req := AddRelayTunnelReq{ req := AddRelayTunnelReq{
@@ -187,15 +194,15 @@ func (pn *P2PNetwork) addRelayTunnel(config AppConfig, appid uint64, appkey uint
head, body = pn.read(config.PeerNode, MsgPush, MsgPushAddRelayTunnelRsp, PeerAddRelayTimeount) // TODO: const value head, body = pn.read(config.PeerNode, MsgPush, MsgPushAddRelayTunnelRsp, PeerAddRelayTimeount) // TODO: const value
if head == nil { if head == nil {
gLog.Printf(LevelERROR, "read MsgPushAddRelayTunnelRsp error") gLog.Printf(LevelERROR, "read MsgPushAddRelayTunnelRsp error")
return nil, 0, errors.New("read MsgPushAddRelayTunnelRsp error") return nil, 0, "", errors.New("read MsgPushAddRelayTunnelRsp error")
} }
rspID := TunnelMsg{} rspID := TunnelMsg{}
err = json.Unmarshal(body, &rspID) err = json.Unmarshal(body, &rspID)
if err != nil { if err != nil {
gLog.Printf(LevelERROR, "wrong RelayNodeRsp:%s", err) gLog.Printf(LevelERROR, "wrong RelayNodeRsp:%s", err)
return nil, 0, errors.New("unmarshal MsgRelayNodeRsp error") return nil, 0, "", errors.New("unmarshal MsgRelayNodeRsp error")
} }
return t, rspID.ID, err return t, rspID.ID, rsp.Mode, err
} }
func (pn *P2PNetwork) AddApp(config AppConfig) error { func (pn *P2PNetwork) AddApp(config AppConfig) error {
@@ -215,24 +222,26 @@ func (pn *P2PNetwork) AddApp(config AppConfig) error {
} }
appID := rand.Uint64() appID := rand.Uint64()
appKey := uint64(0) appKey := uint64(0)
t, err := pn.addDirectTunnel(config, 0)
var rtid uint64 var rtid uint64
relayNode := "" relayNode := ""
relayMode := ""
peerNatType := NATUnknown peerNatType := NATUnknown
peerIP := "" peerIP := ""
errMsg := "" errMsg := ""
if err != nil && err == ErrorHandshake { t, err := pn.addDirectTunnel(config, 0)
gLog.Println(LevelERROR, "direct connect failed, try to relay")
appKey = rand.Uint64()
t, rtid, err = pn.addRelayTunnel(config, appID, appKey)
if t != nil {
relayNode = t.config.PeerNode
}
}
if t != nil { if t != nil {
peerNatType = t.config.peerNatType peerNatType = t.config.peerNatType
peerIP = t.config.peerIP peerIP = t.config.peerIP
} }
if err != nil && err == ErrorHandshake {
gLog.Println(LevelERROR, "direct connect failed, try to relay")
appKey = rand.Uint64()
t, rtid, relayMode, err = pn.addRelayTunnel(config, appID, appKey)
if t != nil {
relayNode = t.config.PeerNode
}
}
if err != nil { if err != nil {
errMsg = err.Error() errMsg = err.Error()
} }
@@ -261,6 +270,7 @@ func (pn *P2PNetwork) AddApp(config AppConfig) error {
config: config, config: config,
rtid: rtid, rtid: rtid,
relayNode: relayNode, relayNode: relayNode,
relayMode: relayMode,
hbTime: time.Now()} hbTime: time.Now()}
pn.apps.Store(fmt.Sprintf("%s%d", config.Protocol, config.SrcPort), &app) pn.apps.Store(fmt.Sprintf("%s%d", config.Protocol, config.SrcPort), &app)
if err == nil { if err == nil {
+6 -3
View File
@@ -333,8 +333,12 @@ func (t *P2PTunnel) readLoop() {
overlayID := req.ID overlayID := req.ID
gLog.Printf(LevelDEBUG, "App:%d overlayID:%d connect %+v", req.AppID, overlayID, req) gLog.Printf(LevelDEBUG, "App:%d overlayID:%d connect %+v", req.AppID, overlayID, req)
if req.Protocol == "tcp" { var conn net.Conn
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", req.DstIP, req.DstPort), time.Second*5) if req.Protocol == "udp" {
conn, err = net.DialTimeout("udp", fmt.Sprintf("%s:%d", req.DstIP, req.DstPort), time.Second*5)
} else {
conn, err = net.DialTimeout("tcp", fmt.Sprintf("%s:%d", req.DstIP, req.DstPort), time.Second*5)
}
if err != nil { if err != nil {
gLog.Println(LevelERROR, err) gLog.Println(LevelERROR, err)
continue continue
@@ -358,7 +362,6 @@ func (t *P2PTunnel) readLoop() {
t.overlayConns.Store(otcp.id, &otcp) t.overlayConns.Store(otcp.id, &otcp)
go otcp.run() go otcp.run()
}
case MsgOverlayDisconnectReq: case MsgOverlayDisconnectReq:
req := OverlayDisconnectReq{} req := OverlayDisconnectReq{}
err := json.Unmarshal(body, &req) err := json.Unmarshal(body, &req)
+3 -1
View File
@@ -10,7 +10,7 @@ import (
"time" "time"
) )
const OpenP2PVersion = "1.1.0" const OpenP2PVersion = "1.2.0"
const ProducnName string = "openp2p" const ProducnName string = "openp2p"
type openP2PHeader struct { type openP2PHeader struct {
@@ -236,6 +236,7 @@ type RelayNodeReq struct {
} }
type RelayNodeRsp struct { type RelayNodeRsp struct {
Mode string `json:"mode,omitempty"` // private,public
RelayName string `json:"relayName,omitempty"` RelayName string `json:"relayName,omitempty"`
RelayToken uint64 `json:"relayToken,omitempty"` RelayToken uint64 `json:"relayToken,omitempty"`
} }
@@ -294,6 +295,7 @@ type AppInfo struct {
PeerIP string `json:"peerIP,omitempty"` PeerIP string `json:"peerIP,omitempty"`
ShareBandwidth int `json:"shareBandWidth,omitempty"` ShareBandwidth int `json:"shareBandWidth,omitempty"`
RelayNode string `json:"relayNode,omitempty"` RelayNode string `json:"relayNode,omitempty"`
RelayMode string `json:"relayMode,omitempty"`
Version string `json:"version,omitempty"` Version string `json:"version,omitempty"`
RetryTime string `json:"retryTime,omitempty"` RetryTime string `json:"retryTime,omitempty"`
IsActive int `json:"isActive,omitempty"` IsActive int `json:"isActive,omitempty"`