1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-28 14:50:26 +08:00

optimize(all): drop lstnq & impl. orbyte

This commit is contained in:
源文雨
2025-02-25 19:38:16 +09:00
parent 4b60801a0f
commit 9f36504635
22 changed files with 501 additions and 573 deletions

View File

@@ -10,6 +10,8 @@ import (
"time"
"github.com/FloatTech/ttl"
"github.com/fumiama/orbyte"
"github.com/fumiama/orbyte/pbuf"
"github.com/fumiama/water/waterutil"
"github.com/sirupsen/logrus"
@@ -46,13 +48,19 @@ type Me struct {
// 本机路由表
router *Router
// 本机未接收完全分片池
recving *ttl.Cache[uint64, *head.Packet]
recving *ttl.Cache[uint64, *orbyte.Item[head.Packet]]
// 抗重放攻击记录池
recved *ttl.Cache[uint64, bool]
recved *ttl.Cache[uint64, struct{}]
// 本机上层配置
srcport, dstport, mtu, speedloop uint16
// 报头掩码
mask uint64
// 本机总接收字节数
recvtotlcnt uint64
// 上一次触发循环计数时间
recvlooptime int64
// 本机总接收数据包计数
recvloopcnt uintptr
// 是否进行 base16384 编码
base14 bool
// 本机网络端点初始化配置
@@ -122,12 +130,13 @@ func NewMe(cfg *MyConfig) (m Me) {
)
}
m.mask = cfg.Mask
m.recvlooptime = time.Now().UnixMilli()
m.base14 = cfg.Base14
var buf [8]byte
binary.BigEndian.PutUint64(buf[:], m.mask)
logrus.Infoln("[me] xor mask", hex.EncodeToString(buf[:]))
m.recving = ttl.NewCache[uint64, *head.Packet](time.Second * 30)
m.recved = ttl.NewCache[uint64, bool](time.Second * 30)
m.recving = ttl.NewCache[uint64, *orbyte.Item[head.Packet]](time.Second * 10)
m.recved = ttl.NewCache[uint64, struct{}](time.Minute)
return
}
@@ -154,6 +163,7 @@ func (m *Me) Restart() error {
}
m.me = ip
m.subnet = *cidr
m.recvlooptime = time.Now().UnixMilli()
m.conn, err = m.listen()
return err
}
@@ -280,11 +290,10 @@ func (m *Me) sendAllSameDst(packet []byte) (n int) {
logrus.Warnln("[me] drop packet to", dst.String()+":"+strconv.Itoa(int(m.DstPort())), ": nil nexthop")
return
}
pcp := helper.MakeBytes(len(packet))
copy(pcp, packet)
go func(packet []byte) {
defer helper.PutBytes(packet)
_, err := lnk.WriteAndPut(head.NewPacket(head.ProtoData, m.SrcPort(), lnk.peerip, m.DstPort(), packet), false)
pcp := pbuf.NewBytes(len(packet))
copy(pcp.Bytes(), packet)
go func(packet pbuf.Bytes) {
_, err := lnk.WritePacket(head.NewPacketPartial(head.ProtoData, m.SrcPort(), lnk.peerip, m.DstPort(), packet), false)
if err != nil {
logrus.Warnln("[me] write to peer", lnk.peerip, "err:", err)
}