mirror of
https://github.com/konyshe/GoodLink.git
synced 2026-08-31 01:13:22 +08:00
u
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user