mirror of
https://github.com/cunnie/sslip.io.git
synced 2025-10-07 00:23:44 +08:00
Extracted method processQuestion()
...because `QueryResponse()` was becoming much too big.
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user