, runBuilder
, unauthorise
+ , setResponseCode
, addAnswer
+ , addAnswerNonuniquely
, addAuthority
, addAdditional
)
, hdIsRecursionAvailable = False
, hdResponseCode = NoError
}
- (_, result) = unB (modHeader' >> builder) initialReply
+ setNameError = do aa <- get (hdIsRecursionAvailable . msgHeader)
+ rc <- get (hdResponseCode . msgHeader)
+ anss <- get msgAnswers
+
+ when (aa && rc == NoError && null anss)
+ $ setResponseCode NameError
+
+ (_, result) = unB (modHeader' >> builder >> setNameError) initialReply
in
result
$ modify $ \ s ->
s { msgAnswers = msgAnswers s ++ [rr] }
+addAnswerNonuniquely :: SomeRR -> Builder ()
+addAnswerNonuniquely rr
+ = modify $ \ s ->
+ s { msgAnswers = msgAnswers s ++ [rr] }
+
addAuthority :: SomeRR -> Builder ()
addAuthority rr
= do anss <- get msgAnswers
unauthorise :: Builder ()
unauthorise = modifyHeader (\ h -> h { hdIsAuthoritativeAnswer = False })
+
+setResponseCode :: ResponseCode -> Builder ()
+setResponseCode code
+ = modifyHeader (\ h -> h { hdResponseCode = code })