blocky/model/models.go

71 lines
2.0 KiB
Go

package model
//go:generate go run github.com/abice/go-enum -f=$GOFILE --marshal --names
import (
"net"
"time"
"github.com/miekg/dns"
)
// ResponseType represents the type of the response ENUM(
// RESOLVED // the response was resolved by the external upstream resolver
// CACHED // the response was resolved from cache
// BLOCKED // the query was blocked
// CONDITIONAL // the query was resolved by the conditional upstream resolver
// CUSTOMDNS // the query was resolved by a custom rule
// HOSTSFILE // the query was resolved by looking up the hosts file
// FILTERED // the query was filtered by query type
// NOTFQDN // the query was filtered as it is not fqdn conform
// SPECIAL // the query was resolved by the special use domain name resolver
// )
type ResponseType int
func (t ResponseType) ToExtendedErrorCode() uint16 {
switch t {
case ResponseTypeRESOLVED:
return dns.ExtendedErrorCodeOther
case ResponseTypeCACHED:
return dns.ExtendedErrorCodeCachedError
case ResponseTypeCONDITIONAL:
return dns.ExtendedErrorCodeForgedAnswer
case ResponseTypeCUSTOMDNS:
return dns.ExtendedErrorCodeForgedAnswer
case ResponseTypeHOSTSFILE:
return dns.ExtendedErrorCodeForgedAnswer
case ResponseTypeNOTFQDN:
return dns.ExtendedErrorCodeBlocked
case ResponseTypeBLOCKED:
return dns.ExtendedErrorCodeBlocked
case ResponseTypeFILTERED:
return dns.ExtendedErrorCodeFiltered
case ResponseTypeSPECIAL:
return dns.ExtendedErrorCodeFiltered
default:
return dns.ExtendedErrorCodeOther
}
}
// Response represents the response of a DNS query
type Response struct {
Res *dns.Msg
Reason string
RType ResponseType
}
// RequestProtocol represents the server protocol ENUM(
// TCP // is the TCP protocol
// UDP // is the UDP protocol
// )
type RequestProtocol uint8
// Request represents client's DNS request
type Request struct {
ClientIP net.IP
RequestClientID string
Protocol RequestProtocol
ClientNames []string
Req *dns.Msg
RequestTS time.Time
}