1
0
Эх сурвалжийг харах

Fix user download stats with splice

yuhan6665 1 жил өмнө
parent
commit
9b5c3f417e
1 өөрчлөгдсөн 7 нэмэгдсэн , 2 устгасан
  1. 7 2
      proxy/proxy.go

+ 7 - 2
proxy/proxy.go

@@ -16,6 +16,7 @@ import (
 	"time"
 
 	"github.com/pires/go-proxyproto"
+	"github.com/xtls/xray-core/app/dispatcher"
 	"github.com/xtls/xray-core/common/buf"
 	"github.com/xtls/xray-core/common/errors"
 	"github.com/xtls/xray-core/common/net"
@@ -478,14 +479,18 @@ func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net
 			for inbound.CanSpliceCopy != 3 {
 				if inbound.CanSpliceCopy == 1 {
 					newError("CopyRawConn splice").WriteToLog(session.ExportIDToError(ctx))
+					statWriter, _ := writer.(*dispatcher.SizeStatWriter)
 					//runtime.Gosched() // necessary
 					time.Sleep(time.Millisecond) // without this, there will be a rare ssl error for freedom splice
 					w, err := tc.ReadFrom(readerConn)
 					if readCounter != nil {
-						readCounter.Add(w)
+						readCounter.Add(w) // outbound stats
 					}
 					if writeCounter != nil {
-						writeCounter.Add(w)
+						writeCounter.Add(w) // inbound stats
+					}
+					if statWriter != nil {
+						statWriter.Counter.Add(w) // user stats
 					}
 					if err != nil && errors.Cause(err) != io.EOF {
 						return err