1# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
2# See LICENSE.txt for complete terms.
3
4from mixbox import entities
5from mixbox import fields
6
7import cybox.bindings.dns_query_object as dns_query_binding
8from cybox.common import DateTime, ObjectProperties, String, HexBinary
9from cybox.objects.uri_object import URI
10from cybox.objects.dns_record_object import DNSRecord
11
12
13class DNSResourceRecords(entities.EntityList):
14    _binding = dns_query_binding
15    _binding_class = dns_query_binding.DNSResourceRecordsType
16    _namespace = "http://cybox.mitre.org/objects#DNSQueryObject-2"
17    resource_record = fields.TypedField("Resource_Record", DNSRecord, multiple=True)
18
19
20class DNSQuestion(entities.Entity):
21    _namespace = "http://cybox.mitre.org/objects#DNSQueryObject-2"
22    _binding = dns_query_binding
23    _binding_class = dns_query_binding.DNSQuestionType
24
25    qname = fields.TypedField("QName", URI)
26    qtype = fields.TypedField("QType", String)
27    qclass = fields.TypedField("QClass", String)
28
29
30class DNSQuery(ObjectProperties):
31    _binding = dns_query_binding
32    _binding_class = dns_query_binding.DNSQueryObjectType
33    _namespace = "http://cybox.mitre.org/objects#DNSQueryObject-2"
34    _XSI_NS = "DNSQueryObj"
35    _XSI_TYPE = "DNSQueryObjectType"
36
37    successful = fields.TypedField("successful")
38    transaction_id = fields.TypedField("Transaction_ID", HexBinary)
39    question = fields.TypedField("Question", DNSQuestion)
40    answer_resource_records = fields.TypedField("Answer_Resource_Records", DNSResourceRecords)
41    authority_resource_records = fields.TypedField("Authority_Resource_Records", DNSResourceRecords)
42    additional_records = fields.TypedField("Additional_Records", DNSResourceRecords)
43    date_ran = fields.TypedField("Date_Ran", DateTime)
44    service_used = fields.TypedField("Service_Used", String)
45