|
|
@@ -13,6 +13,15 @@ import (
|
|
13
|
13
|
|
|
14
|
14
|
const directPipeBufferSize = 1024 * 1024
|
|
15
|
15
|
|
|
|
16
|
+var (
|
|
|
17
|
+ directPipePool = sync.Pool{
|
|
|
18
|
+ New: func() interface{} {
|
|
|
19
|
+ rv := make([]byte, directPipeBufferSize)
|
|
|
20
|
+ return &rv
|
|
|
21
|
+ },
|
|
|
22
|
+ }
|
|
|
23
|
+)
|
|
|
24
|
+
|
|
16
|
25
|
func directConnection(request *protocol.TelegramRequest) error {
|
|
17
|
26
|
telegramConnRaw, err := obfuscated2.TelegramProtocol(request)
|
|
18
|
27
|
if err != nil {
|
|
|
@@ -42,8 +51,10 @@ func directPipe(dst io.WriteCloser, src io.ReadCloser, wg *sync.WaitGroup, logge
|
|
42
|
51
|
wg.Done()
|
|
43
|
52
|
}()
|
|
44
|
53
|
|
|
45
|
|
- buf := make([]byte, directPipeBufferSize)
|
|
46
|
|
- if _, err := io.CopyBuffer(dst, src, buf); err != nil {
|
|
|
54
|
+ buf := directPipePool.Get().(*[]byte)
|
|
|
55
|
+ defer directPipePool.Put(buf)
|
|
|
56
|
+
|
|
|
57
|
+ if _, err := io.CopyBuffer(dst, src, *buf); err != nil {
|
|
47
|
58
|
logger.Debugw("Cannot pump sockets", "error", err)
|
|
48
|
59
|
}
|
|
49
|
60
|
}
|