fix buffer & dns nil
This commit is contained in:
3 files changed
+21
-5
No files matched your search
@@ -4,6 +4,7 @@ import (
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/Dreamacro/clash/common/pool"
|
||||
"github.com/google/netstack/tcpip/adapters/gonet"
|
||||
"github.com/google/netstack/tcpip/buffer"
|
||||
"github.com/google/netstack/tcpip/stack"
|
||||
@@ -24,9 +25,11 @@ func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint {
|
||||
result := &DnsRedirectEndpoint{
|
||||
stack: s,
|
||||
udpForwarder: nil,
|
||||
targetAddr: &net.UDPAddr{IP: net.ParseIP("8.8.8.8"), Port: 53},
|
||||
targetAddr: nil,
|
||||
}
|
||||
|
||||
result.SetDefaultTargetAddress()
|
||||
|
||||
result.udpForwarder = udp.NewForwarder(s, func(request *udp.ForwarderRequest) {
|
||||
var wq waiter.Queue
|
||||
ep, err := request.CreateEndpoint(&wq)
|
||||
@@ -44,7 +47,8 @@ func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint {
|
||||
|
||||
// send
|
||||
go func() {
|
||||
var buffer [128]byte
|
||||
buffer := pool.BufPool.Get().([]byte)
|
||||
defer pool.BufPool.Put(buffer[:cap(buffer)])
|
||||
|
||||
defer targetConn.Close()
|
||||
defer conn.Close()
|
||||
@@ -66,7 +70,8 @@ func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint {
|
||||
|
||||
// receive
|
||||
go func() {
|
||||
var buffer [128]byte
|
||||
buffer := pool.BufPool.Get().([]byte)
|
||||
defer pool.BufPool.Put(buffer[:cap(buffer)])
|
||||
|
||||
defer targetConn.Close()
|
||||
defer conn.Close()
|
||||
@@ -90,6 +95,10 @@ func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint {
|
||||
return result
|
||||
}
|
||||
|
||||
func (d *DnsRedirectEndpoint) SetDefaultTargetAddress() {
|
||||
d.targetAddr = &net.UDPAddr{IP: net.ParseIP(defaultDNS), Port: 53}
|
||||
}
|
||||
|
||||
func (d *DnsRedirectEndpoint) SetTargetAddress(addr *net.UDPAddr) {
|
||||
d.targetAddr = addr
|
||||
}
|
||||
|
||||
@@ -77,5 +77,9 @@ func SetDNSRedirect(addr *net.UDPAddr) {
|
||||
return
|
||||
}
|
||||
|
||||
instance.dnsRedirect.SetTargetAddress(addr)
|
||||
if addr != nil {
|
||||
instance.dnsRedirect.SetTargetAddress(addr)
|
||||
} else {
|
||||
instance.dnsRedirect.SetDefaultTargetAddress()
|
||||
}
|
||||
}
|
||||
@@ -100,7 +100,10 @@ class TunService : VpnService(), IClashEventObserver {
|
||||
override fun onProcessEvent(event: ProcessEvent?) {
|
||||
when (event) {
|
||||
ProcessEvent.STOPPED -> {
|
||||
if (start)
|
||||
val startNow = start
|
||||
start = false
|
||||
|
||||
if (startNow)
|
||||
clash.start()
|
||||
else
|
||||
stopSelf()
|
||||
|
||||
Reference in new issue
Block a user