From 09b601528b522b1d3f4d9d77e36d606f41798bf9 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Wed, 12 Sep 2018 15:27:45 +0200 Subject: [PATCH] put buffer into client session as allocation optimization --- proxy/vmess/encoding/client.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/proxy/vmess/encoding/client.go b/proxy/vmess/encoding/client.go index a0f4c261..df080038 100644 --- a/proxy/vmess/encoding/client.go +++ b/proxy/vmess/encoding/client.go @@ -39,6 +39,8 @@ type ClientSession struct { responseBodyIV [16]byte responseReader io.Reader responseHeader byte + + buffer [33]byte // 16 + 16 + 1 } var clientSessionPool = sync.Pool{ @@ -47,10 +49,11 @@ var clientSessionPool = sync.Pool{ // NewClientSession creates a new ClientSession. func NewClientSession(idHash protocol.IDHash) *ClientSession { - randomBytes := make([]byte, 33) // 16 + 16 + 1 + session := clientSessionPool.Get().(*ClientSession) + + randomBytes := session.buffer[:] common.Must2(rand.Read(randomBytes)) - session := clientSessionPool.Get().(*ClientSession) copy(session.requestBodyKey[:], randomBytes[:16]) copy(session.requestBodyIV[:], randomBytes[16:32]) session.responseHeader = randomBytes[32]