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 { if err = b.Question(q); err != nil {
return nil, err 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 { switch q.Type {
case dnsmessage.TypeA: case dnsmessage.TypeA:
{ {
@@ -63,7 +78,7 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
// err == nil', and it flummoxed me. // err == nil', and it flummoxed me.
err = b.StartAuthorities() err = b.StartAuthorities()
if err != nil { if err != nil {
return nil, err return err
} }
err = b.SOAResource(dnsmessage.ResourceHeader{ err = b.SOAResource(dnsmessage.ResourceHeader{
Name: q.Name, Name: q.Name,
@@ -73,12 +88,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
Length: 0, Length: 0,
}, SOAResource(q.Name.String())) }, SOAResource(q.Name.String()))
if err != nil { if err != nil {
return nil, err return err
} }
} else { } else {
err = b.StartAnswers() err = b.StartAnswers()
if err != nil { if err != nil {
return nil, err return err
} }
err = b.AResource(dnsmessage.ResourceHeader{ err = b.AResource(dnsmessage.ResourceHeader{
Name: q.Name, Name: q.Name,
@@ -89,7 +104,7 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
}, *nameToA) }, *nameToA)
if err != nil { if err != nil {
panic(err.Error()) 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 == nil', and it flummoxed me.
err = b.StartAuthorities() err = b.StartAuthorities()
if err != nil { if err != nil {
return nil, err return err
} }
err = b.SOAResource(dnsmessage.ResourceHeader{ err = b.SOAResource(dnsmessage.ResourceHeader{
Name: q.Name, Name: q.Name,
@@ -113,12 +128,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
Length: 0, Length: 0,
}, SOAResource(q.Name.String())) }, SOAResource(q.Name.String()))
if err != nil { if err != nil {
return nil, err return err
} }
} else { } else {
err = b.StartAnswers() err = b.StartAnswers()
if err != nil { if err != nil {
return nil, err return err
} }
err = b.AAAAResource(dnsmessage.ResourceHeader{ err = b.AAAAResource(dnsmessage.ResourceHeader{
Name: q.Name, Name: q.Name,
@@ -129,19 +144,12 @@ func QueryResponse(queryBytes []byte) ([]byte, error) {
}, *nameToAAAA) }, *nameToAAAA)
if err != nil { if err != nil {
panic(err.Error()) panic(err.Error())
return nil, err return err
} }
} }
} }
} }
} return nil
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
} }
// ResponseHeader returns a pre-fab DNS response header. Note that we're always // ResponseHeader returns a pre-fab DNS response header. Note that we're always