func()

in pcap-cli/internal/transformer/json_translator.go [855:946]


func (t *JSONPcapTranslator) translateDNSanswers(
	ctx context.Context,
	dns *layers.DNS,
	size *int,
	domain *gabs.Container,
) {
	answers, _ := domain.ArrayOfSize(*size, "answers")

	for i, answer := range dns.Answers {
		a, _ := answers.ObjectI(i)

		// Header
		a.Set(string(answer.Name), "name")
		a.Set(answer.Type.String(), "type")
		a.Set(answer.Class.String(), "class")
		a.Set(answer.TTL, "ttl")

		switch answer.Type {

		case layers.DNSTypeA:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L908-L909
			a.Set(answer.IP.String(), "A")

		case layers.DNSTypeAAAA:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L910-L911
			a.Set(answer.IP.String(), "AAAA")

		case layers.DNSTypeNS:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L919-L924
			a.Set(string(answer.NS), "NS")

		case layers.DNSTypeCNAME:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L925-L930
			a.Set(string(answer.CNAME), "CNAME")

		case layers.DNSTypePTR:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L931-L936
			a.Set(string(answer.PTR), "PTR")

		case layers.DNSTypeSOA:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L937-L955
			soaJSON, _ := a.Object("SOA")
			soaJSON.Set(string(answer.SOA.MName), "mname")
			soaJSON.Set(string(answer.SOA.RName), "rname")
			soaJSON.Set(answer.SOA.Serial, "serial")
			soaJSON.Set(answer.SOA.Expire, "expire")
			soaJSON.Set(answer.SOA.Refresh, "refresh")
			soaJSON.Set(answer.SOA.Retry, "retry")

		case layers.DNSTypeSRV:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L973-L984
			srvJSON, _ := a.Object("SRV")
			srvJSON.SetP(string(answer.SRV.Name), "name")
			srvJSON.SetP(answer.SRV.Port, "port")
			srvJSON.SetP(answer.SRV.Weight, "weight")
			srvJSON.SetP(answer.SRV.Priority, "priority")

		case layers.DNSTypeMX:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L956-L965
			mxJSON, _ := a.Object("MX")
			mxJSON.SetP(string(answer.MX.Name), "name")
			mxJSON.SetP(answer.MX.Preference, "preference")

		case layers.DNSTypeURI:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L966-L972
			uriJSON, _ := a.Object("URI")
			uriJSON.SetP(string(answer.URI.Target), "target")
			uriJSON.SetP(answer.URI.Priority, "priority")
			uriJSON.SetP(answer.URI.Weight, "weight")

		// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L912-L918
		case layers.DNSTypeTXT:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L864-L875
			txts, _ := a.ArrayOfSize(len(answer.TXTs))
			for i, txt := range answer.TXTs {
				txts.SetIndex(string(txt), i)
			}

		// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L985-L990
		case layers.DNSTypeOPT:
			// see: https://github.com/google/gopacket/blob/master/layers/dns.go#L877-L903
			opts, _ := a.ArrayOfSize(len(answer.OPT), "OPT")
			for i, opt := range answer.OPT {
				o, _ := opts.ObjectI(i)
				o.Set(opt.Code.String(), "code")
				o.Set(string(opt.Data), "data")
			}

		}

	}
}