no message
This commit is contained in:
@ -139,7 +139,7 @@ func (s *HTTP) OutToTCP(useProxy bool, address string, inConn *net.Conn, req *ut
|
|||||||
} else {
|
} else {
|
||||||
outConn.Write(req.HeadBuf)
|
outConn.Write(req.HeadBuf)
|
||||||
}
|
}
|
||||||
utils.IoBind((*inConn), outConn, func(isSrcErr bool, err error) {
|
utils.IoBind((*inConn), outConn, func(err error) {
|
||||||
log.Printf("conn %s - %s - %s -%s released [%s]", inAddr, inLocalAddr, outLocalAddr, outAddr, req.Host)
|
log.Printf("conn %s - %s - %s -%s released [%s]", inAddr, inLocalAddr, outLocalAddr, outAddr, req.Host)
|
||||||
utils.CloseConn(inConn)
|
utils.CloseConn(inConn)
|
||||||
utils.CloseConn(&outConn)
|
utils.CloseConn(&outConn)
|
||||||
|
|||||||
@ -98,7 +98,7 @@ func (s *TCP) OutToTCP(inConn *net.Conn) (err error) {
|
|||||||
inLocalAddr := (*inConn).LocalAddr().String()
|
inLocalAddr := (*inConn).LocalAddr().String()
|
||||||
outAddr := outConn.RemoteAddr().String()
|
outAddr := outConn.RemoteAddr().String()
|
||||||
outLocalAddr := outConn.LocalAddr().String()
|
outLocalAddr := outConn.LocalAddr().String()
|
||||||
utils.IoBind((*inConn), outConn, func(isSrcErr bool, err error) {
|
utils.IoBind((*inConn), outConn, func(err error) {
|
||||||
log.Printf("conn %s - %s - %s -%s released", inAddr, inLocalAddr, outLocalAddr, outAddr)
|
log.Printf("conn %s - %s - %s -%s released", inAddr, inLocalAddr, outLocalAddr, outAddr)
|
||||||
utils.CloseConn(inConn)
|
utils.CloseConn(inConn)
|
||||||
utils.CloseConn(&outConn)
|
utils.CloseConn(&outConn)
|
||||||
|
|||||||
@ -154,7 +154,7 @@ func (s *TunnelBridge) Start(args interface{}) (err error) {
|
|||||||
// log.Printf("%s conn %s from client released", key, ID)
|
// log.Printf("%s conn %s from client released", key, ID)
|
||||||
// hw.Close()
|
// hw.Close()
|
||||||
// })
|
// })
|
||||||
utils.IoBind(serverConn, inConn, func(isSrcErr bool, err error) {
|
utils.IoBind(serverConn, inConn, func(err error) {
|
||||||
// utils.IoBind(serverConn, inConn, func(isSrcErr bool, err error) {
|
// utils.IoBind(serverConn, inConn, func(isSrcErr bool, err error) {
|
||||||
serverConn.Close()
|
serverConn.Close()
|
||||||
utils.CloseConn(&inConn)
|
utils.CloseConn(&inConn)
|
||||||
|
|||||||
@ -224,7 +224,7 @@ func (s *TunnelClient) ServeConn(localAddr, ID string) {
|
|||||||
log.Printf("build connection error, err: %s", err)
|
log.Printf("build connection error, err: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
utils.IoBind(inConn, outConn, func(isSrcErr bool, err error) {
|
utils.IoBind(inConn, outConn, func(err error) {
|
||||||
log.Printf("conn %s released", ID)
|
log.Printf("conn %s released", ID)
|
||||||
utils.CloseConn(&inConn)
|
utils.CloseConn(&inConn)
|
||||||
utils.CloseConn(&outConn)
|
utils.CloseConn(&outConn)
|
||||||
|
|||||||
@ -95,7 +95,7 @@ func (s *TunnelServer) Start(args interface{}) (err error) {
|
|||||||
log.Printf("%s conn %s to bridge released", *s.cfg.Key, ID)
|
log.Printf("%s conn %s to bridge released", *s.cfg.Key, ID)
|
||||||
hb.Close()
|
hb.Close()
|
||||||
})
|
})
|
||||||
utils.IoBind(inConn, &hb, func(isSrcErr bool, err error) {
|
utils.IoBind(inConn, &hb, func(err error) {
|
||||||
//utils.IoBind(inConn, outConn, func(isSrcErr bool, err error) {
|
//utils.IoBind(inConn, outConn, func(isSrcErr bool, err error) {
|
||||||
utils.CloseConn(&outConn)
|
utils.CloseConn(&outConn)
|
||||||
utils.CloseConn(&inConn)
|
utils.CloseConn(&inConn)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(isSrcErr bool, err error), cfn func(count int, isPositive bool), bytesPreSec float64) {
|
func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error), cfn func(count int, isPositive bool), bytesPreSec float64) {
|
||||||
var one = &sync.Once{}
|
var one = &sync.Once{}
|
||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -31,22 +31,21 @@ func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(isSrcErr bool, err err
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
var err error
|
var err error
|
||||||
var isSrcErr bool
|
|
||||||
if bytesPreSec > 0 {
|
if bytesPreSec > 0 {
|
||||||
newreader := NewReader(src)
|
newreader := NewReader(src)
|
||||||
newreader.SetRateLimit(bytesPreSec)
|
newreader.SetRateLimit(bytesPreSec)
|
||||||
_, isSrcErr, err = ioCopy(dst, newreader, func(c int) {
|
_, err = ioCopy(dst, newreader, func(c int) {
|
||||||
cfn(c, false)
|
cfn(c, false)
|
||||||
})
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_, isSrcErr, err = ioCopy(dst, src, func(c int) {
|
_, err = ioCopy(dst, src, func(c int) {
|
||||||
cfn(c, false)
|
cfn(c, false)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
one.Do(func() {
|
one.Do(func() {
|
||||||
fn(isSrcErr, err)
|
fn(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -57,26 +56,25 @@ func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(isSrcErr bool, err err
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
var err error
|
var err error
|
||||||
var isSrcErr bool
|
|
||||||
if bytesPreSec > 0 {
|
if bytesPreSec > 0 {
|
||||||
newReader := NewReader(dst)
|
newReader := NewReader(dst)
|
||||||
newReader.SetRateLimit(bytesPreSec)
|
newReader.SetRateLimit(bytesPreSec)
|
||||||
_, isSrcErr, err = ioCopy(src, newReader, func(c int) {
|
_, err = ioCopy(src, newReader, func(c int) {
|
||||||
cfn(c, true)
|
cfn(c, true)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
_, isSrcErr, err = ioCopy(src, dst, func(c int) {
|
_, err = ioCopy(src, dst, func(c int) {
|
||||||
cfn(c, true)
|
cfn(c, true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
one.Do(func() {
|
one.Do(func() {
|
||||||
fn(isSrcErr, err)
|
fn(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
func ioCopy(dst io.Writer, src io.Reader, fn ...func(count int)) (written int64, isSrcErr bool, err error) {
|
func ioCopy(dst io.Writer, src io.Reader, fn ...func(count int)) (written int64, err error) {
|
||||||
buf := make([]byte, 32*1024)
|
buf := make([]byte, 32*1024)
|
||||||
for {
|
for {
|
||||||
nr, er := src.Read(buf)
|
nr, er := src.Read(buf)
|
||||||
@ -99,11 +97,10 @@ func ioCopy(dst io.Writer, src io.Reader, fn ...func(count int)) (written int64,
|
|||||||
}
|
}
|
||||||
if er != nil {
|
if er != nil {
|
||||||
err = er
|
err = er
|
||||||
isSrcErr = true
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return written, isSrcErr, err
|
return written, err
|
||||||
}
|
}
|
||||||
func TlsConnectHost(host string, timeout int, certBytes, keyBytes []byte) (conn tls.Conn, err error) {
|
func TlsConnectHost(host string, timeout int, certBytes, keyBytes []byte) (conn tls.Conn, err error) {
|
||||||
h := strings.Split(host, ":")
|
h := strings.Split(host, ":")
|
||||||
|
|||||||
Reference in New Issue
Block a user