From 2761865178760eec8e6d47a2500d57df42c36227 Mon Sep 17 00:00:00 2001 From: fumiama Date: Fri, 31 Dec 2021 19:47:52 +0800 Subject: [PATCH] fix --- gold/link/listen.go | 19 +++++++++++++++++-- gold/link/me.go | 1 + lower/nic.go | 4 ++-- main_win.go | 2 -- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/gold/link/listen.go b/gold/link/listen.go index 279b7ed..bee6386 100644 --- a/gold/link/listen.go +++ b/gold/link/listen.go @@ -105,8 +105,23 @@ func (m *Me) listen() (conn *net.UDPConn, err error) { // Read 接收所有发送给本机的报文 // 需要开启 nopipe -func (m *Me) Read() *head.Packet { - return <-m.pipe +func (m *Me) Read(p []byte) (n int, err error) { + if len(m.readptr) > 0 { + n = copy(p, m.readptr) + m.readptr = m.readptr[n:] + if n == len(p) { + return + } + p = p[n:] + } + data := (<-m.pipe).Data + c := copy(p, data) + n += c + if c == len(data) { + return + } + m.readptr = data[c:] + return } // 从 conn 读取 sz 字节数据 diff --git a/gold/link/me.go b/gold/link/me.go index 97e1a14..5315185 100644 --- a/gold/link/me.go +++ b/gold/link/me.go @@ -39,6 +39,7 @@ type Me struct { clock map[*head.Packet]uint8 // 本机上层配置 srcport, dstport, mtu uint16 + readptr []byte } // NewMe 设置本机参数 diff --git a/lower/nic.go b/lower/nic.go index 86fbcf1..8d6cd07 100644 --- a/lower/nic.go +++ b/lower/nic.go @@ -2,6 +2,7 @@ package lower import ( "encoding/binary" + "io" "os" "os/exec" "strconv" @@ -49,8 +50,7 @@ func (nc *NIC) Start(m *link.Me) { nc.hasstart = true go func() { // 接收到 NIC for nc.hasstart { - packet := m.Read() - n, err := nc.ifce.Write(packet.Data) + n, err := io.Copy(nc.ifce, m) if err != nil { logrus.Errorln("[lower] recv write to nic err:", err) break diff --git a/main_win.go b/main_win.go index 583e1d5..ca6bade 100644 --- a/main_win.go +++ b/main_win.go @@ -32,11 +32,9 @@ type LogFormat struct{} // Format implements logrus.Formatter func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { buf := new(bytes.Buffer) - buf.WriteByte('[') buf.WriteString(getLogLevelColorCode(entry.Level)) buf.WriteString(strings.ToUpper(entry.Level.String())) buf.WriteString(colorReset) - buf.WriteString("] ") buf.WriteString(entry.Message) buf.WriteString(" \n") return buf.Bytes(), nil