Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>

This commit is contained in:
arraykeys@gmail.com
2017-10-24 20:09:43 +08:00
parent 8a75e202d6
commit 581ff2b840
6 changed files with 19 additions and 47 deletions

View File

@ -239,7 +239,7 @@ func (s *HTTP) OutToTCP(useProxy bool, address string, inConn *net.Conn, req *ut
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)
}, func(n int, d bool) {}, 0) })
log.Printf("conn %s - %s - %s - %s connected [%s]", inAddr, inLocalAddr, outLocalAddr, outAddr, req.Host) log.Printf("conn %s - %s - %s - %s connected [%s]", inAddr, inLocalAddr, outLocalAddr, outAddr, req.Host)
return return

View File

@ -109,7 +109,7 @@ func (s *TCP) OutToTCP(inConn *net.Conn) (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)
}, func(n int, d bool) {}, 0) })
log.Printf("conn %s - %s - %s - %s connected", inAddr, inLocalAddr, outLocalAddr, outAddr) log.Printf("conn %s - %s - %s - %s connected", inAddr, inLocalAddr, outLocalAddr, outAddr)
return return
} }

View File

@ -119,7 +119,7 @@ func (s *TunnelBridge) Start(args interface{}) (err error) {
s.cmClient.RemoveOne(key, ID) s.cmClient.RemoveOne(key, ID)
s.cmServer.RemoveOne(serverID, ID) s.cmServer.RemoveOne(serverID, ID)
log.Printf("conn %s released", ID) log.Printf("conn %s released", ID)
}, func(i int, b bool) {}, 0) })
s.cmClient.Add(key, ID, &inConn) s.cmClient.Add(key, ID, &inConn)
log.Printf("conn %s created", ID) log.Printf("conn %s created", ID)

View File

@ -228,7 +228,7 @@ func (s *TunnelClient) ServeConn(localAddr, ID, serverID string) {
utils.CloseConn(&inConn) utils.CloseConn(&inConn)
utils.CloseConn(&outConn) utils.CloseConn(&outConn)
s.cm.RemoveOne(*s.cfg.Key, ID) s.cm.RemoveOne(*s.cfg.Key, ID)
}, func(i int, b bool) {}, 0) })
s.cm.Add(*s.cfg.Key, ID, &inConn) s.cm.Add(*s.cfg.Key, ID, &inConn)
log.Printf("conn %s created", ID) log.Printf("conn %s created", ID)
} }

View File

@ -244,7 +244,7 @@ func (s *TunnelServer) Start(args interface{}) (err error) {
utils.CloseConn(&inConn) utils.CloseConn(&inConn)
s.cfg.Mgr.cm.RemoveOne(s.cfg.Mgr.serverID, ID) s.cfg.Mgr.cm.RemoveOne(s.cfg.Mgr.serverID, ID)
log.Printf("%s conn %s released", *s.cfg.Key, ID) log.Printf("%s conn %s released", *s.cfg.Key, ID)
}, func(i int, b bool) {}, 0) })
//add conn //add conn
s.cfg.Mgr.cm.Add(s.cfg.Mgr.serverID, ID, &inConn) s.cfg.Mgr.cm.Add(s.cfg.Mgr.serverID, ID, &inConn)
log.Printf("%s conn %s created", *s.cfg.Key, ID) log.Printf("%s conn %s created", *s.cfg.Key, ID)

View File

@ -50,7 +50,7 @@ func IoBind0(dst io.ReadWriter, src io.ReadWriter, fn func(err error)) {
}() }()
}() }()
} }
func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error), cfn func(count int, isPositive bool), bytesPreSec float64) { func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error)) {
var one = &sync.Once{} var one = &sync.Once{}
go func() { go func() {
defer func() { defer func() {
@ -59,18 +59,7 @@ func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error), cfn func(c
} }
}() }()
var err error var err error
if bytesPreSec > 0 { _, err = ioCopy(dst, src)
newreader := NewReader(src)
newreader.SetRateLimit(bytesPreSec)
_, err = ioCopy(dst, newreader, func(c int) {
cfn(c, false)
})
} else {
_, err = ioCopy(dst, src, func(c int) {
cfn(c, false)
})
}
if err != nil { if err != nil {
one.Do(func() { one.Do(func() {
fn(err) fn(err)
@ -84,17 +73,7 @@ func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error), cfn func(c
} }
}() }()
var err error var err error
if bytesPreSec > 0 { _, err = ioCopy(src, dst)
newReader := NewReader(dst)
newReader.SetRateLimit(bytesPreSec)
_, err = ioCopy(src, newReader, func(c int) {
cfn(c, true)
})
} else {
_, err = ioCopy(src, dst, func(c int) {
cfn(c, true)
})
}
if err != nil { if err != nil {
one.Do(func() { one.Do(func() {
fn(err) fn(err)
@ -102,18 +81,15 @@ func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error), cfn func(c
} }
}() }()
} }
func ioCopy(dst io.Writer, src io.Reader, fn ...func(count int)) (written int64, err error) { func ioCopy(dst io.Writer, src io.Reader) (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)
if nr > 0 { if er != nil {
err = er
break
}
nw, ew := dst.Write(buf[0:nr]) nw, ew := dst.Write(buf[0:nr])
if nw > 0 {
written += int64(nw)
if len(fn) == 1 {
fn[0](nw)
}
}
if ew != nil { if ew != nil {
err = ew err = ew
break break
@ -122,11 +98,7 @@ func ioCopy(dst io.Writer, src io.Reader, fn ...func(count int)) (written int64,
err = io.ErrShortWrite err = io.ErrShortWrite
break break
} }
} written += int64(nw)
if er != nil {
err = er
break
}
} }
return written, err return written, err
} }