diff --git a/modules/dns_proxy/dns_proxy_js_query.go b/modules/dns_proxy/dns_proxy_js_query.go index 7db5118a..5e563561 100644 --- a/modules/dns_proxy/dns_proxy_js_query.go +++ b/modules/dns_proxy/dns_proxy_js_query.go @@ -36,6 +36,76 @@ type JSQueryHeader struct { Zero bool } +func jsPropToMap(obj map[string]interface{}, key string) map[string]interface{} { + if v, ok := obj[key].(map[string]interface{}); ok { + return v + } + return map[string]interface{}{} +} + +func jsPropToMapArray(obj map[string]interface{}, key string) []map[string]interface{} { + if v, ok := obj[key].([]map[string]interface{}); ok { + return v + } + return []map[string]interface{}{} +} + +func jsPropToString(obj map[string]interface{}, key string) string { + if v, ok := obj[key].(string); ok { + return v + } + return "" +} + +func jsPropToStringArray(obj map[string]interface{}, key string) []string { + if v, ok := obj[key].([]string); ok { + return v + } + return []string{} +} + +func jsPropToUint8(obj map[string]interface{}, key string) uint8 { + if v, ok := obj[key].(uint8); ok { + return v + } + return 0 +} + +func jsPropToUint8Array(obj map[string]interface{}, key string) []uint8 { + if v, ok := obj[key].([]uint8); ok { + return v + } + return []uint8{} +} + +func jsPropToUint16(obj map[string]interface{}, key string) uint16 { + if v, ok := obj[key].(uint16); ok { + return v + } + return 0 +} + +func jsPropToUint16Array(obj map[string]interface{}, key string) []uint16 { + if v, ok := obj[key].([]uint16); ok { + return v + } + return []uint16{} +} + +func jsPropToUint32(obj map[string]interface{}, key string) uint32 { + if v, ok := obj[key].(uint32); ok { + return v + } + return 0 +} + +func jsPropToUint64(obj map[string]interface{}, key string) uint64 { + if v, ok := obj[key].(uint64); ok { + return v + } + return 0 +} + func (j *JSQuery) NewHash() string { answers, _ := json.Marshal(j.Answers) extras, _ := json.Marshal(j.Extras) diff --git a/modules/dns_proxy/dns_proxy_js_record.go b/modules/dns_proxy/dns_proxy_js_record.go index 647267e2..55832d69 100644 --- a/modules/dns_proxy/dns_proxy_js_record.go +++ b/modules/dns_proxy/dns_proxy_js_record.go @@ -8,76 +8,6 @@ import ( "github.com/miekg/dns" ) -func jsPropToMap(obj map[string]interface{}, key string) map[string]interface{} { - if v, ok := obj[key].(map[string]interface{}); ok { - return v - } - return map[string]interface{}{} -} - -func jsPropToMapArray(obj map[string]interface{}, key string) []map[string]interface{} { - if v, ok := obj[key].([]map[string]interface{}); ok { - return v - } - return []map[string]interface{}{} -} - -func jsPropToString(obj map[string]interface{}, key string) string { - if v, ok := obj[key].(string); ok { - return v - } - return "" -} - -func jsPropToStringArray(obj map[string]interface{}, key string) []string { - if v, ok := obj[key].([]string); ok { - return v - } - return []string{} -} - -func jsPropToUint8(obj map[string]interface{}, key string) uint8 { - if v, ok := obj[key].(uint8); ok { - return v - } - return 0 -} - -func jsPropToUint8Array(obj map[string]interface{}, key string) []uint8 { - if v, ok := obj[key].([]uint8); ok { - return v - } - return []uint8{} -} - -func jsPropToUint16(obj map[string]interface{}, key string) uint16 { - if v, ok := obj[key].(uint16); ok { - return v - } - return 0 -} - -func jsPropToUint16Array(obj map[string]interface{}, key string) []uint16 { - if v, ok := obj[key].([]uint16); ok { - return v - } - return []uint16{} -} - -func jsPropToUint32(obj map[string]interface{}, key string) uint32 { - if v, ok := obj[key].(uint32); ok { - return v - } - return 0 -} - -func jsPropToUint64(obj map[string]interface{}, key string) uint64 { - if v, ok := obj[key].(uint64); ok { - return v - } - return 0 -} - func NewJSResourceRecord(rr dns.RR) (jsRecord map[string]interface{}, err error) { header := rr.Header() @@ -1007,7 +937,14 @@ func ToRR(jsRecord map[string]interface{}) (rr dns.RR, err error) { // case dns.TypeDOA: // case dns.TypeSINK: default: - return nil, fmt.Errorf("error converting to dns.RR: unknown type: %d", header.Rrtype) + if rdata, ok := jsRecord["Rdata"].(string); ok { + rr = &dns.RFC3597{ + Hdr: header, + Rdata: rdata, + } + } else { + return nil, fmt.Errorf("error converting to dns.RR: unknown type: %d", header.Rrtype) + } } return rr, nil