From 712f57940ccd78f8b153bfa0eba0133aae94cd9c Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Tue, 20 Jul 2021 18:59:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96pool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/handler/link_cstp.go | 7 ++++--- server/handler/link_dtls.go | 2 +- server/handler/link_tap.go | 17 ++++++++--------- server/handler/link_tun.go | 2 +- server/handler/payload.go | 13 +++++++------ server/handler/pool.go | 5 +++-- server/sessdata/protocol.go | 2 +- 7 files changed, 25 insertions(+), 23 deletions(-) diff --git a/server/handler/link_cstp.go b/server/handler/link_cstp.go index 7df3b29..09083e0 100644 --- a/server/handler/link_cstp.go +++ b/server/handler/link_cstp.go @@ -102,9 +102,10 @@ func cstpWrite(conn net.Conn, cSess *sessdata.ConnSession) { hb := getByteZero() header := *hb header = append(header, h...) - if payload.PType == 0x00 { // data - binary.BigEndian.PutUint16(header[4:6], uint16(len(payload.Data))) - header = append(header, payload.Data...) + if payload.PType == 0x00 { + data := *payload.Data + binary.BigEndian.PutUint16(header[4:6], uint16(len(data))) + header = append(header, data...) } n, err = conn.Write(header) if err != nil { diff --git a/server/handler/link_dtls.go b/server/handler/link_dtls.go index 318ba8d..3bf0da7 100644 --- a/server/handler/link_dtls.go +++ b/server/handler/link_dtls.go @@ -103,7 +103,7 @@ func dtlsWrite(conn net.Conn, dSess *sessdata.DtlsSession, cSess *sessdata.ConnS header := *hb header = append(header, payload.PType) if payload.PType == 0x00 { // data - header = append(header, payload.Data...) + header = append(header, *payload.Data...) } n, err := conn.Write(header) if err != nil { diff --git a/server/handler/link_tap.go b/server/handler/link_tap.go index 122ef4c..c4979ec 100644 --- a/server/handler/link_tap.go +++ b/server/handler/link_tap.go @@ -103,17 +103,16 @@ func tapWrite(ifce *water.Interface, cSess *sessdata.ConnSession) { // var frame ethernet.Frame fb := getByteFull() frame = *fb + pData := *payload.Data switch payload.LType { default: // log.Println(payload) case sessdata.LTypeEthernet: - copy(frame, payload.Data) - frame = frame[:len(payload.Data)] + copy(frame, pData) + frame = frame[:len(pData)] case sessdata.LTypeIPData: // 需要转换成 Ethernet 数据 - data := payload.Data - - ip_src := waterutil.IPv4Source(data) - if waterutil.IsIPv6(data) || !ip_src.Equal(cSess.IpAddr) { + ip_src := waterutil.IPv4Source(pData) + if waterutil.IsIPv6(pData) || !ip_src.Equal(cSess.IpAddr) { // 过滤掉IPv6的数据 // 非分配给客户端ip,直接丢弃 continue @@ -122,7 +121,7 @@ func tapWrite(ifce *water.Interface, cSess *sessdata.ConnSession) { // packet := gopacket.NewPacket(data, layers.LayerTypeIPv4, gopacket.Default) // fmt.Println("get:", packet) - ip_dst := waterutil.IPv4Destination(data) + ip_dst := waterutil.IPv4Destination(pData) // fmt.Println("get:", ip_src, ip_dst) var dstHw net.HardwareAddr @@ -142,8 +141,8 @@ func tapWrite(ifce *water.Interface, cSess *sessdata.ConnSession) { } // fmt.Println("Gateway", ip_dst, dstAddr.HardwareAddr) - frame.Prepare(dstHw, cSess.MacHw, ethernet.NotTagged, ethernet.IPv4, len(data)) - copy(frame[12+2:], data) + frame.Prepare(dstHw, cSess.MacHw, ethernet.NotTagged, ethernet.IPv4, len(pData)) + copy(frame[12+2:], pData) } // packet := gopacket.NewPacket(frame, layers.LayerTypeEthernet, gopacket.Default) diff --git a/server/handler/link_tun.go b/server/handler/link_tun.go index d18c212..4b88e88 100644 --- a/server/handler/link_tun.go +++ b/server/handler/link_tun.go @@ -80,7 +80,7 @@ func tunWrite(ifce *water.Interface, cSess *sessdata.ConnSession) { return } - _, err = ifce.Write(payload.Data) + _, err = ifce.Write(*payload.Data) if err != nil { base.Error("tun Write err", err) return diff --git a/server/handler/payload.go b/server/handler/payload.go index 9df0441..c9b2ee3 100644 --- a/server/handler/payload.go +++ b/server/handler/payload.go @@ -10,7 +10,7 @@ func payloadIn(cSess *sessdata.ConnSession, lType sessdata.LType, pType byte, da pl := getPayload() pl.LType = lType pl.PType = pType - pl.Data = append(pl.Data, data...) + *pl.Data = append(*pl.Data, data...) return payloadInData(cSess, pl) } @@ -46,7 +46,7 @@ func payloadOutCstp(cSess *sessdata.ConnSession, lType sessdata.LType, pType byt pl := getPayload() pl.LType = lType pl.PType = pType - pl.Data = append(pl.Data, data...) + *pl.Data = append(*pl.Data, data...) closed := false @@ -63,7 +63,7 @@ func payloadOutDtls(cSess *sessdata.ConnSession, dSess *sessdata.DtlsSession, lT pl := getPayload() pl.LType = lType pl.PType = pType - pl.Data = append(pl.Data, data...) + *pl.Data = append(*pl.Data, data...) select { case cSess.PayloadOutDtls <- pl: @@ -80,9 +80,10 @@ func checkLinkAcl(group *dbdata.Group, payload *sessdata.Payload) bool { return true } - ip_dst := waterutil.IPv4Destination(payload.Data) - ip_port := waterutil.IPv4DestinationPort(payload.Data) - ip_proto := waterutil.IPv4Protocol(payload.Data) + data := *payload.Data + ip_dst := waterutil.IPv4Destination(data) + ip_port := waterutil.IPv4DestinationPort(data) + ip_proto := waterutil.IPv4Protocol(data) // fmt.Println("sent:", ip_dst, ip_port) // 优先放行dns端口 diff --git a/server/handler/pool.go b/server/handler/pool.go index 86f2102..629c715 100644 --- a/server/handler/pool.go +++ b/server/handler/pool.go @@ -8,8 +8,9 @@ import ( var plPool = sync.Pool{ New: func() interface{} { + b := make([]byte, 0, BufferSize) pl := sessdata.Payload{ - Data: make([]byte, 0, BufferSize), + Data: &b, } // fmt.Println("plPool-init", len(pl.Data), cap(pl.Data)) return &pl @@ -24,7 +25,7 @@ func getPayload() *sessdata.Payload { func putPayload(pl *sessdata.Payload) { pl.LType = 0 pl.PType = 0 - pl.Data = pl.Data[:0] + *pl.Data = (*pl.Data)[:0] plPool.Put(pl) } diff --git a/server/sessdata/protocol.go b/server/sessdata/protocol.go index f17a71b..f2d2377 100644 --- a/server/sessdata/protocol.go +++ b/server/sessdata/protocol.go @@ -10,7 +10,7 @@ const ( type Payload struct { PType byte // payload types LType LType // LinkType - Data []byte + Data *[]byte } /*