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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user