no message

This commit is contained in:
arraykeys
2017-10-04 12:44:51 +08:00
parent 644ec6891d
commit ae56bb1edd
6 changed files with 14 additions and 17 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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, ":")