1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-09 18:40:36 +08:00

优化代码结构

This commit is contained in:
fumiama
2021-12-28 14:28:02 +08:00
parent 45d1ef3abd
commit 6c42fe9db9
9 changed files with 77 additions and 22 deletions

View File

@@ -16,9 +16,10 @@ type Tunnel struct {
outcache []byte
src uint16
dest uint16
mtu uint16
}
func Create(me *link.Me, peer string, srcport uint16, destport uint16) (s Tunnel, err error) {
func Create(me *link.Me, peer string, srcport, destport, mtu uint16) (s Tunnel, err error) {
logrus.Infoln("[tunnel] create from", srcport, "to", destport)
s.l, err = me.Connect(peer)
if err == nil {
@@ -26,6 +27,7 @@ func Create(me *link.Me, peer string, srcport uint16, destport uint16) (s Tunnel
s.out = make(chan []byte, 4)
s.src = srcport
s.dest = destport
s.mtu = mtu
go s.handleWrite()
go s.handleRead()
} else {
@@ -72,13 +74,22 @@ func (s *Tunnel) handleWrite() {
break
}
logrus.Debugln("[tunnel] writing", len(b), "bytes...")
for len(b) > int(s.mtu) {
logrus.Infoln("[tunnel] split buffer")
_, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.dest, b[:s.mtu]))
if err != nil {
logrus.Errorln("[tunnel] write err:", err)
return
}
logrus.Debugln("[tunnel] write succeeded")
b = b[s.mtu:]
}
_, err := s.l.Write(head.NewPacket(head.ProtoData, s.src, s.dest, b))
if err != nil {
logrus.Errorln("[tunnel] write err:", err)
break
} else {
logrus.Debugln("[tunnel] write succeeded")
}
logrus.Debugln("[tunnel] write succeeded")
}
}

View File

@@ -1,6 +1,8 @@
package tunnel
import (
"crypto/rand"
"encoding/hex"
"testing"
curve "github.com/fumiama/go-x25519"
@@ -11,6 +13,7 @@ import (
func TestTunnel(t *testing.T) {
logrus.SetLevel(logrus.DebugLevel)
selfpk, err := curve.New(nil)
if err != nil {
panic(err)
@@ -19,18 +22,24 @@ func TestTunnel(t *testing.T) {
if err != nil {
panic(err)
}
t.Log("my priv key:", hex.EncodeToString(selfpk.Private()[:]))
t.Log("my publ key:", hex.EncodeToString(selfpk.Public()[:]))
t.Log("peer priv key:", hex.EncodeToString(peerpk.Private()[:]))
t.Log("peer publ key:", hex.EncodeToString(peerpk.Public()[:]))
m := link.NewMe(selfpk.Private(), "192.168.1.2", "127.0.0.1:1236")
m.AddPeer("192.168.1.3", peerpk.Public(), "127.0.0.1:1237", nil, 0, false)
p := link.NewMe(peerpk.Private(), "192.168.1.3", "127.0.0.1:1237")
p.AddPeer("192.168.1.2", selfpk.Public(), "127.0.0.1:1236", nil, 0, false)
tunnme, err := Create(&m, "192.168.1.3", 1, 1)
tunnme, err := Create(&m, "192.168.1.3", 1, 1, 4096)
if err != nil {
t.Fatal(err)
}
tunnpeer, err := Create(&p, "192.168.1.2", 1, 1)
tunnpeer, err := Create(&p, "192.168.1.2", 1, 1, 4096)
if err != nil {
t.Fatal(err)
}
sendb := ([]byte)("1234")
tunnme.Write(sendb)
buf := make([]byte, 4)
@@ -39,4 +48,24 @@ func TestTunnel(t *testing.T) {
t.Log("error: recv", buf)
t.Fail()
}
sendb = make([]byte, 4096)
rand.Read(sendb)
tunnme.Write(sendb)
buf = make([]byte, 4096)
tunnpeer.Read(buf)
if string(sendb) != string(buf) {
t.Fatal("error: recv 4096 bytes data")
}
sendb = make([]byte, 131072)
rand.Read(sendb)
tunnme.Write(sendb)
buf = make([]byte, 131072)
for i := 0; i < 32; i++ {
tunnpeer.Read(buf[i*4096:])
}
if string(sendb) != string(buf) {
t.Fatal("error: recv 131072 bytes data")
}
}