Initial commit
This commit is contained in:
59
pipe/dsl/context.go
Normal file
59
pipe/dsl/context.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package dsl
|
||||
|
||||
import (
|
||||
"github.com/BytemarkHosting/go-pdns/pipe/backend"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Callbacks are run with a context instance, which allows them to accumulate
|
||||
// answers while maintaining a short type signature. It will also make
|
||||
// concurrent callbacks easier, when we handle that, but for now one context
|
||||
// is maintained across all callbacks for a particular query
|
||||
type Context struct {
|
||||
// Replies that don't specify a TTL will be given this instead.
|
||||
DefaultTTL int
|
||||
|
||||
// The query that triggered this callback run. Note that its QType
|
||||
// member may be "ANY"
|
||||
Query *backend.Query
|
||||
|
||||
// QType this callback is being run as. Matches the qtype field given
|
||||
// with the callback at the time DSL.Register was called
|
||||
QType string
|
||||
|
||||
// The callback is registered with a regexp; if that regexp contains
|
||||
// any match groups, then the matched text is placed here.
|
||||
Matches []string
|
||||
|
||||
// Set this if an error has been encountered; no more callbacks will be
|
||||
// run, and the error text (only) will be reported to the backend.
|
||||
Error error
|
||||
|
||||
// Answers to be sent to the backend are stored here. Context.Reply()
|
||||
// calls, etc, generate answers and put them here, for instance.
|
||||
// If multiple callbacks are being run, then later callbacks will be
|
||||
// able to see the answers earlier ones generated (for now)
|
||||
Answers []*backend.Response
|
||||
}
|
||||
|
||||
// Add an answer, using default QName and TTL for the query
|
||||
func (c *Context) Reply(content string) {
|
||||
c.ReplyExtra(c.Query.QName, content, c.DefaultTTL)
|
||||
}
|
||||
|
||||
// Add an answer, using the default QName but specifying a particular TTL
|
||||
func (c *Context) ReplyTTL(content string, ttl int) {
|
||||
c.ReplyExtra(c.Query.QName, content, ttl)
|
||||
}
|
||||
|
||||
// Add an answer, specifying both QName and TTL.
|
||||
func (c *Context) ReplyExtra(qname, content string, ttl int) {
|
||||
c.Answers = append(c.Answers, &backend.Response{
|
||||
QName: qname,
|
||||
QClass: c.Query.QClass,
|
||||
QType: c.QType, // q.Query.QType may == "ANY"
|
||||
Id: c.Query.Id,
|
||||
Content: content,
|
||||
TTL: strconv.Itoa(ttl),
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user