浏览代码

Fix direct inbound

世界 3 年之前
父节点
当前提交
21641be9d1
共有 1 个文件被更改,包括 12 次插入2 次删除
  1. 12 2
      inbound/direct.go

+ 12 - 2
inbound/direct.go

@@ -52,7 +52,7 @@ func NewDirect(ctx context.Context, router adapter.Router, logger log.ContextLog
 	} else {
 		udpTimeout = 300
 	}
-	inbound.udpNat = udpnat.New[netip.AddrPort](udpTimeout, inbound.upstreamContextHandler())
+	inbound.udpNat = udpnat.New[netip.AddrPort](udpTimeout, adapter.NewUpstreamContextHandler(inbound.newConnection, inbound.newPacketConnection, inbound))
 	inbound.connHandler = inbound
 	inbound.packetHandler = inbound
 	inbound.packetUpstream = inbound.udpNat
@@ -86,7 +86,17 @@ func (d *Direct) NewPacket(ctx context.Context, conn N.PacketConn, buffer *buf.B
 		metadata.Destination.Port = d.overrideDestination.Port
 	}
 	d.udpNat.NewContextPacket(ctx, metadata.Source.AddrPort(), buffer, adapter.UpstreamMetadata(metadata), func(natConn N.PacketConn) (context.Context, N.PacketWriter) {
-		return adapter.WithContext(log.ContextWithNewID(ctx), &metadata), natConn
+		return adapter.WithContext(log.ContextWithNewID(ctx), &metadata), &udpnat.DirectBackWriter{Source: conn, Nat: natConn}
 	})
 	return nil
 }
+
+func (d *Direct) newConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error {
+	return d.router.RouteConnection(ctx, conn, metadata)
+}
+
+func (d *Direct) newPacketConnection(ctx context.Context, conn N.PacketConn, metadata adapter.InboundContext) error {
+	ctx = log.ContextWithNewID(ctx)
+	d.logger.InfoContext(ctx, "inbound packet connection from ", metadata.Source)
+	return d.router.RoutePacketConnection(ctx, conn, metadata)
+}