aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-01-26 16:49:24 +0700
committerShulhan <ms@kilabit.info>2026-02-02 16:28:11 +0700
commit69ccba6797c5e74957759427654f8e11a2e9d09b (patch)
tree4023ec02835a1cc3b86a16eadb2df8f52472f7be
parent85c11aee794ae488a41c5b718b6b266afb617b7d (diff)
downloadpakakeh.go-69ccba6797c5e74957759427654f8e11a2e9d09b.tar.xz
lib/dns: changes the request's kind field to string
This is to minimize lookup on map each time we need the string representation.
-rw-r--r--lib/dns/dns.go18
-rw-r--r--lib/dns/request.go14
-rw-r--r--lib/dns/server.go67
3 files changed, 38 insertions, 61 deletions
diff --git a/lib/dns/dns.go b/lib/dns/dns.go
index 5e9395d6..8e13200d 100644
--- a/lib/dns/dns.go
+++ b/lib/dns/dns.go
@@ -66,24 +66,6 @@ var (
clientTimeout = 60 * time.Second
)
-type connType byte
-
-// List of known connection type.
-const (
- connTypeUDP connType = 1 << iota
- connTypeTCP
- connTypeDoH
- connTypeDoT
-)
-
-// connTypeNames contains a mapping between connection type and its name.
-var connTypeNames = map[connType]string{
- connTypeUDP: "UDP",
- connTypeTCP: "TCP",
- connTypeDoH: "DoH",
- connTypeDoT: "DoT",
-}
-
// OpCode define a custom type for DNS header operation code.
type OpCode byte
diff --git a/lib/dns/request.go b/lib/dns/request.go
index dd1b0925..2b500f81 100644
--- a/lib/dns/request.go
+++ b/lib/dns/request.go
@@ -10,6 +10,14 @@ import (
"time"
)
+// List of connection type for [request.kind].
+const (
+ connTypeDoH = `DoH`
+ connTypeDoT = `DoT`
+ connTypeTCP = `TCP`
+ connTypeUDP = `UDP`
+)
+
// request contains UDP address and DNS query message from client.
//
// If Kind is UDP, Sender and UDPAddr must be non nil.
@@ -31,9 +39,9 @@ type request struct {
// startAt set the start time the request received by server.
startAt time.Time
- // Kind define the connection type that this request is belong to,
- // e.g. UDP, TCP, or DoH.
- kind connType
+ // kind define the connection type that this request is belong to:
+ // DOH, DOT, TCP, or UDP.
+ kind string
}
// newRequest create and initialize request.
diff --git a/lib/dns/server.go b/lib/dns/server.go
index 438c36dd..f834a38b 100644
--- a/lib/dns/server.go
+++ b/lib/dns/server.go
@@ -522,7 +522,7 @@ func (srv *Server) incForwarder() {
srv.fwLocker.Unlock()
}
-func (srv *Server) serveTCPClient(logp string, cl *TCPClient, kind connType) {
+func (srv *Server) serveTCPClient(logp string, cl *TCPClient, kind string) {
for {
var err error
var req = newRequest()
@@ -594,8 +594,7 @@ func (srv *Server) processRequest() {
}
if srv.opts.Debug&DebugLevelCache != 0 {
- log.Printf(`> %s - - %s - - -`,
- connTypeNames[req.kind], req.String())
+ log.Printf(`> %s - - %s - - -`, req.kind, req.String())
}
an = srv.Caches.query(req.message)
@@ -610,8 +609,7 @@ func (srv *Server) processRequest() {
default:
if srv.opts.Debug&DebugLevelCache != 0 {
log.Printf(`* %s - - %s - - -: no active forwarders`,
- connTypeNames[req.kind],
- req.String())
+ req.kind, req.String())
}
req.error(RCodeErrServer)
}
@@ -630,8 +628,7 @@ func (srv *Server) processRequest() {
default:
if srv.opts.Debug&DebugLevelCache != 0 {
log.Printf(`* %s - - %s - - -: answer is expired and no active forwarders`,
- connTypeNames[req.kind],
- req.String())
+ req.kind, req.String())
}
req.error(RCodeErrServer)
}
@@ -644,14 +641,12 @@ func (srv *Server) processRequest() {
_, err = req.writer.Write(res.packet)
if err != nil {
- log.Printf(`! %s - - %s - - -: %s`,
- connTypeNames[req.kind], an.String(), err)
+ log.Printf(`! %s - - %s - - -: %s`, req.kind, an.String(), err)
continue
}
if srv.opts.Debug&DebugLevelCache != 0 {
- log.Printf(`< %s - - %s - - -`,
- connTypeNames[req.kind], an.String())
+ log.Printf(`< %s - - %s - - -`, req.kind, an.String())
}
}
}
@@ -785,9 +780,8 @@ func (srv *Server) dohForwarder(tag, nameserver string) {
res, err = forwarder.Query(req.message)
if err != nil {
log.Printf(`! %s %s %s %s - - -: forward failed %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(),
- err)
+ req.kind, tag, nameserver,
+ req.String(), err)
if !errors.Is(err, errInvalidMessage) {
isRunning = false
}
@@ -801,20 +795,20 @@ func (srv *Server) dohForwarder(tag, nameserver string) {
avgElapsed := time.Duration(totalElapsed / totalQuery)
if err != nil {
log.Printf(`! %s %s %s %s %v %d %v: %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(),
+ req.kind, tag, nameserver,
+ req.String(),
elapsed, totalQuery, avgElapsed, err)
continue
}
if srv.opts.Debug&DebugLevelCache != 0 {
if isInserted {
log.Printf(`+ %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
} else {
log.Printf(`# %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
}
@@ -889,9 +883,8 @@ func (srv *Server) tlsForwarder(tag, nameserver string) {
res, err = forwarder.Query(req.message)
if err != nil {
log.Printf(`! %s %s %s %s - - -: forward failed %s`,
- connTypeNames[req.kind],
- logp, tag, req.String(),
- err)
+ req.kind, logp, tag,
+ req.String(), err)
if !errors.Is(err, errInvalidMessage) {
isRunning = false
}
@@ -905,8 +898,7 @@ func (srv *Server) tlsForwarder(tag, nameserver string) {
avgElapsed := time.Duration(totalElapsed / totalQuery)
if err != nil {
log.Printf(`! %s %s %s %s %v %d %v: %s`,
- connTypeNames[req.kind],
- tag, nameserver,
+ req.kind, tag, nameserver,
req.String(),
elapsed, totalQuery, avgElapsed, err)
continue
@@ -914,12 +906,12 @@ func (srv *Server) tlsForwarder(tag, nameserver string) {
if srv.opts.Debug&DebugLevelCache != 0 {
if isInserted {
log.Printf(`+ %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
} else {
log.Printf(`# %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
}
@@ -986,8 +978,7 @@ func (srv *Server) tcpForwarder(tag, nameserver string) {
cl.Close()
if err != nil {
log.Printf(`! %s %s %s %s - - -: forward failed %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(), err)
+ req.kind, tag, nameserver, req.String(), err)
continue
}
@@ -998,21 +989,18 @@ func (srv *Server) tcpForwarder(tag, nameserver string) {
avgElapsed := time.Duration(totalElapsed / totalQuery)
if err != nil {
log.Printf(`! %s %s %s %s %v %d %v: %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(),
+ req.kind, tag, nameserver, req.String(),
elapsed, totalQuery, avgElapsed, err)
continue
}
if srv.opts.Debug&DebugLevelCache != 0 {
if isInserted {
log.Printf(`+ %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
- tag, nameserver, an.String(),
+ req.kind, tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
} else {
log.Printf(`# %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
- tag, nameserver, an.String(),
+ req.kind, tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
}
}
@@ -1088,9 +1076,8 @@ func (srv *Server) udpForwarder(tag, nameserver string) {
res, err = forwarder.Query(req.message)
if err != nil {
log.Printf(`! %s %s %s %s - - -: forward failed %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(),
- err)
+ req.kind, tag, nameserver,
+ req.String(), err)
if !errors.Is(err, errInvalidMessage) {
isRunning = false
}
@@ -1104,20 +1091,20 @@ func (srv *Server) udpForwarder(tag, nameserver string) {
avgElapsed := time.Duration(totalElapsed / totalQuery)
if err != nil {
log.Printf(`! %s %s %s %s %v %d %v: %s`,
- connTypeNames[req.kind],
- tag, nameserver, req.String(),
+ req.kind, tag, nameserver,
+ req.String(),
elapsed, totalQuery, avgElapsed, err)
continue
}
if srv.opts.Debug&DebugLevelCache != 0 {
if isInserted {
log.Printf(`+ %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
} else {
log.Printf(`# %s %s %s %s %v %d %v`,
- connTypeNames[req.kind],
+ req.kind,
tag, nameserver, an.String(),
elapsed, totalQuery, avgElapsed)
}