diff options
Diffstat (limited to 'middleware/rewrite/class.go')
-rw-r--r-- | middleware/rewrite/class.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/middleware/rewrite/class.go b/middleware/rewrite/class.go new file mode 100644 index 000000000..78cca1a13 --- /dev/null +++ b/middleware/rewrite/class.go @@ -0,0 +1,31 @@ +// Package rewrite is middleware for rewriting requests internally to something different. +package rewrite + +import ( + "strings" + + "github.com/miekg/dns" +) + +// ClassRule is a class rewrite rule. +type ClassRule struct { + fromClass, toClass uint16 +} + +// Initializer +func (rule ClassRule) New(args ...string) Rule { + from, to := args[0], strings.Join(args[1:], " ") + return &ClassRule{dns.StringToClass[from], dns.StringToClass[to]} + +} + +// Rewrite rewrites the the current request. +func (rule ClassRule) Rewrite(r *dns.Msg) Result { + if rule.fromClass > 0 && rule.toClass > 0 { + if r.Question[0].Qclass == rule.fromClass { + r.Question[0].Qclass = rule.toClass + return RewriteDone + } + } + return RewriteIgnored +} |