mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 00:34:01 +03:00
Get rid of unrequired buffering for tls records
This commit is contained in:
@@ -1,22 +1,14 @@
|
||||
package record
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var (
|
||||
recordPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return &Record{}
|
||||
},
|
||||
}
|
||||
bytesBufferPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return &bytes.Buffer{}
|
||||
},
|
||||
}
|
||||
)
|
||||
var recordPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return &Record{}
|
||||
},
|
||||
}
|
||||
|
||||
func AcquireRecord() *Record {
|
||||
return recordPool.Get().(*Record)
|
||||
@@ -26,12 +18,3 @@ func ReleaseRecord(r *Record) {
|
||||
r.Reset()
|
||||
recordPool.Put(r)
|
||||
}
|
||||
|
||||
func acquireBytesBuffer() *bytes.Buffer {
|
||||
return bytesBufferPool.Get().(*bytes.Buffer)
|
||||
}
|
||||
|
||||
func releaseBytesBuffer(buf *bytes.Buffer) {
|
||||
buf.Reset()
|
||||
bytesBufferPool.Put(buf)
|
||||
}
|
||||
|
||||
@@ -61,21 +61,24 @@ func (r *Record) Read(reader io.Reader) error {
|
||||
}
|
||||
|
||||
func (r *Record) Dump(writer io.Writer) error {
|
||||
buf := acquireBytesBuffer()
|
||||
defer releaseBytesBuffer(buf)
|
||||
buf := [2]byte{byte(r.Type), 0}
|
||||
if _, err := writer.Write(buf[:1]); err != nil {
|
||||
return fmt.Errorf("cannot dump record type: %w", err)
|
||||
}
|
||||
|
||||
bufSlice := [2]byte{byte(r.Type), 0}
|
||||
buf.Write(bufSlice[:1])
|
||||
binary.BigEndian.PutUint16(buf[:], uint16(r.Version))
|
||||
|
||||
binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Version))
|
||||
buf.Write(bufSlice[:])
|
||||
if _, err := writer.Write(buf[:]); err != nil {
|
||||
return fmt.Errorf("cannot dump version: %w", err)
|
||||
}
|
||||
|
||||
binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Payload.Len()))
|
||||
buf.Write(bufSlice[:])
|
||||
binary.BigEndian.PutUint16(buf[:], uint16(r.Payload.Len()))
|
||||
|
||||
buf.Write(r.Payload.Bytes())
|
||||
if _, err := writer.Write(buf[:]); err != nil {
|
||||
return fmt.Errorf("cannot dump payload length: %w", err)
|
||||
}
|
||||
|
||||
if _, err := buf.WriteTo(writer); err != nil {
|
||||
if _, err := writer.Write(r.Payload.Bytes()); err != nil {
|
||||
return fmt.Errorf("cannot dump record: %w", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,5 @@ func (c Conn) Write(p []byte) (int, error) {
|
||||
payload := buf.Bytes()
|
||||
c.Encryptor.XORKeyStream(payload, payload)
|
||||
|
||||
n, err := buf.WriteTo(c.Conn)
|
||||
|
||||
return int(n), err // nolint: wrapcheck
|
||||
return c.Conn.Write(payload)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user