package inbound import ( "net" "net/netip" C "github.com/Dreamacro/clash/constant" "github.com/Dreamacro/clash/transport/socks5" ) // PacketAdapter is a UDP Packet adapter for socks/redir/tun type PacketAdapter struct { C.UDPPacket metadata *C.Metadata } // Metadata returns destination metadata func (s *PacketAdapter) Metadata() *C.Metadata { return s.metadata } // NewPacket is PacketAdapter generator func NewPacket(target socks5.Addr, originTarget net.Addr, packet C.UDPPacket, source C.Type) *PacketAdapter { metadata := parseSocksAddr(target) metadata.NetWork = C.UDP metadata.Type = source if ip, port, err := parseAddr(packet.LocalAddr()); err == nil { metadata.SrcIP = ip metadata.SrcPort = C.Port(port) } if originTarget != nil { if addrPort, err := netip.ParseAddrPort(originTarget.String()); err == nil { metadata.OriginDst = addrPort } } return &PacketAdapter{ UDPPacket: packet, metadata: metadata, } }