Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user