fix: missing metadata in mieru inbound

This commit is contained in:
wwqgtxx
2025-11-09 11:24:05 +08:00
parent 644c04fdc9
commit 0df2f79ece

View File

@@ -31,12 +31,23 @@ func Handle(conn net.Conn, tunnel C.Tunnel, request *mierumodel.Request, additio
}
// Handle the connection with tunnel.
metadata := mieruRequestToMetadata(request)
inbound.ApplyAdditions(&metadata, additions...)
switch metadata.NetWork {
case C.TCP:
tunnel.HandleTCPConn(conn, &metadata)
case C.UDP:
switch request.Command {
case mieruconstant.Socks5ConnectCmd: // TCP
metadata := &C.Metadata{
NetWork: C.TCP,
Type: C.MIERU,
DstPort: uint16(request.DstAddr.Port),
}
if request.DstAddr.FQDN != "" {
metadata.Host = request.DstAddr.FQDN
} else if request.DstAddr.IP != nil {
metadata.DstIP, _ = netip.AddrFromSlice(request.DstAddr.IP)
metadata.DstIP = metadata.DstIP.Unmap()
}
inbound.ApplyAdditions(metadata, inbound.WithSrcAddr(conn.RemoteAddr()), inbound.WithInAddr(conn.LocalAddr()))
inbound.ApplyAdditions(metadata, additions...)
tunnel.HandleTCPConn(conn, metadata)
case mieruconstant.Socks5UDPAssociateCmd: // UDP
pc := mierucommon.NewPacketOverStreamTunnel(conn)
ep := N.NewEnhancePacketConn(pc)
for {
@@ -67,24 +78,6 @@ func Handle(conn net.Conn, tunnel C.Tunnel, request *mierumodel.Request, additio
}
}
func mieruRequestToMetadata(request *mierumodel.Request) C.Metadata {
m := C.Metadata{
DstPort: uint16(request.DstAddr.Port),
}
switch request.Command {
case mieruconstant.Socks5ConnectCmd:
m.NetWork = C.TCP
case mieruconstant.Socks5UDPAssociateCmd:
m.NetWork = C.UDP
}
if request.DstAddr.FQDN != "" {
m.Host = request.DstAddr.FQDN
} else if request.DstAddr.IP != nil {
m.DstIP, _ = netip.AddrFromSlice(request.DstAddr.IP)
}
return m
}
type packet struct {
pc net.PacketConn
addr net.Addr // source (i.e. remote) IP & Port of the packet