Fix: vmess udp crash

This commit is contained in:
Dreamacro
2020-02-17 17:34:19 +08:00
parent e9032c55fa
commit 7b48138ad0
9 changed files with 81 additions and 43 deletions

View File

@ -81,8 +81,8 @@ func handleHTTP(request *adapters.HTTPAdapter, outbound net.Conn) {
}
}
func handleUDPToRemote(packet C.UDPPacket, pc net.PacketConn, addr net.Addr) {
if _, err := pc.WriteTo(packet.Data(), addr); err != nil {
func handleUDPToRemote(packet C.UDPPacket, pc C.PacketConn, metadata *C.Metadata) {
if _, err := pc.WriteWithMetadata(packet.Data(), metadata); err != nil {
return
}
DefaultManager.Upload() <- int64(len(packet.Data()))

View File

@ -190,16 +190,7 @@ func handleUDPConn(packet *inbound.PacketAdapter) {
key := packet.LocalAddr().String()
pc := natTable.Get(key)
if pc != nil {
if !metadata.Resolved() {
ip, err := resolver.ResolveIP(metadata.Host)
if err != nil {
log.Warnln("[UDP] Resolve %s failed: %s, %#v", metadata.Host, err.Error(), metadata)
return
}
metadata.DstIP = ip
}
handleUDPToRemote(packet, pc, metadata.UDPAddr())
handleUDPToRemote(packet, pc, metadata)
return
}
@ -246,14 +237,7 @@ func handleUDPConn(packet *inbound.PacketAdapter) {
wg.Wait()
pc := natTable.Get(key)
if pc != nil {
if !metadata.Resolved() {
ip, err := resolver.ResolveIP(metadata.Host)
if err != nil {
return
}
metadata.DstIP = ip
}
handleUDPToRemote(packet, pc, metadata.UDPAddr())
handleUDPToRemote(packet, pc, metadata)
}
}()
}