mirror of
https://github.com/cunnie/sslip.io.git
synced 2025-10-07 08:31:02 +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 {
|
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
|
||||||
|
Reference in New Issue
Block a user