Sfoglia il codice sorgente

Get rid of unrequired buffering for tls records

tags/v2.0.0-rc1
9seconds 5 anni fa
parent
commit
841a4d2227

+ 5
- 22
mtglib/internal/faketls/record/pools.go Vedi File

@@ -1,22 +1,14 @@
1 1
 package record
2 2
 
3 3
 import (
4
-	"bytes"
5 4
 	"sync"
6 5
 )
7 6
 
8
-var (
9
-	recordPool = sync.Pool{
10
-		New: func() interface{} {
11
-			return &Record{}
12
-		},
13
-	}
14
-	bytesBufferPool = sync.Pool{
15
-		New: func() interface{} {
16
-			return &bytes.Buffer{}
17
-		},
18
-	}
19
-)
7
+var recordPool = sync.Pool{
8
+	New: func() interface{} {
9
+		return &Record{}
10
+	},
11
+}
20 12
 
21 13
 func AcquireRecord() *Record {
22 14
 	return recordPool.Get().(*Record)
@@ -26,12 +18,3 @@ func ReleaseRecord(r *Record) {
26 18
 	r.Reset()
27 19
 	recordPool.Put(r)
28 20
 }
29
-
30
-func acquireBytesBuffer() *bytes.Buffer {
31
-	return bytesBufferPool.Get().(*bytes.Buffer)
32
-}
33
-
34
-func releaseBytesBuffer(buf *bytes.Buffer) {
35
-	buf.Reset()
36
-	bytesBufferPool.Put(buf)
37
-}

+ 13
- 10
mtglib/internal/faketls/record/record.go Vedi File

@@ -61,21 +61,24 @@ func (r *Record) Read(reader io.Reader) error {
61 61
 }
62 62
 
63 63
 func (r *Record) Dump(writer io.Writer) error {
64
-	buf := acquireBytesBuffer()
65
-	defer releaseBytesBuffer(buf)
64
+	buf := [2]byte{byte(r.Type), 0}
65
+	if _, err := writer.Write(buf[:1]); err != nil {
66
+		return fmt.Errorf("cannot dump record type: %w", err)
67
+	}
66 68
 
67
-	bufSlice := [2]byte{byte(r.Type), 0}
68
-	buf.Write(bufSlice[:1])
69
+	binary.BigEndian.PutUint16(buf[:], uint16(r.Version))
69 70
 
70
-	binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Version))
71
-	buf.Write(bufSlice[:])
71
+	if _, err := writer.Write(buf[:]); err != nil {
72
+		return fmt.Errorf("cannot dump version: %w", err)
73
+	}
72 74
 
73
-	binary.BigEndian.PutUint16(bufSlice[:], uint16(r.Payload.Len()))
74
-	buf.Write(bufSlice[:])
75
+	binary.BigEndian.PutUint16(buf[:], uint16(r.Payload.Len()))
75 76
 
76
-	buf.Write(r.Payload.Bytes())
77
+	if _, err := writer.Write(buf[:]); err != nil {
78
+		return fmt.Errorf("cannot dump payload length: %w", err)
79
+	}
77 80
 
78
-	if _, err := buf.WriteTo(writer); err != nil {
81
+	if _, err := writer.Write(r.Payload.Bytes()); err != nil {
79 82
 		return fmt.Errorf("cannot dump record: %w", err)
80 83
 	}
81 84
 

+ 1
- 3
mtglib/internal/obfuscated2/conn.go Vedi File

@@ -32,7 +32,5 @@ func (c Conn) Write(p []byte) (int, error) {
32 32
 	payload := buf.Bytes()
33 33
 	c.Encryptor.XORKeyStream(payload, payload)
34 34
 
35
-	n, err := buf.WriteTo(c.Conn)
36
-
37
-	return int(n), err // nolint: wrapcheck
35
+	return c.Conn.Write(payload)
38 36
 }

Loading…
Annulla
Salva