From 4b4b01a5078e7359d3b083ecf6c2a6f6db53a620 Mon Sep 17 00:00:00 2001 From: xjasonlyu Date: Fri, 28 Jan 2022 15:30:23 +0800 Subject: [PATCH] Improve: use bytes.Buffer pool --- common/pool/buffer.go | 17 +++++++++++++++++ component/simple-obfs/tls.go | 8 +++++--- 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 common/pool/buffer.go diff --git a/common/pool/buffer.go b/common/pool/buffer.go new file mode 100644 index 0000000..fb328b7 --- /dev/null +++ b/common/pool/buffer.go @@ -0,0 +1,17 @@ +package pool + +import ( + "bytes" + "sync" +) + +var bufferPool = sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} + +func GetBuffer() *bytes.Buffer { + return bufferPool.Get().(*bytes.Buffer) +} + +func PutBuffer(buf *bytes.Buffer) { + buf.Reset() + bufferPool.Put(buf) +} diff --git a/component/simple-obfs/tls.go b/component/simple-obfs/tls.go index cfdca32..8e9c05b 100644 --- a/component/simple-obfs/tls.go +++ b/component/simple-obfs/tls.go @@ -68,8 +68,8 @@ func (to *TLSObfs) Read(b []byte) (int, error) { } if to.firstResponse { - // type + ver + len_size + 91 = 96 - // type + ver + len_size + 1 = 6 + // type + ver + lensize + 91 = 96 + // type + ver + lensize + 1 = 6 // type + ver = 3 to.firstResponse = false return to.read(b, 105) @@ -78,6 +78,7 @@ func (to *TLSObfs) Read(b []byte) (int, error) { // type + ver = 3 return to.read(b, 3) } + func (to *TLSObfs) Write(b []byte) (int, error) { length := len(b) for i := 0; i < length; i += chunkSize { @@ -102,7 +103,8 @@ func (to *TLSObfs) write(b []byte) (int, error) { return len(b), err } - buf := &bytes.Buffer{} + buf := pool.GetBuffer() + defer pool.PutBuffer(buf) buf.Write([]byte{0x17, 0x03, 0x03}) binary.Write(buf, binary.BigEndian, uint16(len(b))) buf.Write(b)