Extracted method processQuestion()

...because `QueryResponse()` was becoming much too big.
This commit is contained in:
Brian Cunnie
2020-09-27 14:47:15 -07:00
parent 2ad70a028a
commit 41b171fe8d

View File

@@ -52,6 +52,21 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
if err = b.Question(q); err != nil {
return nil, err
}
err = processQuestion(q, &b)
if err != nil {
return nil, err
}
}
responseBytes, err := b.Finish()
// I couldn't figure an easy way to test the error condition in Ginkgo
if err != nil {
return nil, err
}
return responseBytes, nil
}
func processQuestion(q dnsmessage.Question, b *dnsmessage.Builder) error {
switch q.Type {
case dnsmessage.TypeA:
{
@@ -63,7 +78,7 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
// err == nil', and it flummoxed me.
err = b.StartAuthorities()
if err != nil {
return nil, err
return err
}
err = b.SOAResource(dnsmessage.ResourceHeader{
Name: q.Name,
@@ -73,12 +88,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
Length: 0,
}, SOAResource(q.Name.String()))
if err != nil {
return nil, err
return err
}
} else {
err = b.StartAnswers()
if err != nil {
return nil, err
return err
}
err = b.AResource(dnsmessage.ResourceHeader{
Name: q.Name,
@@ -89,7 +104,7 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
}, *nameToA)
if err != nil {
panic(err.Error())
return nil, err
return err
}
}
}
@@ -103,7 +118,7 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
// err == nil', and it flummoxed me.
err = b.StartAuthorities()
if err != nil {
return nil, err
return err
}
err = b.SOAResource(dnsmessage.ResourceHeader{
Name: q.Name,
@@ -113,12 +128,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
Length: 0,
}, SOAResource(q.Name.String()))
if err != nil {
return nil, err
return err
}
} else {
err = b.StartAnswers()
if err != nil {
return nil, err
return err
}
err = b.AAAAResource(dnsmessage.ResourceHeader{
Name: q.Name,
@@ -129,19 +144,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
}, *nameToAAAA)
if err != nil {
panic(err.Error())
return nil, err
return err
}
}
}
}
}
responseBytes, err := b.Finish()
// I couldn't figure an easy way to test the error condition in Ginkgo
if err != nil {
return nil, err
}
return responseBytes, nil
return nil
}
// ResponseHeader returns a pre-fab DNS response header. Note that we're always