fix: proxyDialer panic when domain name was not resolved

This commit is contained in:
wwqgtxx
2023-04-12 12:49:53 +08:00
parent 17922dc857
commit 20eb168315
5 changed files with 45 additions and 35 deletions

View File

@ -2,7 +2,6 @@ package tuic
import (
"net"
"net/netip"
"sync"
"sync/atomic"
"time"
@ -216,11 +215,11 @@ func (q *quicStreamPacketConn) WriteTo(p []byte, addr net.Addr) (n int, err erro
}
buf := pool.GetBuffer()
defer pool.PutBuffer(buf)
addrPort, err := netip.ParseAddrPort(addr.String())
address, err := NewAddressNetAddr(addr)
if err != nil {
return
}
err = NewPacket(q.connId, uint16(len(p)), NewAddressAddrPort(addrPort), p).WriteTo(buf)
err = NewPacket(q.connId, uint16(len(p)), address, p).WriteTo(buf)
if err != nil {
return
}

View File

@ -464,6 +464,18 @@ func NewAddress(metadata *C.Metadata) Address {
}
}
func NewAddressNetAddr(addr net.Addr) (Address, error) {
addrStr := addr.String()
if addrPort, err := netip.ParseAddrPort(addrStr); err == nil {
return NewAddressAddrPort(addrPort), nil
}
metadata := &C.Metadata{}
if err := metadata.SetRemoteAddress(addrStr); err != nil {
return Address{}, err
}
return NewAddress(metadata), nil
}
func NewAddressAddrPort(addrPort netip.AddrPort) Address {
var addrType byte
port := addrPort.Port()