fix: proxyDialer panic when domain name was not resolved
This commit is contained in:
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
|
Reference in New Issue
Block a user