fix buffer & dns nil

This commit is contained in:
Kr328 committed 2019-11-30 01:58:06 +08:00
1 parent cdf7107d5a
commit 70c8bb19a7
3 files changed
+21 -5

No files matched your search

+12 -3
View File
@@ -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
}
+5 -1
View File
@@ -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()