mirror of https://github.com/0xERR0R/blocky.git
71 lines
2.0 KiB
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
|
|
}
|