mirror of
https://github.com/MetaCubeX/Clash.Meta.git
synced 2025-04-18 08:20:53 +00:00
feat: support accept TCP DNS request
Signed-off-by: Joseph Mory <morytyann@outlook.com>
This commit is contained in:
parent
c7661d7765
commit
28d0840405
1 changed files with 35 additions and 9 deletions
|
@ -13,8 +13,9 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
address string
|
||||
server = &Server{}
|
||||
address string
|
||||
tcpServer = &Server{}
|
||||
udpServer = &Server{}
|
||||
|
||||
dnsDefaultTTL uint32 = 600
|
||||
)
|
||||
|
@ -51,13 +52,20 @@ func (s *Server) SetHandler(handler handler) {
|
|||
func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
|
||||
if addr == address && resolver != nil {
|
||||
handler := NewHandler(resolver, mapper)
|
||||
server.SetHandler(handler)
|
||||
tcpServer.SetHandler(handler)
|
||||
udpServer.SetHandler(handler)
|
||||
return
|
||||
}
|
||||
|
||||
if server.Server != nil {
|
||||
server.Shutdown()
|
||||
server = &Server{}
|
||||
if tcpServer.Server != nil {
|
||||
tcpServer.Shutdown()
|
||||
tcpServer = &Server{}
|
||||
address = ""
|
||||
}
|
||||
|
||||
if udpServer.Server != nil {
|
||||
udpServer.Shutdown()
|
||||
udpServer = &Server{}
|
||||
address = ""
|
||||
}
|
||||
|
||||
|
@ -77,6 +85,16 @@ func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
|
|||
return
|
||||
}
|
||||
|
||||
tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
l, err := net.ListenTCP("tcp", tcpAddr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
udpAddr, err := net.ResolveUDPAddr("udp", addr)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -96,11 +114,19 @@ func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
|
|||
|
||||
address = addr
|
||||
handler := NewHandler(resolver, mapper)
|
||||
server = &Server{handler: handler}
|
||||
server.Server = &D.Server{Addr: addr, PacketConn: p, Handler: server}
|
||||
|
||||
tcpServer = &Server{handler: handler}
|
||||
tcpServer.Server = &D.Server{Addr: addr, Listener: l, Handler: tcpServer}
|
||||
|
||||
udpServer = &Server{handler: handler}
|
||||
udpServer.Server = &D.Server{Addr: addr, PacketConn: p, Handler: udpServer}
|
||||
|
||||
go func() {
|
||||
server.ActivateAndServe()
|
||||
tcpServer.ActivateAndServe()
|
||||
}()
|
||||
|
||||
go func() {
|
||||
udpServer.ActivateAndServe()
|
||||
}()
|
||||
|
||||
log.Infoln("DNS server listening at: %s", p.LocalAddr().String())
|
||||
|
|
Loading…
Add table
Reference in a new issue