forked from Mxmilu666/frp
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
406ea5ebee
|
|||
|
81a92d19d5
|
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
package version
|
package version
|
||||||
|
|
||||||
var version = "LoliaFRP-CLI 0.67.2"
|
var version = "LoliaFRP-CLI 0.67.3"
|
||||||
|
|
||||||
func Full() string {
|
func Full() string {
|
||||||
return version
|
return version
|
||||||
|
|||||||
@@ -181,18 +181,26 @@ func (pxy *HTTPProxy) GetRealConn(remoteAddr string) (workConn net.Conn, err err
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
name := pxy.GetName()
|
||||||
|
proxyType := pxy.GetConfigurer().GetBaseConfig().Type
|
||||||
|
rwc = wrapCountingReadWriteCloser(rwc, func(bytes int64) {
|
||||||
|
metrics.Server.AddTrafficOut(name, proxyType, bytes)
|
||||||
|
}, func(bytes int64) {
|
||||||
|
metrics.Server.AddTrafficIn(name, proxyType, bytes)
|
||||||
|
})
|
||||||
|
|
||||||
workConn = netpkg.WrapReadWriteCloserToConn(rwc, tmpConn)
|
workConn = netpkg.WrapReadWriteCloserToConn(rwc, tmpConn)
|
||||||
workConn = netpkg.WrapStatsConn(workConn, pxy.updateStatsAfterClosedConn)
|
workConn = netpkg.WrapCloseNotifyConn(workConn, func(error) {
|
||||||
metrics.Server.OpenConnection(pxy.GetName(), pxy.GetConfigurer().GetBaseConfig().Type)
|
pxy.updateStatsAfterClosedConn()
|
||||||
|
})
|
||||||
|
metrics.Server.OpenConnection(name, proxyType)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pxy *HTTPProxy) updateStatsAfterClosedConn(totalRead, totalWrite int64) {
|
func (pxy *HTTPProxy) updateStatsAfterClosedConn() {
|
||||||
name := pxy.GetName()
|
name := pxy.GetName()
|
||||||
proxyType := pxy.GetConfigurer().GetBaseConfig().Type
|
proxyType := pxy.GetConfigurer().GetBaseConfig().Type
|
||||||
metrics.Server.CloseConnection(name, proxyType)
|
metrics.Server.CloseConnection(name, proxyType)
|
||||||
metrics.Server.AddTrafficIn(name, proxyType, totalWrite)
|
|
||||||
metrics.Server.AddTrafficOut(name, proxyType, totalRead)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pxy *HTTPProxy) Close() {
|
func (pxy *HTTPProxy) Close() {
|
||||||
|
|||||||
@@ -263,11 +263,18 @@ func (pxy *BaseProxy) handleUserTCPConnection(userConn net.Conn) {
|
|||||||
|
|
||||||
name := pxy.GetName()
|
name := pxy.GetName()
|
||||||
proxyType := cfg.Type
|
proxyType := cfg.Type
|
||||||
|
local = wrapCountingReadWriteCloser(local, nil, func(bytes int64) {
|
||||||
|
metrics.Server.AddTrafficIn(name, proxyType, bytes)
|
||||||
|
})
|
||||||
|
userConn = netpkg.WrapReadWriteCloserToConn(
|
||||||
|
wrapCountingReadWriteCloser(userConn, nil, func(bytes int64) {
|
||||||
|
metrics.Server.AddTrafficOut(name, proxyType, bytes)
|
||||||
|
}),
|
||||||
|
userConn,
|
||||||
|
)
|
||||||
metrics.Server.OpenConnection(name, proxyType)
|
metrics.Server.OpenConnection(name, proxyType)
|
||||||
inCount, outCount, _ := libio.Join(local, userConn)
|
_, _, _ = libio.Join(local, userConn)
|
||||||
metrics.Server.CloseConnection(name, proxyType)
|
metrics.Server.CloseConnection(name, proxyType)
|
||||||
metrics.Server.AddTrafficIn(name, proxyType, inCount)
|
|
||||||
metrics.Server.AddTrafficOut(name, proxyType, outCount)
|
|
||||||
xl.Debugf("join connections closed")
|
xl.Debugf("join connections closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
36
server/proxy/traffic_counter.go
Normal file
36
server/proxy/traffic_counter.go
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package proxy
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
type countingReadWriteCloser struct {
|
||||||
|
io.ReadWriteCloser
|
||||||
|
onRead func(int64)
|
||||||
|
onWrite func(int64)
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapCountingReadWriteCloser(rwc io.ReadWriteCloser, onRead, onWrite func(int64)) io.ReadWriteCloser {
|
||||||
|
if onRead == nil && onWrite == nil {
|
||||||
|
return rwc
|
||||||
|
}
|
||||||
|
return &countingReadWriteCloser{
|
||||||
|
ReadWriteCloser: rwc,
|
||||||
|
onRead: onRead,
|
||||||
|
onWrite: onWrite,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *countingReadWriteCloser) Read(p []byte) (n int, err error) {
|
||||||
|
n, err = c.ReadWriteCloser.Read(p)
|
||||||
|
if n > 0 && c.onRead != nil {
|
||||||
|
c.onRead(int64(n))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *countingReadWriteCloser) Write(p []byte) (n int, err error) {
|
||||||
|
n, err = c.ReadWriteCloser.Write(p)
|
||||||
|
if n > 0 && c.onWrite != nil {
|
||||||
|
c.onWrite(int64(n))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user