From 5eeef6b28e81e4374c83378c8fe21d1553209354 Mon Sep 17 00:00:00 2001 From: xchacha20-poly1305 Date: Thu, 3 Apr 2025 20:01:08 +0800 Subject: [PATCH] Fix multiple trackers --- adapter/router.go | 2 +- box.go | 4 ++-- route/route.go | 8 ++++---- route/router.go | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/adapter/router.go b/adapter/router.go index a637e506..687943cb 100644 --- a/adapter/router.go +++ b/adapter/router.go @@ -38,7 +38,7 @@ type Router interface { ClearDNSCache() Rules() []Rule - SetTracker(tracker ConnectionTracker) + AppendTracker(tracker ConnectionTracker) ResetNetwork() } diff --git a/box.go b/box.go index 8eb8f2f3..b9f04c87 100644 --- a/box.go +++ b/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) } diff --git a/route/route.go b/route/route.go index 834d3425..6ab4cc97 100644 --- a/route/route.go +++ b/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) diff --git a/route/router.go b/route/router.go index 68f5dc35..b74af8b9 100644 --- a/route/router.go +++ b/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() {