Skip to content

Commit

Permalink
feat: support accept TCP DNS request
Browse files Browse the repository at this point in the history
  • Loading branch information
morytyann committed Jan 15, 2025
1 parent c7661d7 commit 8fbd48a
Showing 1 changed file with 32 additions and 9 deletions.
41 changes: 32 additions & 9 deletions dns/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ import (
)

var (
address string
server = &Server{}
address string
tcpServer = &Server{}
udpServer = &Server{}

dnsDefaultTTL uint32 = 600
)
Expand Down Expand Up @@ -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 = ""
}

Expand All @@ -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
Expand All @@ -96,11 +114,16 @@ 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()
udpServer.ActivateAndServe()
}()

log.Infoln("DNS server listening at: %s", p.LocalAddr().String())
Expand Down

0 comments on commit 8fbd48a

Please sign in to comment.