This commit is contained in:
kony
2025-03-20 16:53:57 +08:00
parent b0a505ccf5
commit 4463a5cd0a
4 changed files with 80 additions and 37 deletions
+1 -1
View File
@@ -5,4 +5,4 @@ Website = "https://goodlink.kony.vip"
Name = "goodlink-windows-amd64-ui"
ID = "goodlink.kony.vip"
Version = "1.6.32"
Build = 2
Build = 0
+65
View File
@@ -0,0 +1,65 @@
// Copyright 2018 fatedier, fatedier@gmail.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package pool
import (
"sync"
)
var (
bufPool16k sync.Pool
bufPool5k sync.Pool
bufPool2k sync.Pool
bufPool1k sync.Pool
bufPool sync.Pool
)
func Malloc(size int) []byte {
var x interface{}
if size >= 16*1024 {
x = bufPool16k.Get()
} else if size >= 5*1024 {
x = bufPool5k.Get()
} else if size >= 2*1024 {
x = bufPool2k.Get()
} else if size >= 1*1024 {
x = bufPool1k.Get()
} else {
x = bufPool.Get()
}
if x == nil {
return make([]byte, size)
}
buf := x.([]byte)
if cap(buf) < size {
return make([]byte, size)
}
return buf[:size]
}
func Free(buf []byte) {
size := cap(buf)
if size >= 16*1024 {
bufPool16k.Put(buf)
} else if size >= 5*1024 {
bufPool5k.Put(buf)
} else if size >= 2*1024 {
bufPool2k.Put(buf)
} else if size >= 1*1024 {
bufPool1k.Put(buf)
} else {
bufPool.Put(buf)
}
}
+9 -35
View File
@@ -1,59 +1,33 @@
package proxy
import (
"goodlink/pool"
"io"
"net"
"sync"
"github.com/quic-go/quic-go"
)
var (
bufPool sync.Pool
)
func GetBuf(size int) []byte {
x := bufPool.Get()
if x == nil {
return make([]byte, size)
}
buf := x.([]byte)
if cap(buf) < size {
return make([]byte, size)
}
return buf[:size]
}
func PutBuf(buf []byte) {
bufPool.Put(buf)
}
func stunT2QProcess1(tc net.Conn, qc quic.Stream, stun_quic_conn quic.Connection) {
buf := GetBuf(1500)
buf := pool.Malloc(1500)
defer func() {
PutBuf(buf)
pool.Free(buf)
qc.Close()
tc.Close()
}()
for {
if _, err := io.CopyBuffer(tc, qc, buf); err != nil {
break
}
}
io.CopyBuffer(tc, qc, buf)
}
func stunQ2TProcess1(qc quic.Stream, tc net.Conn, stun_quic_conn quic.Connection) {
buf := GetBuf(1500)
buf := pool.Malloc(1500)
defer func() {
PutBuf(buf)
pool.Free(buf)
qc.Close()
tc.Close()
}()
for {
if _, err := io.CopyBuffer(qc, tc, buf); err != nil {
break
}
}
io.CopyBuffer(qc, tc, buf)
}
+5 -1
View File
@@ -2,6 +2,7 @@ package socks5
import (
"fmt"
"goodlink/pool"
"io"
"net"
"strconv"
@@ -357,7 +358,10 @@ type closeWriter interface {
// proxy is used to suffle data from src to destination, and sends errors
// down a dedicated channel
func proxy(dst io.Writer, src io.Reader, errCh chan error) {
_, err := io.Copy(dst, src)
buf := pool.Malloc(1500)
defer pool.Free(buf)
_, err := io.CopyBuffer(dst, src, buf)
if tcpConn, ok := dst.(closeWriter); ok {
tcpConn.CloseWrite()
}