Browse Source

Fix multiple trackers

xchacha20-poly1305 6 months ago
parent
commit
5eeef6b28e
4 changed files with 10 additions and 10 deletions
  1. 1 1
      adapter/router.go
  2. 2 2
      box.go
  3. 4 4
      route/route.go
  4. 3 3
      route/router.go

+ 1 - 1
adapter/router.go

@@ -38,7 +38,7 @@ type Router interface {
 	ClearDNSCache()
 	Rules() []Rule
 
-	SetTracker(tracker ConnectionTracker)
+	AppendTracker(tracker ConnectionTracker)
 
 	ResetNetwork()
 }

+ 2 - 2
box.go

@@ -257,7 +257,7 @@ func New(options Options) (*Box, error) {
 		if err != nil {
 			return nil, E.Cause(err, "create clash-server")
 		}
-		router.SetTracker(clashServer)
+		router.AppendTracker(clashServer)
 		service.MustRegister[adapter.ClashServer](ctx, clashServer)
 		services = append(services, clashServer)
 	}
@@ -267,7 +267,7 @@ func New(options Options) (*Box, error) {
 			return nil, E.Cause(err, "create v2ray-server")
 		}
 		if v2rayServer.StatsService() != nil {
-			router.SetTracker(v2rayServer.StatsService())
+			router.AppendTracker(v2rayServer.StatsService())
 			services = append(services, v2rayServer)
 			service.MustRegister[adapter.V2RayServer](ctx, v2rayServer)
 		}

+ 4 - 4
route/route.go

@@ -140,8 +140,8 @@ func (r *Router) routeConnection(ctx context.Context, conn net.Conn, metadata ad
 	for _, buffer := range buffers {
 		conn = bufio.NewCachedConn(conn, buffer)
 	}
-	if r.tracker != nil {
-		conn = r.tracker.RoutedConnection(ctx, conn, metadata, selectedRule, selectedOutbound)
+	for _, tracker := range r.trackers {
+		conn = tracker.RoutedConnection(ctx, conn, metadata, selectedRule, selectedOutbound)
 	}
 	if outboundHandler, isHandler := selectedOutbound.(adapter.ConnectionHandlerEx); isHandler {
 		outboundHandler.NewConnectionEx(ctx, conn, metadata, onClose)
@@ -258,8 +258,8 @@ func (r *Router) routePacketConnection(ctx context.Context, conn N.PacketConn, m
 		conn = bufio.NewCachedPacketConn(conn, buffer.Buffer, buffer.Destination)
 		N.PutPacketBuffer(buffer)
 	}
-	if r.tracker != nil {
-		conn = r.tracker.RoutedPacketConnection(ctx, conn, metadata, selectedRule, selectedOutbound)
+	for _, tracker := range r.trackers {
+		conn = tracker.RoutedPacketConnection(ctx, conn, metadata, selectedRule, selectedOutbound)
 	}
 	if metadata.FakeIP {
 		conn = bufio.NewNATPacketConn(bufio.NewNetPacketConn(conn), metadata.OriginDestination, metadata.Destination)

+ 3 - 3
route/router.go

@@ -64,7 +64,7 @@ type Router struct {
 	fakeIPStore             adapter.FakeIPStore
 	processSearcher         process.Searcher
 	pauseManager            pause.Manager
-	tracker                 adapter.ConnectionTracker
+	trackers                []adapter.ConnectionTracker
 	platformInterface       platform.Interface
 	needWIFIState           bool
 	started                 bool
@@ -511,8 +511,8 @@ func (r *Router) Rules() []adapter.Rule {
 	return r.rules
 }
 
-func (r *Router) SetTracker(tracker adapter.ConnectionTracker) {
-	r.tracker = tracker
+func (r *Router) AppendTracker(tracker adapter.ConnectionTracker) {
+	r.trackers = append(r.trackers, tracker)
 }
 
 func (r *Router) ResetNetwork() {