1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-23 12:00:34 +08:00

optimize: remove unnecessary m.writer

This commit is contained in:
源文雨
2023-08-05 01:15:11 +08:00
parent 833949366f
commit 803a18dd4d

View File

@@ -11,7 +11,6 @@ import (
"github.com/FloatTech/ttl" "github.com/FloatTech/ttl"
"github.com/fumiama/WireGold/gold/head" "github.com/fumiama/WireGold/gold/head"
"github.com/fumiama/WireGold/helper"
"github.com/fumiama/WireGold/lower" "github.com/fumiama/WireGold/lower"
"github.com/fumiama/water/waterutil" "github.com/fumiama/water/waterutil"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@@ -42,8 +41,6 @@ type Me struct {
nic lower.NICIO nic lower.NICIO
// 本机路由表 // 本机路由表
router *Router router *Router
// 本机发送缓冲区
writer *helper.Writer
// 本机未接收完全分片池 // 本机未接收完全分片池
recving *ttl.Cache[[32]byte, *head.Packet] recving *ttl.Cache[[32]byte, *head.Packet]
// 抗重放攻击记录池 // 抗重放攻击记录池
@@ -103,9 +100,6 @@ func NewMe(cfg *MyConfig) (m Me) {
var buf [8]byte var buf [8]byte
binary.BigEndian.PutUint64(buf[:], m.mask) binary.BigEndian.PutUint64(buf[:], m.mask)
logrus.Infoln("[me] xor mask", hex.EncodeToString(buf[:])) logrus.Infoln("[me] xor mask", hex.EncodeToString(buf[:]))
if m.writer == nil {
m.writer = helper.SelectWriter()
}
m.recving = ttl.NewCache[[32]byte, *head.Packet](time.Second * 30) m.recving = ttl.NewCache[[32]byte, *head.Packet](time.Second * 30)
m.recved = ttl.NewCache[uint64, uint8](time.Second * 30) m.recved = ttl.NewCache[uint64, uint8](time.Second * 30)
return return
@@ -129,28 +123,8 @@ func (m *Me) Close() error {
} }
func (m *Me) Write(packet []byte) (n int, err error) { func (m *Me) Write(packet []byte) (n int, err error) {
remain := m.writer.Len() n = m.sendAllSameDst(packet)
if remain > 0 { logrus.Debugln("[me] writer ate", len(packet), "bytes, remain", len(packet)-n, "bytes")
if len(packet) > 0 {
m.writer.Write(packet)
}
packet = m.writer.Bytes()
}
logrus.Debugln("[me] writer eating", len(packet), "bytes...")
complete := false
n, complete = m.sendAllSameDst(packet)
if len(packet) > n {
_, _ = m.writer.Skip(remain + n - len(packet))
logrus.Debugln("[me] writer remain", m.writer.Len(), "bytes")
if !complete {
logrus.Debugln("[me] incomplete, call inner writer")
nextn, err := m.Write(nil)
return n + nextn, err
}
} else if n > 0 && remain > 0 {
m.writer.Reset()
logrus.Debugln("[me] writer becomes empty")
}
return return
} }
@@ -169,13 +143,13 @@ func (p packetID) issame(packet []byte) bool {
return p == waterutil.IPv4Identification(packet) return p == waterutil.IPv4Identification(packet)
} }
func (m *Me) sendAllSameDst(packet []byte) (n int, isremainnotcomplete bool) { func (m *Me) sendAllSameDst(packet []byte) (n int) {
rem := packet rem := packet
if !waterutil.IsIPv4(packet) { if !waterutil.IsIPv4(packet) {
for len(rem) > 20 && waterutil.IsIPv6(rem) { for len(rem) > 20 && waterutil.IsIPv6(rem) {
pktl := int(binary.BigEndian.Uint16(packet[4:6])) + 40 pktl := int(binary.BigEndian.Uint16(packet[4:6])) + 40
if pktl > len(rem) { if pktl > len(rem) {
return 0, true return 0
} }
n += pktl n += pktl
rem = packet[n:] rem = packet[n:]
@@ -183,7 +157,7 @@ func (m *Me) sendAllSameDst(packet []byte) (n int, isremainnotcomplete bool) {
} }
if len(rem) == 0 || !waterutil.IsIPv4(rem) { if len(rem) == 0 || !waterutil.IsIPv4(rem) {
logrus.Warnln("[me] skip to send", len(packet), "bytes full packet") logrus.Warnln("[me] skip to send", len(packet), "bytes full packet")
return len(packet), false return len(packet)
} }
} }
p := newpacketid(rem) p := newpacketid(rem)
@@ -193,7 +167,6 @@ func (m *Me) sendAllSameDst(packet []byte) (n int, isremainnotcomplete bool) {
totl := waterutil.IPv4TotalLength(ptr) totl := waterutil.IPv4TotalLength(ptr)
if int(totl) > len(ptr) { if int(totl) > len(ptr) {
logrus.Debugln("[me] wrap got invalid totl, break") logrus.Debugln("[me] wrap got invalid totl, break")
isremainnotcomplete = true
break break
} }
i += int(totl) i += int(totl)